170 похожих чатов

Ребята, приветствую всех! Подскажите те, кто хорошо шарит в сетевых настройках

и умеет готовить сервера, в частности - сервер на Go.

У нас на проде есть сервер выделенный сейчас (на нем установлена чистая Ubuntu Server 20.04 LTS).
Скрин не могу запостить, вот ссылка на скрин - https://ibb.co/L9tJ3yV
Хотел кинуть ссылку на него у регистратора, но подумал, что Вы сочтете за рекламу, поэтому только скрин.
Если не откроется скрин то вот железо сервера:
=============================================
Xeon W-2275 3.30 ГГц
14 ядер, 28 потоков
RAM - 128 ГБ DDR4
Диски - 2 x 480 ГБ SSD
Канал - 1ГБИТ


Суть такая. Я написал простейший нативный сервер на Go с отдачей json ответа и скрипт на PHP который отдает такой же ответ.

Ответ такой, чисто для тестов:
{
"status": "success"
}

Скрипт на Go:
==============
func main() {
http.HandleFunc("/api/user", handler)
http.ListenAndServe(":3001", nil)
}

func handler(w http.ResponseWriter, r *http.Request) {
response := response{
Status: "success",
}

res, err := json.Marshal(response)

if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}

w.Header().Set("Content-Type", "application/json")
w.Write(res)
}

И простейший скрипт на PHP:
============================
echo json_encode([
'status' => 'success'
]);

Сервер на Go сам по себе, без проксирования с Nginx.

А PHP работает в связке с Nginx в режиме FPM.

На выделенном сервере больше ни чего не установлено.

Запускаю консольную утилиту WRK для нагрузочного тестирования в 4 потока и в 100 коннектов в течении 10 сек.
wrk -t4 -c100 -d10s http://HOST:3001/api/user

И получаю ответ при тестировании Go сервера:
============================================
yuri@msi:~$ wrk -t4 -c100 -d10s http://HOST:3001/api/user
Running 10s test @ http://HOST:3001/api/user
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 70.06ms 8.33ms 383.37ms 90.31%
Req/Sec 357.34 45.01 484.00 78.54%
14154 requests in 10.01s, 1.57MB read
Requests/sec: 1413.49
Transfer/sec: 160.12KB


При тестировании Nginx + PHP FPM:
=================================
yuri@msi:~$ wrk -t4 -c100 -d10s https://HOST:3002/api/user
Running 10s test @ https://HOST:3002/api/user
4 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 75.19ms 15.90ms 370.25ms 95.56%
Req/Sec 328.83 65.50 450.00 82.26%
12845 requests in 10.01s, 5.44MB read
Requests/sec: 1282.86
Transfer/sec: 556.19KB


И вижу, что сервер на Go успевает обрабатывать 1413 запросов в секунду, тогда как PHP - 1282 за секунду.

Вопросы:
1. Нормальное ли это значение для такого мощного выделенного сервера?
2. Почему такая маленькая разница между сервером на Go и связкой Nginx + PHP FPM?
PHP Всего лишь на 200 запросов проигрывает Go. Я почему то ожидал, что PHP вообще прям очень мало покажет.
3. Как можно скажем так затюнить сервер на Go чтобы еще больше выжать из него.
Сразу скажу ни Nginx ни сервер на Go я ни как не настраивал. Все стандартное.

И так для общего сведения:
Выделенный сервер с Ubuntu 20.04 LTS и шириной канала 1ГБИТ.
Тестировал WRK и слал запросы со своего рабочего ноута с инетом 500 МБИТ.

Прошу пожалуйста помочь мне понять, что и как улучшить у сервера на Go или это нормальные показатели и ничего не нужно дополнительно конфигурировать?

3 ответов

7 просмотров

1) в ноут приходит кабель? 2) график утилизации cpu на роутере

А в респонс смотрели? Что там? И что показывает wrk?

Похожие вопросы

Обсуждают сегодня

читать файл максимально быстро? странный вопрос))
zamtmn
50
я не понимаю mov [r11+8],rcx и прочие. мы записываем значение из rcx, куда?
Bor
15
всем привет! углубившись в плюсы и начав изучать реверсинг понял, что без асм'а никуда со своими высокоабстрактными представлениями начал изучать механизмы асма, и не совсем п...
8
у меня такой вопрос про память в x86 возник, может кто пояснить?.. у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше)...
Toideng
5
Всем ку. Подскажите, если задекларировал массив так: int arr[10] = {1, 2, 3, 4}, то в arr[4] будет мусор или нуль?
Sasha K
10
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
А какие расширения активно используются в промышленности? Именно идейные, по типу гадт, а не всякие оверлоадедстрингс
Степан
10
у процессора есть (как минимум) 3 типа адресов (названия "п1", "п2", "п3" --- мои, чтобы проще было дальше): - "п1" --- виртуальный адрес, то есть тот, который ресолвится в "п...
Toideng
3
Guys Who’s kurdish on this group?
Hiwa Amiri
11
Hello, I need a hand, this is my code: body: ExtendedImageGesturePageView.builder( scrollDirection: Axis.vertical, controller: _pageController, itemCou...
𝘞𝘦𝘢𝘳𝘪𝘯𝘨𝘔𝘦𝘥𝘢𝘭 🦋
2
Карта сайта