и умеет готовить сервера, в частности - сервер на 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 или это нормальные показатели и ничего не нужно дополнительно конфигурировать?
1) в ноут приходит кабель? 2) график утилизации cpu на роутере
А в респонс смотрели? Что там? И что показывает wrk?
Обсуждают сегодня