14 votes

Cela prouve-t-il qu'il y a un goulot d'étranglement dans la bande passante du réseau ?

J'ai supposé à tort que mes tests internes d'AB signifiaient que mon serveur pouvait gérer une concurrence de 1k à 3k hits par seconde.

Ma théorie, pour le moment, est que le réseau est le goulot d'étranglement. Le serveur ne peut pas envoyer assez de données assez rapidement.

Les tests externes effectués par blitz.io à 1 000 concurrents montrent que le nombre d'accès par seconde plafonne à 180, les pages prenant de plus en plus de temps à répondre car le serveur ne peut en renvoyer que 180 par seconde.

enter image description here

J'ai servi un fichier vierge à partir de nginx et je l'ai testé : il est à l'échelle 1:1 avec la concurrence.

enter image description here

Maintenant, pour exclure les goulots d'étranglement IO / memcached (nginx tire normalement de memcached), je sers une version statique de la page en cache à partir du système de fichiers.

enter image description here

Les résultats sont très similaires à ceux de mon test original ; je suis plafonné à environ 180 RPS.

En divisant la page HTML en deux, j'obtiens le double de RPS, donc c'est vraiment limité par la taille de la page.

enter image description here

Si j'interne ApacheBench à partir du serveur local, j'obtiens des résultats cohérents d'environ 4k RPS à la fois sur la page complète et la demi-page, à des taux de transfert élevés. Taux de transfert : 62586.14 [Kbytes/sec] reçus

Si j'utilise AB à partir d'un serveur externe, j'obtiens environ 180 RPS - comme les résultats de blitz.io.

Comment puis-je savoir que ce n'est pas un étranglement intentionnel ?

Si j'effectue une évaluation comparative à partir de plusieurs serveurs externes, tous les résultats deviennent médiocres, ce qui me porte à croire que le problème se situe au niveau du trafic sortant de MES serveurs, et non pas au niveau de la vitesse de téléchargement de mes serveurs d'évaluation comparative / blitz.io.

J'en reviens donc à ma conclusion que mon serveur ne peut pas envoyer les données assez vite.

Ai-je raison ? Y a-t-il d'autres façons d'interpréter ces données ? La solution/optimisation consiste-t-elle à mettre en place plusieurs serveurs + équilibrage de charge qui peuvent chacun servir 180 hits par seconde ?

Je suis assez novice en matière d'optimisation de serveur, donc j'apprécierais toute confirmation de l'interprétation de ces données.


Trafic sortant

Voici plus d'informations sur la bande passante sortante : Le graphique du réseau montre une sortie maximale de 16 Mb/s : 16 mégabits par seconde. Ça ne semble pas beaucoup du tout.

