У гэтым артыкуле мы паспрабуем сябе ў рэверс-інжынірынгу, можна сказаць. Мы зазірнем сваімі бруднымі рукамі пад капот кожнага з вэб-сервераў, эксплуатуючы іх так, як ніхто б ніколі не эксплуатаваў.
Гэты тэст - замер сферычнага каня ў вакууме, не больш чым дадзеныя, якія былі атрыманы, і мы зараз не ведаем, што з імі рабіць.
методыка
У якасці аперацыйнай сістэмы для Nginx і Apache выступае Ubuntu 18.04/2019 LTS, для IIS Windows Server Core 04.12.2019. Усе аперацыйныя сістэмы перад тэстамі атрымалі апошнія абнаўлення на стан XNUMX.
Тэсты праводзіліся выключна па HTTP. На кожным з вэб-сервераў круцілася адна і тая ж старонка, бясплатны шаблон для Jekyll ад Codrops.
Тэст прапускной здольнасці праводзіўся з 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, каб мець паняцце аб вузкіх месцах.
Дадзеныя зняты з віртуальнай машыны:
вынікі:
TTFB:
Сярэдні TTFB у IIS менш за ўсіх, 0,5мс, супраць 1,4мс у Apache і 4мс у Nginx.
Прапускная здольнасць:
Спачатку разгледзім, наколькі добра кожны з сервераў маштабуецца па колькасці ядраў.
На графіцы прадстаўлена колькасць зваротаў тэсціроўшчыка да вэб-сервера і латэнтнасць. На графіцы відаць, што NGINX адпрацаваў 98% усіх зваротаў, аддаўшы сайт за 20мс і менш. IIS як і Apache апошнія 5% з усіх зваротаў адпрацавалі за 76мс і 14мс адпаведна.
На графіцы паказаны сярэдні час апрацоўкі аднаго запыту падчас стрэс тэсту.
Як можна заўважыць з графікаў, IIS прадуў і Apache і Nginx, моцна запавольваючыся пад высокай нагрузкай.
IIS відавочна ўпадабаў 4 ядра перад васьмю, паказаўшы меншыя затрымкі на чатырох, але гэтак жа не моцна ўхваліў і адно ядро.
NGINX выдатна маштабуецца на ўсе 8 ядраў, а для Apache, судзячы па ўсім, аднаядзерны сцэнар здаецца найлепшым выбарам.
Маштабаванасць:
Nginx:
Цяпер разгледзім маштабаванасць па частаце і колькасці ядраў.
Тэсты з абмежаваннем у 1% на 4 і 1 ядра Nginx не прайшоў, выйшаўшы за 2000 запытаў ён абрываў злучэнне з тэсціроўшчыкам.
Apache:
Apache як Nginx апрацаваўшы 2500 запытаў здаўся і разарваў злучэнне. Apache не прайшоў тэст на 8, 4 і 1 ядрах з лімітам у 1%, але апроч гэтага не прайшоў і тэст на 5% абмежаванні на адным ядры, што горш чым Nginx
IIS:
IIS падчас тэстаў набраў гіганцкую чаргу з запытаў але апрацаваў кожны з іх. Мяркуючы па ўсім, у ім са скрынкі не ўстаноўлены таймаўты на апрацоўку запыту.
На дыяграме прадстаўлены час, за які быў завершаны тэст. Былі адкінутыя зусім абсурдныя канфігурацыі тэсціравання. З дыяграмы відаць, наколькі IIS патрабавальны да жалеза, і наколькі выдатны NGINX.
Маштабаванасць ад дыска:
Nginx:
Цяпер разгледзім маштабаванасць па частаце і колькасці ядраў і хуткасці дыска.
На гэты раз Nginx не прайшоў 4 цесты, замест двух.
Apache:
Apache праваліў аднолькавую колькасць тэстаў, як і ў мінулы раз.
IIS:
IIS паказвае амаль ідэнтычны графік, нібыта абмежаванняў на дыск і не было. У цэлым, графікі ва ўсіх сервераў не моцна змяніліся, а гэта значыць, што кожны з іх закэшаваў статыку ў аператыўную памяць і аддаваў адтуль. Тут мы бачым галоўнае вузкае месца - сам вэб-сервер.
Высновы на аснове гэтага тэсціравання рабіць рана, мы яшчэ не пратэставалі HTTPS, кампрэсію і HTTP/2 з жывым сертыфікатам ад Let's Encrypt. Пра гэта раскажам у наступным артыкуле.
Крыніца: habr.com