Question Comment effectuez-vous les tests de charge et la planification de la capacité des sites Web?


C'est un question canonique sur la planification de la capacité des sites Web.

En relation:

Quels sont les outils et méthodes recommandés pour la planification de la capacité des sites Web et des applications Web?

N'hésitez pas à décrire différents outils et techniques pour différents serveurs Web, infrastructures, etc., ainsi que les meilleures pratiques applicables aux serveurs Web en général.


111
2018-01-16 22:49


origine




Réponses:


La réponse courte est: personne ne peut répondre à cette question sauf vous.

La réponse longue est que l’analyse de votre charge de travail spécifique est quelque chose que vous devez entreprendre vous-même, car c’est un peu comme si vous demandiez "Combien de temps dure une ficelle?".

Un simple site Web statique d'une page peut être hébergé sur un Pentium Pro 150 et toujours générer des milliers d'impressions chaque jour.

L’approche de base que vous devez adopter pour répondre à cette question consiste à: essayer et voir ce qui se passe. Il existe de nombreux outils que vous pouvez utiliser pour mettre artificiellement votre système sous pression afin de voir où il se déforme.

Un bref aperçu de ceci est:

  • Mettez votre scénario en place
  • Ajouter la surveillance
  • Ajouter du trafic
  • Évaluer les résultats
  • Remédier en fonction des résultats
  • Rincer, répéter jusqu'à ce que raisonnablement heureux

Mettez votre scénario en place

Fondamentalement, afin de tester une charge, vous avez besoin de quelque chose à tester. Configurez un environnement à tester. Cela devrait être une approximation assez proche de votre matériel de production si possible, sinon vous ne pourrez plus extrapoler vos données.

Configurez vos serveurs, vos comptes, vos sites Web, votre bande passante, etc. Même si vous le faites sur des ordinateurs virtuels, tout va bien tant que vous êtes prêt à faire évoluer vos résultats.

Donc, je vais mettre en place une machine virtuelle de puissance moyenne (deux cœurs, 512 Mo de RAM, 4 Go de disque dur) et installer mon équilibreur de charge préféré, haproxy à l'intérieur Red Hat Linux sur la VM.

Je vais également avoir deux serveurs Web derrière l'équilibreur de charge que je vais utiliser pour tester avec contrainte l'équilibreur de charge. Ces deux serveurs Web sont configurés de manière identique à mes systèmes en direct.

Ajouter la surveillance

Vous aurez besoin de certaines mesures à surveiller. Je vais donc mesurer le nombre de demandes qui parviennent à mes serveurs Web et le nombre de demandes que je peux faire passer par seconde avant que les utilisateurs ne commencent à obtenir un temps de réponse de plus de deux secondes.

Je vais aussi surveiller l’utilisation de la RAM, du processeur et du disque sur le haproxy exemple pour vous assurer que l’équilibreur de charge peut gérer les connexions.

Comment faire cela dépend beaucoup de vos plates-formes et sort du cadre de cette réponse. Vous devrez peut-être consulter les fichiers journaux du serveur Web, démarrer des compteurs de performance ou vous appuyer sur la capacité de création de rapports de votre outil de test de stress.

Quelques choses que vous voulez toujours surveiller:

  • l'utilisation du processeur
  • Utilisation de la RAM
  • Utilisation du disque
  • Latence du disque
  • Utilisation du réseau

Vous pouvez également choisir de regarder les blocages SQL, les temps de recherche, etc. en fonction de ce que vous testez spécifiquement.

Ajouter du trafic

C'est là que les choses s'amusent. Vous devez maintenant simuler une charge de test. Il y a beaucoup d'outils cela peut faire cela, avec des options configurables:

Choisissez un nombre, n'importe quel nombre. Disons que vous allez voir comment le système répond avec 10 000 hits par minute. Le numéro que vous choisissez n'a pas d'importance, car vous allez répéter cette étape plusieurs fois, en ajustant ce nombre à la hausse ou à la baisse pour voir comment le système répond.

