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 ответов

19 просмотров

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта