![](https://habrastorage.org/getpro/habr/post_images/e98/b4f/df1/e98b4fdf1818cb6bfaf1d464ee87e3ac.png)
О методике мы рассказывали в первой части статьи, в этой мы тестируем HTTPS, но в более реалистичных сценариях. Для тестирования был получен сертификат Let’s Encrypt, включено сжатие Brotli на 11.
На этот раз попробуем воспроизвести сценарий развертывания сервера на VDS или в качестве виртуальной машины на хосте с типовым процессором. Для этого устанавливали лимит в:
- 25% — Что в пересчете на частоту ~ 1350МГц
- 35% -1890Мгц
- 41% — 2214Мгц
- 65% — 3510Мгц
Количество единовременных подключений сократилось с 500 до 1, 3, 5, 7 и 9,
Результаты:
Задержки:
TTFB специально был вынесен качестве отдельного теста, потому что HTTPD Tools для каждого отдельного запроса создаёт как-бы нового пользователя. Этот тест все еще достаточно оторван от реальности, потому что пару страниц пользователь все равно кликнет, и в реальности главную роль сыграет TTFP.
![](https://habrastorage.org/getpro/habr/post_images/d16/3a9/a21/d163a9a21730a7837ec6adccb4758e4d.png)
Первый, вообще самый первый запрос после первого старта виртуальной машины IIS отрабатывает в среднем за 120 мс.
![](https://habrastorage.org/getpro/habr/post_images/586/dcb/0c9/586dcb0c9eeb8443c4cd52fd49a3d5c3.png)
Все последующие запросы показывают TTFP в 1.5 мс. Apache и Nginx в этом отстают. Лично автор считает этот тест самым показательным и выбирал бы победителя только по нему.
Результат не является удивительным, так как IIS кэширует уже сжатый статический контент и не пережимает его каждый раз, как к нему обратились.
Время потраченное на одного клиента
Для оценки производительности достаточно и теста с 1 единовременным подключением.
К примеру, IIS завершил тестирование длинной в 5000 пользователей за 40 секунд, это 123 запроса в секунду.
В графиках ниже приведено время до полной передачи контента сайта. Это доля запросов, выполненных в определенное время. В нашем случае 80% всех запросов было обработано за 8мс на IIS и за 4.5мс на Apache и Nginx, а интервал до 8 миллисекунд выполнились 98% всех запросов на Apache и Nginx.
![](https://habrastorage.org/getpro/habr/post_images/305/e49/03c/305e4903cc0a2abf597b14132c8cdd85.png)
Время, за которое 5000 запросов были обработаны:
![](https://habrastorage.org/getpro/habr/post_images/f29/ef5/871/f29ef587182d7dd5e7df53af806855b0.png)
![](https://habrastorage.org/getpro/habr/post_images/c52/60b/c4a/c5260bc4a393960d4116fb843ea7ffb1.png)
Время, за которое 5000 запросов были обработаны:
![](https://habrastorage.org/getpro/habr/post_images/753/d66/f67/753d66f67f474f3c86c1fee8883b2a70.png)
Если у вас есть виртуальная машина с 3.5Ггц ЦП и 8 ядрами, то выбирайте то, что хотите. Все веб серверы очень похожи в данном тестировании. О том, какой веб сервер выбрать для каждого хоста поговорим ниже.
Когда речь идет чуть более реальной ситуации, все веб серверы идут нос к носу.
Throughput:
График задержек от количества одновременных подключений. Ровнее и ниже – лучше. Последние 2% были выкинуты из графиков потому, что они сделают их нечитаемыми.
![](https://habrastorage.org/getpro/habr/post_images/06a/504/0ba/06a5040ba38a1ce27336a473f875a6a9.png)
![](https://habrastorage.org/getpro/habr/post_images/030/ac4/25a/030ac425a43f2508d1c8ce2235be30a2.png)
![](https://habrastorage.org/getpro/habr/post_images/6ea/caf/960/6eacaf96036c0cb5032908b98977b1ef.png)
Теперь рассмотрим вариант, где сервер размещается на виртуальном хостинге. Возьмем 4 ядра по 2.2ГГц и одно ядро на 1.8Ггц.
![](https://habrastorage.org/getpro/habr/post_images/4b3/220/859/4b3220859223d1388b4c00b3eeb55194.png)
![](https://habrastorage.org/getpro/habr/post_images/0c1/d28/e1c/0c1d28e1cd67942fbc54a472bd28942a.png)
![](https://habrastorage.org/getpro/habr/post_images/1ee/bec/40e/1eebec40e354a86a11b9324449fa49cf.png)
![](https://habrastorage.org/getpro/habr/post_images/2f3/a99/53b/2f3a9953b0c7812932669f0b83a95c1b.png)
![](https://habrastorage.org/getpro/habr/post_images/6f7/f98/f4f/6f7f98f4f4182b6560b653e4a0e8f6ac.png)
![](https://habrastorage.org/getpro/habr/post_images/f2e/ca6/632/f2eca66320f4b03d34772fe7cf3403d6.png)
Как масштабируются
Если вы когда-либо видали, как выглядят ВАХ электровакуумных триодов, пентодов и так далее, эти графики будут для вас знакомы. Именно это мы и пытаемся поймать – насыщение. Предел, когда сколько ядер не кидай, рост производительности не будет заметен.
Ранее весь челленж состоял в том, чтобы обработать 98% запросов имея наименьшую задержку по всем запросам, как можно ровнее держать кривую. Теперь с помощью построения другой кривой, найдем оптимальную рабочую точку для каждого из серверов.
Для этого возьмем показатель Requests per second (RPR). По горизонтали частота, по вертикали — количество запросов, обработанных за секунду, линии – количество ядер.
![](https://habrastorage.org/getpro/habr/post_images/b49/5b4/1e2/b495b41e2ce0c33e84ed23b5ff3820d7.png)
Показана корреляция насколько хорошо Nginx обрабатывает запросы один за другим. 8 ядер в таком тестировании показывают себя лучше.
![](https://habrastorage.org/getpro/habr/post_images/0fc/73f/540/0fc73f5402df4d787ecffd3e838323d2.png)
На этом графике прекрасно видно, насколько лучше (не на много) Nginx работает на одном ядре. Если у вас Nginx, стоит задуматься об уменьшении количества ядер до одного, если вы хостите только статику.
![](https://habrastorage.org/getpro/habr/post_images/201/608/276/201608276469ea155f7d151bae839d7f.png)
![](https://habrastorage.org/getpro/habr/post_images/45b/a4c/311/45ba4c311df1dc07220af9cc9c78a711.png)
![](https://habrastorage.org/getpro/habr/post_images/4ea/dd6/831/4eadd68312d67d4579c9596b62cd6cb1.png)
IIS хоть и имеет самый низкий TTFB по мнению DevTools в Chrome, умудряется проиграть и Nginx и Apache в серьезной борьбе со стресс тестом от Apache Foundation.
![](https://habrastorage.org/getpro/habr/post_images/d95/f30/1a8/d95f301a854c9ebbd20aada507b7194c.png)
Вся кривизна графиков воспроизводится железно.
Своего рода вывод:
Да, Apache железно работает хуже на 1 и 8 ядрах, а на 4 работает чуть лучше.
Да, Nginx на 8 ядрах обрабатывает лучше запросы один за другим, на 1 и 4 ядрах и хуже работает, когда соединений много.
Да, IIS предпочитает 4 ядра для многопоточной нагрузки и предпочитает 8 ядер для однопоточной. В конечном итоге IIS оказался чуть быстрее всех на 8 ядрах под высокой нагрузкой, хотя все серверы шли вровень.
Это не ошибка измерения, погрешность тут не более +-1мс. в задержках и не более +- 2-3 запроса в секунду для RPR.
Результаты, когда 8 ядер проявляют себя хуже, вовсе не удивительны, много ядер и SMT/Hyperthreading сильно ухудшают производительность, если у нас есть временные рамки, за которые мы должны завершить весь пайплайн.
Предлагаем обновлённый тариф UltraLite Windows VDS за 99 рублей с установленной Windows Server 2019 Core.
![](https://habrastorage.org/webt/ww/d4/ro/wwd4ro5_5a28hvdxyazf3enjxou.png)