Idéalement, vous devez répartir ces 10 000 demandes sur plusieurs clients / nœuds de test de charge, de sorte qu'un client ne devienne pas un goulot d'étranglement de demandes. Par exemple, JMeter's Test à distance fournit une interface centrale à partir de laquelle lancer plusieurs clients à partir d’une machine Jmeter de contrôle.

Appuyez sur la magie Aller bouton et regardez vos serveurs Web fondre et se bloquer.

Évaluer les résultats

Alors, maintenant, vous devez revenir aux mesures que vous avez collectées à l'étape 2. Vous voyez qu'avec 10 000 connexions simultanées, votre haproxy box a peine à transpirer, mais le temps de réponse avec deux serveurs Web est légèrement supérieur à cinq secondes. Ce n'est pas cool - rappelez-vous que votre temps de réponse est de deux secondes. Nous devons donc apporter des changements.

Corriger

Maintenant, vous devez accélérer votre site Web de plus de deux fois. Donc, vous savez que vous devez soit augmenter, soit augmenter.

Pour évoluer, utilisez des serveurs Web plus gros, plus de RAM, des disques plus rapides.

Pour évoluer, obtenez plus de serveurs.

Utilisez les métriques de l'étape 2 et les tests pour prendre cette décision. Par exemple, si vous avez constaté que la latence du disque était énorme pendant les tests, vous savez que vous devez augmenter la taille et obtenir des disques durs plus rapides.

Si vous avez constaté que le processeur était à 100% pendant le test, vous devrez peut-être augmenter la capacité pour ajouter des serveurs Web supplémentaires afin de réduire la pression exercée sur les serveurs existants.

Il n'y a pas de bonne ou de mauvaise réponse générique, il n'y a que ce qui est bon pour vous. Essayez d’intensifier, et si cela ne fonctionne pas, augmentez à la place. Ou pas, c'est à vous et à certains de sortir des sentiers battus.

Disons que nous allons passer à la vitesse supérieure. J'ai donc décidé de cloner mes deux serveurs Web (ce sont des ordinateurs virtuels) et j'ai maintenant quatre serveurs Web.

Rincer, répéter

Recommencez à partir de l'étape 3. Si vous constatez que les choses ne se passent pas comme prévu (par exemple, nous avons doublé le nombre de serveurs Web, mais que le temps de réponse est toujours supérieur à deux secondes), recherchez d'autres goulots d'étranglement. Par exemple, vous avez doublé les serveurs Web, mais vous disposez toujours d'un serveur de base de données de mauvaise qualité. Ou bien, vous avez cloné plus de machines virtuelles, mais comme elles se trouvent sur le même hôte physique, vous n’avez obtenu que des conflits plus importants pour les ressources des serveurs.

Vous pouvez ensuite utiliser cette procédure pour tester d'autres parties du système. Au lieu de toucher l’équilibreur de charge, essayez de frapper directement le serveur Web, ou le serveur SQL à l'aide d'un outil d'analyse comparative SQL.


119
2018-04-29 14:05



C'est excellent pour les tests de charge, mais en dit long sur la planification de la capacité. Qui peut écrire sur l'architecture évolutive de Google, qui a été conçue à un stade précoce, ou sur les alternatives utilisant des boîtiers moins coûteux et plus coûteux. - rleir


La planification de la capacité commence par la mesure, dans ce cas le temps de réponse par rapport à la charge. Une fois que vous savez à quel point les programmes ralentissent avec la charge, ce qui n'est PAS une fonction linéaire, vous pouvez sélectionner une cible de temps de réponse, puis découvrir les ressources nécessaires pour atteindre cette cible pour une charge donnée.

La mesure du rendement se fait toujours avec temps unités, comme

  • ils sont ce que les utilisateurs se soucient de
  • ils peuvent être augmentés et réduits

Des éléments tels que% CPU et IOPS sont spécifiques au système. Vous ne les utilisez donc que lorsque vous avez planifié le système et l'avoir mesuré en pré-production, pour agir comme "substitut" de ce qui vous tient à coeur, le temps.


9
2018-04-21 22:32