Suite à une suggestion concernant l'étranglement, je me suis renseigné et j'ai découvert que linode a un plafond de 50 mbps (que je ne suis même pas près d'atteindre, apparemment). Je l'ai fait passer à 100 mbps.

Puisque linode plafonne mon trafic, et que je ne l'atteins même pas, cela signifie-t-il que mon serveur devrait en effet être capable de produire jusqu'à 100 mbps mais qu'il est limité par un autre goulot d'étranglement interne ? Je ne comprends pas comment fonctionnent les réseaux à cette échelle ; peuvent-ils littéralement envoyer des données aussi vite qu'ils peuvent les lire sur le disque dur ? Le tuyau du réseau est-il que grand ?

enter image description here


En conclusion

1 : Sur la base de ce qui précède, je pense que je peux certainement augmenter mes 180RPS en ajoutant un équilibreur de charge nginx au-dessus d'une configuration multi-serveurs nginx à exactement 180RPS par serveur derrière le LB.

2 : Si linode a une limite de 50/100mbit que je n'atteins pas du tout, il doit y avoir quelque chose que je peux faire pour atteindre cette limite avec ma configuration de serveur unique. Si je peux lire / transmettre des données assez rapidement localement, et que linode se soucie même d'avoir un plafond de 50mbit/100mbit, il doit y avoir un goulot d'étranglement interne qui ne me permet pas d'atteindre ces plafonds que je ne sais pas comment détecter. Correct ?

Je réalise que la question est énorme et vague maintenant, mais je ne sais pas comment la condenser. Tout commentaire sur les conclusions que j'ai tirées sera apprécié.

1 votes

Pour vérifier s'il s'agit d'un problème de bande passante, vous pouvez agrandir considérablement votre page html afin d'atteindre la même bande passante avec beaucoup moins de requêtes. Si votre page fait par exemple 5 Mo, vous devriez être en mesure d'atteindre le même débit avec seulement quelques requêtes par seconde, ce qui devrait entraîner beaucoup moins de surcharge et vous rapprocher de la limite réelle de votre bande passante.

0 votes

Je viens de tester une page qui fait exactement 10x la taille. Mon RPS est en corrélation directe avec la taille de la page. 10x plus grande == 18RPS. 1x == 180. En fait, je pense que c'est suspicieusement proche de 50mbits. Je pense qu'il y a une chance que le statut de linode surveillant le maximum de 24mbits soit erroné, et que je sois en train de frapper leur plafond. Je demande à nouveau une augmentation et je ferai un rapport.

5voto

rvalvik Points 271

Le problème était que je supposais que les pics du graphique de linode.com étaient de vrais pics. Il s'avère que le graphique utilise des points de données moyens de 5 minutes, ainsi mon pic semblait être de 24mbits alors qu'en fait j'atteignais le plafond de 50mbits.

Maintenant qu'ils l'ont augmenté à 100mbits, mes benchmarks ont immédiatement augmenté à la nouvelle limite de trafic sortant.

Si seulement j'avais remarqué cela plus tôt ! Une grande partie de mon raisonnement reposait sur l'idée que je n'atteignais pas une limite de trafic sortant grâce à ce graphique.

Maintenant, je culmine à 370 demandes par seconde, ce qui est juste en dessous de 100 mbps, moment où je commence à avoir un "arriéré" de demandes et où les temps de réponse commencent à augmenter.

enter image description here

Je peux maintenant augmenter la concurrence maximale en réduisant la page ; avec gzip activé, j'obtiens 600 RPS.

enter image description here

Je rencontre encore des problèmes lorsque j'atteins soudainement un pic et que les demandes en attente (limitées par la bande passante) commencent à s'accumuler, mais il s'agit là d'une autre question.

enter image description here

Cela a été une grande leçon d'optimisation / de lecture de ces données / de réduction des problèmes possibles. Merci beaucoup pour votre contribution !

5voto

HopelessN00b Points 53075

C'est un peu tard maintenant que vous l'avez découvert... mais vous devriez peut-être envisager de lire le blog de ServerFault de temps en temps.

Je pense en particulier à ce post où ils expliquent pourquoi avoir un une seconde L'intervalle de sondage ne suffit pas de temps en temps, lié à un problème très similaire à celui que vous avez eu

Nous avons découvert que nous rejetions des paquets assez fréquemment sur des interfaces de 1 Gbit/s à des taux de seulement 10-30 MBit/s, ce qui nuit à nos performances. performances. C'est parce que ce taux de 10-30 MBit/s est en réalité le nombre de bits transférés en 5 minutes converti en une seconde. seconde. Lorsque nous avons creusé de plus près avec Wireshark et que nous avons utilisé des graphiques d'IO à la milliseconde, nous avons vu que nous dépassions fréquemment le taux de 1 Mbits par milliseconde par milliseconde des interfaces dites 1 Gbit/s.

Ça m'a fait réfléchir. Et je sais que je vais l'appliquer aux autres AS de mon magasin dès que j'en aurai l'occasion, et que j'aurai l'air terriblement brillant et perspicace lorsque nous serons confrontés à ce problème.

Qui sait, je pourrais même laisser entrer certains d'entre eux dans le secret. :)

0 votes

Bien vu ! C'est intéressant qu'ils aient évoqué le graphique de 5 minutes au taux d'une seconde aussi... Je suis relativement à l'aise avec les données parce que mon test de 1k concurrent est déjà un pic du pire cas (je pense..). ~600 utilisateurs chargeant une page chaque seconde == ~2m de hits par heure, ce qui est loin d'être le cas. Je ne voulais pas m'enliser dans les premières minutes d'un pic.

0voto

rnxrx Points 8043

Elle peut être limitée par le réseau, mais ce n'est pas nécessairement une simple question de bande passante. La latence de votre unité de test distante aura un effet sur le nombre de connexions en attente à un moment donné (attendre 50 ms pour des accusés de réception est très différent de 0,5 ms localement) ainsi que sur la négociation et la stabilisation de la taille des fenêtres à mesure que la connexion progresse. Vous êtes aussi probablement exposé à une certaine perte de paquets - soit en fonction de la congestion, soit comme mécanisme de limitation de la bande passante de la part de votre opérateur (ou de ceux en amont).

Je suggère d'éliminer le plus possible de l'équation pour établir une base de référence raisonnable. Mesurez la bande passante maximale, la latence et la perte de paquets entre votre serveur et quelques points de l'Internet général. Aussi improbable que cela puisse paraître, essayez de chercher "Voip traffic test" ou similaire. Plusieurs fournisseurs de services VOIP ont des applications qui peuvent mesurer ces types de modèles (bidirectionnels) avec un certain degré de précision. Une fois que vous aurez des données empiriques valides sur la vitesse utile réelle de votre lien, vos résultats pourraient bien être validés.

En plus des tests de bande passante, il peut également être utile d'examiner une capture de paquets du trafic web inférieur pour rechercher un nombre excessif de retransmissions ainsi que pour mesurer le temps apparent que prend votre serveur pour répondre aux demandes ( si cette valeur augmente considérablement en fonction du nombre de connexions, c'est un indice important).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X