Pourquoi Nginx est-il si rapide?

31

Comment un site comme rambler sert-il si rapidement du contenu dynamique? Encore plus rapide que Yahoo (qui a un serveur dans mon pays - Asie du Sud-Est, Rambler n'en a pas).

S'agit-il uniquement de la capacité de Nginx? Où dois-je chercher pour en savoir plus sur ces capacités?

À peu près un débutant ici, je crois que serverfault.com s'il est servi à partir de Nginx sera beaucoup plus rapide IIS 7 (en supposant que le temps d'accès à la base de données soit le même dans les deux cas). Est-ce une hypothèse juste?

Modifier:

Message de Karl utilisant Nginx devant IIS7

Quintin Par
la source
Notez que serverfault.com utilise déjà Nginx (selon Wappalyzer ). : P
WillS

Réponses:

26

Vous pouvez voir cette présentation pour un aperçu des composants internes de nginx. La principale différence est la gestion asynchrone des requêtes au lieu d'utiliser des threads comme le fait Apache. Vous pouvez également consulter cette documentation .

Maxwell
la source
2
Bonne réponse quant à l'architecture de nginx et au problème C10K. Cependant, je comprends que la question des OP concerne la vitesse de chargement de la page perçue, ce qui n'a pas grand-chose à voir avec nginx.
Jesper M
Que signifie réellement "asynchrone"? J'ai toujours pensé que cela signifie exécuté dans un thread séparé.
Ivan
Asynchrone signifie que Nginx agit toujours comme un proxy, même avec Php: Nginx obtient la requête HTTP, envoie au serveur Php MAIS ne verrouille pas / attend pour envoyer la réponse HTTP. C'est pourquoi vous voyez une différence (vitesse, CPU / RAM) pour le site Web à fort trafic. Mais il n'y a pas de gain de performances pour quelques requêtes (qui concernent 95% d'Internet ....), mais Nginx est cool ;-)
Thomas Decaux
21

Comment un site comme rambler sert-il si rapidement du contenu dynamique? ... S'agit-il uniquement de la capacité de Nginx? Où dois-je chercher pour en savoir plus sur ces capacités?

Cela n'a rien à voir avec le serveur Web utilisé - nginx, IIS et Apache sont «assez rapides» et font généralement leur travail en quelques millisecondes. nginx est beaucoup plus rapide qu'Apache, mais cela signifie simplement que le propriétaire du site aura besoin de moins de serveurs pour la partie de service Web - nginx ne vous transfère pas les données plus rapidement.

La partie la moins importante est la vitesse côté serveur , c'est-à-dire le temps nécessaire pour créer le code HTML. La partie la plus importante est la performance `` frontend '' , par laquelle je veux dire le HTML, CSS, Javascript et Images, le nombre de ceux-ci, la taille de ceux-ci et la livraison appropriée (compression HTTP, mise en cache) de ceux-ci.

Bien sûr, la vitesse côté serveur est toujours importante, je ne dis pas qu'elle devrait être ignorée ou que cela n'a pas d'importance. Mais généralement, c'est la plus petite partie perçue de la vitesse de l'utilisateur final - le travail côté serveur se fait souvent en moins de 500 millisecondes, mais la page n'est pas prête avant 3000 à 5000 millisecondes. La majeure partie de ce temps est consacrée au téléchargement des ressources frontales (CSS, Javascript, Images).

Steve Souders a fait le travail d'origine alors que chez Yahoo, il travaille maintenant chez Google. Son premier livre "Sites Web haute performance" est le meilleur point de départ pour en savoir plus sur la création de sites Web rapides. Le même matériel qui se trouve dans son livre peut être trouvé dans cette conversation vidéo et ces règles de conception . Cependant, je trouve que le livre est rapide à lire et beaucoup plus facile à comprendre.

Vous pouvez exécuter les sites via le testeur de WebPageTest.org - qui vous donnera une bonne idée de la partie frontale de ces sites, et pourquoi ils sont plus rapides ou plus lents.

Je crois que serverfault.com s'il est servi depuis Nginx sera beaucoup plus rapide que IIS 7 (en supposant que le temps d'accès à la base de données soit le même dans les deux cas). Est-ce une hypothèse juste?