La planification de la capacité est une bête gênante. C'est autant la science que l'art (même s'il est vraiment sombre).

Votre meilleur cas est que vous prenez des décisions éclairées et la fortune / la chance vous favorise en permettant à la réalité de répondre à vos hypothèses. Si vos hypothèses en matière de capacité correspondent à la réalité, vous ressemblez à un yogi mystique. Malheureusement, si vos hypothèses dépassent la réalité, vous semblerez avoir été dépassé et dépassé. Plus malheureusement, si vos hypothèses sont en deçà de la réalité éventuelle (ou sont incorrectes par ailleurs), vous manquerez de la capacité dont vous avez besoin et vous devrez vous démener pour atténuer les défaillances de votre infrastructure gémissante, ce qui vous fera ressembler à un manque de compétence.

Pas de pression...

Malheureusement, l'art sombre de la planification de la capacité est plus que ce qui peut raisonnablement être distillé dans une réponse unique Server Fault; vraiment, c'est un sujet digne des livres.

Heureusement, il existe un tel livre: "L'art de la planification des capacités"


8





Pour développer le post de Mark Henderson, j'écris ceci spécifiquement à Apache. Pour réitérer ce qu’il a dit, "La réponse courte est: Personne ne peut répondre à cette question à part vous." Le texte de cette réponse est largement emprunté à ma réponse à une question similaire sur un La performance du site Drupal.

Configuration d'Apache avec Mod_Prefork

Apache est sans doute l’un des (si ce n’est le) serveur Web le plus populaire disponible. Il est open source et est toujours activement maintenu. Vous pouvez l'exécuter sur les systèmes d'exploitation Linux et Windows, mais est plus populaire dans le monde Linux / Unix.

Vous devriez jamais utilisez une configuration Apache prête à l'emploi. Vous devez toujours adapter Apache à votre site. Le principal Configuration Apache fichier sur CentOS est situé à /etc/httpd/conf/httpd.confet le fichier de configuration principal Apache sur les systèmes Ubuntu est généralement situé à l'emplacement suivant: /etc/apache2/apache2.conf. Des fichiers de configuration supplémentaires sont utilisés pour des tâches telles que Hôtes virtuels.

Comme beaucoup de logiciels, Apache est conçu pour être flexible et personnalisé en fonction des besoins d’un site Web spécifique. Il existe différents modules de multitraitement Apache peut être configuré pour se connecter à un port réseau et accepter et traiter les demandes.

La plupart du temps sur les installations Apache par défaut fournies avec les serveurs CentOS et Ubuntu, le MPM "mod_prefork"est utilisé. En supposant que vous utilisiez mod_prefork (si vous n’êtes pas sûr, c’est plus probable, mais vous seul pouvez le déterminer) Voici la procédure de base pour le configurer:

  • Déterminez la quantité maximale de mémoire que vous souhaitez que Apache puisse utiliser.
  • Testez lourdement votre site Web et déterminez la quantité de mémoire utilisée par chaque processus Apache (en utilisant top).
  • Prenez le processus Apache en tête qui utilise le plus de mémoire, ajoutez-en un petit morceau pour faire bonne mesure, puis divisez votre premier nombre (quantité maximale de mémoire que vous souhaitez qu'Apache utilise) par ce nouveau nombre.
  • Le nombre que vous obtenez devrait être votre MaxClients Et ServerLimit variables.

Ce n'est certainement pas la solution finale. Réglage de votre serveur Apache prend du temps et nécessite de l'expérience pour bien faire les choses.


5



l’utilisation de la mémoire basée uniquement sur le dessus est légèrement défectueuse, veuillez vérifier f.e. stackoverflow.com/questions/7880784/… En outre, vous pouvez utiliser le script python "ps_mem.py" à la place de top pour l'utilisation de la mémoire, ou même utiliser les valeurs directement associées au processus sous / proc. - Dennis Nolte
Toute la réponse vaut la peine de la note que vous avez ajoutée: "Vous ne devez jamais utiliser une configuration Apache prête à l'emploi". Nous ne pourrons jamais assez insister là-dessus. - ezra-s


Aussi, je suggérerais de parler aux architectes et ingénieurs qui ont conçu / construit les applications pour tenter d'identifier les goulots d'étranglement, les points de défaillance uniques et les limitations de licence.


0