Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:

У цій статті ми спробуємо себе у реверс-інжинірингу, можна сказати. Ми заглянемо своїми брудними руками під капот кожного з веб-серверів, експлуатуючи їх так, як ніхто ніколи не експлуатував би.

Цей тест – замір сферичного коня у вакуумі, не більше ніж дані, отримані, і ми тепер не знаємо, що з ними робити.

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:

Методика

Як операційна система для Nginx і Apache виступає Ubuntu 18.04 LTS, для IIS Windows Server Core 2019. Усі операційні системи перед тестами отримали останні оновлення на стан 04.12.2019.

Тести проводилися виключно з HTTP. На кожному з веб-серверів крутилася та сама сторінка, безкоштовний шаблон для Jekyll від Codrops. Посилання. На кожному з веб-серверів було вимкнено стиснення gzip.

Тест пропускної спроможності проводився з Httpd-tools з аргументами:

ab -n 50000 -c 500 http://192.168.76.204:80/

На сервери встановлювався ліміт 10, 5 і 1 відсоток від ядра на 8, 4 та одному ядрі. Як тестовий стенд був комп'ютер із 9900K@5400мгц, що означає, що сервер, що отримав обмеження в 10%, отримує близько 540мгц на ядро.

Тест TTFB проводився при першому завантаженні сервера і замірявся за допомогою DevTools, після отримання результату сервер вимикався і відкочувався на попередню контрольну точку, щоб унеможливити появу будь-якого роду кешів.

Тестувальник і веб-сервер знаходилися на тому самому хості і на тому самому віртуальному світчі.

Щоб одразу оцінити дискову підсистему, результати бенчмарку ATTO та CrystalDIskMark, щоб мати поняття про вузькі місця.

Дані знято з віртуальної машини:Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:

Результати:

TTFB:

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Середній TTFB у IIS найменший, 0,5мс, проти 1,4мс у Apache і 4мс у Nginx.

Пропускна здатність:

Спочатку розглянемо, наскільки добре кожен із серверів масштабується за кількістю ядер.

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
На графіку представлено кількість звернень тестувальника до веб-сервера та латентність. На графіку видно, що NGINX відпрацював 98% всіх звернень, віддавши сайт за 20мс і менше. IIS як і Apache останні 5% з усіх звернень відпрацювали за 76мс та 14мс відповідно.

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
На графіку показаний середній час обробки одного запиту під час стрес тесту.

Як можна помітити з графіків, IIS продули і Apache і Nginx, сильно сповільнюючись під високим навантаженням. 

IIS явно віддав перевагу 4 ядрам перед вісьмома, показавши менші затримки на чотирьох, але так само не сильно схвалив і одне ядро.

NGINX чудово масштабується на всі 8 ядер, а для Apache, зважаючи на все, одноядерний сценарій здається найкращим вибором.

Масштабованість:

Nginx:

Тепер розглянемо масштабованість за частотою та кількістю ядер. 

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Тести з обмеженням 1% на 4 і 1 ядра Nginx не пройшов, вийшовши за 2000 запитів він обривав з'єднання з тестувальником.

Apache:

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Apache як Nginx обробивши 2500 запитів, здався і розірвав з'єднання. Apache не пройшов тест на 8, 4 і 1 ядрах з лімітом в 1%, але крім цього не пройшов і тест на 5% обмеження на одному ядрі, що гірше ніж Nginx

IIS:

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
IIS під час тестів набрав гігантську чергу із запитів, але обробив кожен з них. Зважаючи на все, в ньому з коробки не встановлені таймаути на обробку запиту.

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
На діаграмі подано час, за який було завершено тест. Були відкинуті абсолютно абсурдні зміни тестування. З діаграми видно, наскільки IIS вимогливий до заліза і наскільки прекрасний NGINX.

Масштабованість від диска:

Nginx:

Тепер розглянемо масштабованість по частоті та кількості ядер та швидкості диска. 

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
На цей раз Nginx не пройшов 4 тести, замість двох.

Apache:

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
Apache провалив однакову кількість тестів, як і минулого разу.

IIS:

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:
IIS показує майже ідентичний графік, начебто обмежень на диск і не було. Загалом графіки у всіх серверів не сильно змінилися, а це означає, що кожен з них закешував статику в оперативну пам'ять і віддавав звідти. Тут бачимо головне вузьке місце – сам веб-сервер.

Висновки на основі цього тестування робити рано, ми ще не протестували HTTPS, компресію та HTTP/2 із живим сертифікатом від Let's Encrypt. Про це розповімо у наступній статті.

Битва WEB-серверів Частина 1 – відірваний від реальності HTTP:

Джерело: habr.com

Додати коментар або відгук