Non, c'est un malentendu. :-)

Jesper M
la source
18

Nginx est plus souvent utilisé pour équilibrer la charge d'autres applications / serveurs et servir du contenu statique qu'il n'est utilisé comme serveur complet.

Par exemple, vous pouvez écrire une application en utilisant l'un des nombreux frameworks python et avoir nginx comme front-end pour de nombreuses instances (peut-être réparties sur plusieurs machines). Dans ce cas, nginx sert deux objectifs: il gère directement les demandes de contenu statique comme les images et les feuilles de style (et en raison de sa conception, il le fait très rapidement), et il transmet des demandes dynamiques à l'application en répartissant la charge entre toutes les instances qu'il connaît. . Il s'agit également d'une configuration très populaire dans la communauté Ruby on Rails.

Il y a deux autres raisons possibles pour lesquelles Rambler peut apparaître plus rapidement que le service Yahoo local. Premièrement, le PoP Yahoo local pourrait ne pas avoir suffisamment de ressources disponibles pour traiter le nombre de demandes qu'il obtient plus rapidement, alors peut-être simplement ajouter plus de matériel (en supposant que le logiciel évolue bien de cette façon) l'accélérerait (mais, vraisemblablement, la différence n'est pas vaut le coût de l'entretien du kit supplémentaire ou Yahoo l'aurait fait). L'autre grande différence peut être dans le serveur principal plutôt que dans le serveur Web - les deux services auront sans aucun doute des dispositions de base de données très différentes et même s'ils ne sont pas susceptibles d'exécuter exactement la même variété de requêtes (et la quantité de le matériel dédié à l’architecture des bases de données aura également un effet significatif).

L'analyse de la raison pour laquelle un service est plus rapide qu'un autre (généralement ou dans des circonstances spécifiques) n'aboutira généralement pas à une réponse simple et unique - il existe de nombreuses façons de concevoir une application qui est destinée à être étendue à plusieurs milliers d'utilisateurs, chacun avec ses propres avantages, problèmes et compromis et même si vous tenez compte de toutes ces différences, chaque site aura une dynamique de base d'utilisateurs différente, et il y a aussi des problèmes de réseau hors du contrôle des concepteurs.

David Spillett
la source
3

architecture nginx possible mais plus évolutive avec équilibrage de charge raisonnable devant les serveurs de contenu statiques / générateurs de contenu dynamique. si vous voulez vraiment obtenir une excellente expérience utilisateur final, vous devriez probablement rapprocher le contenu des «globes oculaires» - utilisez du CDN.

si vous êtes intéressé par le sujet - consultez ceci et cela et .. bien - google; -]

pQd
la source
2

Les meilleurs sites utilisent des accélérateurs d'applications tels que les ZXTM de Zeus - ils peuvent mettre en cache des réponses dynamiques dans de nombreux cas, ce qui est évidemment très avantageux.

Chopper3
la source
0

J'ai du mal à voir la défaillance du serveur beaucoup plus rapidement (SO pourrait avoir des problèmes de chargement à cause du trafic peut-être?) Car c'est déjà un chargement de page instantané ici dans l'UE sur mon itinéraire. C'est beaucoup plus rapide et réactif que la plupart des sites d'actualités locaux, etc.

La plupart des problèmes évidents de temps de chargement et de latence proviennent du serveur et de l'imo de l'utilisateur final et non des performances réelles du serveur (sauf si quelqu'un a dimensionné ou conçu quelque chose de mal). Différents sites peuvent être routés de différentes manières et il y a une grande possibilité qu'un site local pour moi ait une latence plus grande que quelque chose à travers la planète - tout dépend de tellement de variables que vous ne pouvez pas dire qu'il est résoluble par un simple service mise à niveau / commutateur, sauf si vous savez que c'est là que le problème pour une utilisation spécifique (r) est ...

Évidemment, la mise en cache de différents types sur le serveur fait une grande différence, mais tous ces sites le font déjà à ma connaissance.

Oskar Duveborn
la source