La bataille des serveurs web. Partie 1 - HTTP dissocié de la réalité:

Dans cet article, nous allons nous essayer en reverse engineering, pourrait-on dire. Avec des mains sales, nous regardons sous le capot de chacun des serveurs Web, en les exploitant comme personne ne l'aurait jamais exploité.

Ce test est une mesure d'un cheval sphérique dans le vide, rien de plus que les données qui ont été reçues, et maintenant nous ne savons plus quoi en faire.


Méthodologie


Le système d'exploitation pour Nginx et Apache est Ubuntu 18.04 LTS, pour IIS Windows Server Core 2019. Tous les systèmes d'exploitation avant les tests ont reçu les dernières mises à jour le 4 décembre 2019.

Les tests ont été effectués exclusivement sur HTTP. Chaque serveur Web avait la même page, un modèle gratuit pour Jekyll de Codrops. Lien Sur chacun des serveurs Web, la compression gzip a été désactivée.

Le test de bande passante a été effectué avec des outils Httpd avec des arguments:

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

Les serveurs ont été définis sur une limite de 10, 5 et 1% du cœur sur 8, 4 et un cœur. Comme banc d'essai, il y avait un ordinateur avec 9900K @ 5400 MHz, ce qui signifie que le serveur, qui a reçu une limite de 10%, obtient environ 540 MHz par cœur.

Le test TTFB a été effectué au premier démarrage du serveur et a été mesuré à l'aide de DevTools, après avoir reçu le résultat, le serveur s'est éteint et est revenu au point de contrôle précédent pour exclure l'apparition de tout type de cache.

Le testeur et le serveur Web étaient sur le même hôte et sur le même commutateur virtuel.

Pour évaluer immédiatement le sous-système de disque, les résultats des benchmarks ATTO et CrystalDIskMark pour comprendre les goulots d'étranglement.

Données extraites de la machine virtuelle:





Résultats:


TTFB:


Le TTFB moyen pour IIS est le moins élevé, 0,5 ms, contre 1,4 ms pour Apache et 4 ms pour Nginx.

Débit:

Tout d'abord, examinez la façon dont chaque serveur évolue en termes de nombre de cœurs.


Le graphique montre le nombre d'appels du testeur au serveur Web et la latence. Le graphique montre que NGINX a réalisé 98% de tous les hits, donnant au site une durée de 20 ms ou moins. IIS ainsi qu'Apache 5% des appels ont fonctionné respectivement pendant 76 ms et 14 ms.




Le graphique montre le temps de traitement moyen d'une demande lors d'un test de stress.

Comme vous pouvez le voir sur les graphiques, IIS a fait exploser Apache et Nginx, ralentissant considérablement sous une charge élevée.

IIS a clairement préféré 4 cœurs sur huit, montrant moins de retards sur quatre, mais n'a pas non plus fortement approuvé un cœur.

NGINX s'adapte parfaitement aux 8 cœurs, et pour Apache, il semble qu'un script monocœur semble être le meilleur choix.

Évolutivité:


Nginx:

Considérez maintenant l'évolutivité en fréquence et en nombre de cœurs.


Les tests avec une limite de 1% sur 4 et 1 noyaux Nginx n'ont pas réussi, laissant 2000 requêtes, il s'est déconnecté du testeur.

Apache:


Après avoir traité 2500 demandes, Apache en tant que Nginx s'est rendu et s'est déconnecté. Apache n'a pas réussi le test sur les noyaux 8, 4 et 1 avec une limite de 1%, mais en plus de cela, le test à la limite de 5% sur un cœur n'a pas réussi, ce qui est pire que Nginx

IIS:


IIS pendant les tests a rassemblé une énorme file d'attente de requêtes mais a traité chacune d'elles. Apparemment, aucun délai d'attente pour le traitement de la demande n'est défini.


Le diagramme montre le temps nécessaire pour terminer le test. Des configurations de test absurdement absurdes ont été abandonnées. Le diagramme montre à quel point IIS exige du matériel et à quel point NGINX est beau.

Évolutivité du disque:


Nginx:

Considérez maintenant l'évolutivité de la fréquence et du nombre de cœurs et de la vitesse du disque.


Cette fois, Nginx a échoué à 4 tests, au lieu de deux.

Apache:


Apache a échoué au même nombre de tests que la dernière fois.

IIS:


IIS affiche un graphique presque identique, comme s'il n'y avait aucune restriction de disque. En général, les graphiques de tous les serveurs n'ont pas beaucoup changé, ce qui signifie que chacun d'eux a mis en cache la statique dans la RAM et les a donnés à partir de là. Nous voyons ici le principal goulot d'étranglement - le serveur Web lui-même.

Il est trop tôt pour tirer des conclusions sur la base de ces tests; nous n'avons pas encore testé HTTPS, la compression et HTTP / 2 avec un certificat en direct de Let's Encrypt. Nous en parlerons dans le prochain article.

Nous proposons un tarif UltraLite Windows VDS mis à jour pour 99 roubles avec Windows Server 2019 Core installé.

Source: https://habr.com/ru/post/fr478854/


All Articles