J'ai supposé à tort que mes tests AB internes signifient que mon serveur peut gérer 1 k d'accès simultané à 3 k hits par seconde.
Ma théorie à l'heure actuelle est que le réseau est le goulot d'étranglement. Le serveur ne peut pas envoyer suffisamment de données assez rapidement.
Les tests externes de blitz.io à concurrence de 1k montrent que mes hits / s plafonnent à 180, les pages prenant de plus en plus de temps à répondre car le serveur ne peut renvoyer que 180 par seconde.
J'ai servi un fichier vierge de nginx et l'ai mis au banc: il est à l'échelle 1: 1 avec concurrence.
Maintenant, pour exclure les goulots d'étranglement IO / memcached (nginx tire normalement de memcached), je sers une version statique de la page mise en cache à partir du système de fichiers.
Les résultats sont très similaires à mon test d'origine; Je suis plafonné à environ 180 RPS.
Le fait de diviser la page HTML en deux me donne le double du RPS, il est donc certainement limité par la taille de la page.
Si j'utilise ApacheBench en interne depuis le serveur local, j'obtiens des résultats cohérents d'environ 4k RPS sur la pleine page et la demi-page, à des taux de transfert élevés. Taux de transfert: 62586,14 [kilo-octets / sec] reçus
Si je AB à partir d'un serveur externe, j'obtiens environ 180RPS - même que les résultats blitz.io.
Comment savoir que ce n'est pas une limitation intentionnelle?
Si je compare à partir de plusieurs serveurs externes, tous les résultats deviennent médiocres, ce qui m'amène à croire que le problème est dans le trafic sortant de MES serveurs, pas un problème de vitesse de téléchargement avec mes serveurs d'analyse comparative / blitz.io.
Je reviens donc à ma conclusion que mon serveur ne peut pas envoyer de données assez rapidement.
Ai-je raison? Y a-t-il d'autres façons d'interpréter ces données? La solution / optimisation consiste-t-elle à configurer plusieurs serveurs + un équilibrage de charge pouvant chacun servir 180 accès par seconde?
Je suis assez nouveau dans l'optimisation du serveur, j'apprécierais donc toute confirmation d'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 sonne pas du tout.
En raison d'une suggestion sur la limitation, j'ai examiné cela et j'ai constaté que linode a un plafond de 50 Mbps (que je ne suis même pas près de toucher, apparemment). Je l'avais élevé à 100 Mbps.
Étant donné que linode limite mon trafic et que je ne le frappe même pas, cela signifie-t-il que mon serveur devrait en effet être capable de produire jusqu'à 100 Mbps mais est limité par un autre goulot d'étranglement interne? Je ne comprends tout simplement pas comment les réseaux à cette grande échelle fonctionnent; peuvent-ils littéralement envoyer des données aussi vite qu'ils peuvent lire sur le disque dur? Le tube réseau est-il si gros?
En conclusion
1: Sur la base de ce qui précède, je pense que je peux certainement augmenter mon 180RPS en ajoutant un équilibreur de charge nginx au-dessus d'une configuration de serveur multi nginx à exactement 180RPS par serveur derrière le LB.
2: Si linode a une limite de 50/100 Mbits que je ne frappe 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 dérange même d'avoir un plafond de 50 Mbits / 100 Mbits, 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 me rends compte que la question est immense et vague maintenant, mais je ne sais pas comment la condenser. Toute contribution est appréciée sur toute conclusion que j'ai faite.