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.
J'ai servi un fichier vierge à partir de nginx et je l'ai testé : il est à l'échelle 1:1 avec la concurrence.
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.
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.
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 ?
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.