Comment ranger un serveur surchargé?

Le matériel, dont nous publions la traduction aujourd'hui, est dédié à la recherche de goulots d'étranglement dans les performances du serveur, à la résolution des problèmes, à l'amélioration des performances du système et à la prévention de la dégradation des performances. Ici, pour résoudre les problèmes d'un serveur surchargé, il est proposé de suivre les 4 étapes suivantes:

  1. Évaluation d'une situation: détermination d'un goulot d'étranglement des performances du serveur.
  2. Stabilisation du serveur: prenez des mesures urgentes pour améliorer la situation.
  3. Amélioration du système: étendre et optimiser les capacités du système.
  4. Surveillance du serveur: utilisation d'outils automatisés pour éviter les problèmes.



1. Évaluation de la situation


Lorsque le trafic surcharge le serveur, le processeur, le réseau, la mémoire et les E / S disque peuvent devenir un goulot d'étranglement des performances. Déterminer ce qui cause exactement le problème vous permet de vous concentrer sur le plus important. Considérez certaines caractéristiques de l'analyse des sous-systèmes de serveurs les plus importants.

  • . , 80%, , . , 80-90%. 100%, . , , . , , , «» . , , , , .
  • . , , , , . , -, , . , , .
  • . , . , . . , (Out Of Memory, OOM). , , , .
  • /. , , , , . , , , (, ). — , .

Ce que nous allons discuter ci-dessous vise à résoudre les problèmes avec le processeur et le réseau. Le fait est que la plupart des projets souffrent, pendant les périodes de pointe de trafic, précisément de ces problèmes.

Vous pouvez commencer à résoudre les problèmes de serveur en utilisant la commande top . S'il existe une telle opportunité, vous pouvez ici recourir aux données historiques de l'hébergeur et aux données collectées par les systèmes de surveillance.

2. Stabilisation du serveur


La présence d'un serveur surchargé dans le système peut rapidement entraîner des défaillances en cascade dans d'autres parties du système. En conséquence, il est important, une fois qu'il est devenu connu que le serveur est surchargé, de le stabiliser, puis d'enquêter sur la situation en vue d'apporter de sérieuses améliorations au système.

▍ Limitez la vitesse de traitement des requêtes


La limitation de la vitesse de traitement des demandes vous permet de protéger l'infrastructure en limitant le nombre de demandes entrantes. Ceci est très important lorsque les performances du serveur baissent. À mesure que le temps de réponse du serveur augmente, les utilisateurs ont tendance à rafraîchir agressivement la page, ce qui augmente encore la charge du serveur.

Bien que refuser de traiter une demande soit une mesure simple et efficace, il est préférable de réduire la charge sur le serveur en limitant le nombre de demandes qui lui parviennent à l'aide d'un système externe. Il peut s'agir, par exemple, d'un équilibreur de charge, d'un serveur proxy inverse ou d'un CDN. Vous trouverez ci-dessous des liens vers des instructions pour travailler avec plusieurs systèmes de ce type:


Voici des informations sur la réduction de la charge du serveur en utilisant différentes approches pour limiter la vitesse de traitement des demandes.

▍Cache cache HTTP


Recherchez des moyens d'améliorer la mise en cache du contenu. Si la ressource peut être donnée à l'utilisateur à partir du cache HTTP (à partir du cache du navigateur ou du CDN), elle n'a pas besoin d'être demandée au serveur, ce qui réduit la charge sur le serveur.

Les en-têtes HTTP comme Cache-Control , Expires et ETag indiquent comment une ressource particulière doit être mise en cache. L'audit et la correction de ces en-têtes peuvent aider à améliorer la mise en cache.

Bien que vous puissiez recourir aux capacités des agents de service pour la mise en cache , ils utilisent un cache distinct . Il s'agit d'une aide au système de mise en cache du navigateur principal, et non d'un remplacement. Par conséquent, lors de la résolution des problèmes d'un serveur surchargé, les efforts doivent être concentrés sur l'optimisation de la mise en cache HTTP.

Diagnostique


Lancez Lighthouse et jetez un œil aux ressources statiques Serve avec une mesure de stratégie de cache efficace pour voir une liste de ressources avec des temps de mise en cache courts et moyens ( Time To Live , TTL). Passez en revue les ressources répertoriées et envisagez d'augmenter leur TTL. Voici les conditions de mise en cache estimées applicables à diverses ressources.

  • Les ressources statiques doivent être mises en cache pendant une longue période (1 an).
  • Les ressources dynamiques doivent être mises en cache pendant une courte période (3 heures).

Paramètre de cache


Il est nécessaire d'écrire le temps de mise en cache du cache nécessaire, exprimé en secondes, dans la directive d'en -max-age tête Cache-Control . Voici les instructions pour définir cet en-tête sur différents systèmes:


Notez que la directive max-agen'est qu'une des nombreuses directives qui affectent la mise en cache. Il existe d'autres directives et autres en-têtes qui affectent les fonctionnalités du cache. Afin de mieux comprendre ce problème, il est recommandé de lire ce guide de mise en cache HTTP.

▍ Réduction progressive des capacités du système


Une réduction progressive des capacités du système est une stratégie visant à limiter temporairement les fonctionnalités visant à supprimer une charge excessive du serveur. Ce concept peut être appliqué de différentes manières. Par exemple, donner aux clients une page de texte statique au lieu d'une application complète, désactiver la recherche ou renvoyer des résultats de recherche moins que d'habitude. Cela inclut la désactivation des capacités gourmandes en ressources des projets qui n'affectent pas leurs fonctionnalités de base. L'attention principale ici doit être accordée à la désactivation de la fonctionnalité, qui peut être abandonnée sans trop affecter les principales fonctionnalités de l'application.

3. Amélioration du système


▍Utilisation de CDN


La tâche de servir des ressources statiques peut être transférée du serveur vers le Content Delivery Network (CDN). Cela réduira la charge sur le serveur.

La fonction principale de CDN est de livrer rapidement des documents aux utilisateurs grâce à l'utilisation d'un vaste réseau de serveurs situés à proximité des utilisateurs. De plus, certains CDN offrent des fonctionnalités supplémentaires liées aux performances. Parmi eux - compression des données, équilibrage de charge, optimisation des fichiers multimédias.

Configuration CDN


Les avantages de CDN sont révélés si la société propriétaire du réseau dispose d'un large groupe de serveurs répartis dans le monde. Par conséquent, la prise en charge de votre propre service CDN est rarement logique. Une configuration CDN typique est une procédure assez rapide qui prend environ une demi-heure. Elle consiste à mettre à jour les enregistrements DNS pour qu'ils pointent vers le CDN.

Optimisation CDN: étude de cas


Afin d'identifier les ressources qui ne sont pas servies à l'aide du CDN (mais doivent être émises aux utilisateurs avec un CDN), vous pouvez utiliser WebPageTest . Sur la page de résultats, cliquez sur le rectangle signé en tant que Effective use of CDNet affichez la liste des ressources qui doivent être desservies par CDN.


Résultats de WebPageTest

Résolution de problème


Si les ressources ne sont pas mises en cache à l'aide du CDN, vérifiez si les conditions suivantes sont remplies:


▍ Mise à l'échelle des ressources informatiques


La décision de faire évoluer les ressources informatiques doit être prise avec prudence. Bien qu'il soit souvent possible de résoudre certains problèmes en recourant à la mise à l'échelle, ce qui n'est pas le cas, il est possible de compliquer inutilement le système et d'augmenter de manière déraisonnable le coût de son support.

Diagnostique


Un indicateur élevé du temps jusqu'au premier octet ( Time To First Byte , TTFB) peut être un signe que le serveur approche de ses limites. Vous pouvez trouver des informations TTFB dans la section Réduire les temps de réponse du serveur (TTFB) du rapport Lighthouse.

Pour une étude plus approfondie de la situation, vous devez utiliser un outil de surveillance et analyser l'utilisation du processeur. Si la valeur de charge actuelle ou prévue du processeur dépasse 80%, cela signifie que vous devez penser à augmenter la capacité du serveur.

Résolution de problème


L'ajout d'un équilibreur de charge au système vous permet de répartir le trafic entre plusieurs serveurs. Un équilibreur de charge est situé devant le pool de serveurs et distribue le trafic vers les serveurs appropriés. Les fournisseurs de cloud offrent aux utilisateurs des équilibreurs de charge ( GCP , AWS , Azure ), mais vous pouvez également utiliser votre propre équilibreur à l'aide de HAProxy ou NGINX . Une fois l'équilibreur de charge prêt à fonctionner, des serveurs supplémentaires peuvent être ajoutés au système.

En plus de l'équilibrage de charge, la plupart des fournisseurs de cloud proposent une mise à l'échelle automatique de la puissance de calcul ( GCP , AWS ,Azure ). La mise à l'échelle automatique est associée à l'équilibrage de charge. A savoir, avec une mise à l'échelle automatique des ressources à des temps de chargement élevés, des ressources supplémentaires sont allouées et pendant les périodes de faible charge, les ressources inutiles sont désactivées. Mais, même en tenant compte de cela, il convient de noter que la mise à l'échelle automatique n'est pas non plus une solution universelle. Le démarrage automatique des serveurs prend du temps. Les configurations à mise à l'échelle automatique nécessitent une configuration sérieuse. Par conséquent, avant d'appliquer un système complexe de mise à l'échelle automatique, il convient d'essayer une configuration relativement simple avec un équilibreur de charge.

▍Utilisation de la compression de données


Les ressources textuelles doivent être compressées à l'aide de l'algorithme gzip ou brotli. Dans certains cas, la compression peut aider à réduire la taille de ces ressources d'environ 70%.

Diagnostique


Pour trouver des ressources qui nécessitent une compression, vous pouvez utiliser l'indicateur Activer la compression de texte du rapport Lighthouse.

Résolution de problème


Pour activer la compression, vous devez modifier les paramètres du serveur. Voici les détails à ce sujet:


▍Optimisation des images et autres supports médiatiques


Sur l' image tombe la majeure partie des matériaux de la plupart des sites Web. L'optimisation de l'image peut entraîner une réduction significative de la taille des matériaux du site. De plus, une telle optimisation est effectuée assez rapidement.

Diagnostique


Il existe divers indicateurs dans le rapport Lighthouse qui indiquent des options d'optimisation d'image potentielles. Pour rechercher des images volumineuses qui nécessitent une optimisation, vous pouvez utiliser les outils de développement de navigateur habituels. De telles images pourraient bien devenir de bons candidats à l'optimisation.

Voici une liste des mesures de rapport LightHouse auxquelles vous devez faire attention lorsque vous explorez la possibilité d'optimisation d'image:


Si vous utilisez les outils de développement de Chrome pour vous aider à optimiser vos images, vous pouvez suivre ces étapes:

  • Enregistrez l' activité réseau de la page.
  • Cliquez sur Imgpour filtrer les ressources non liées à l'image.
  • Cliquez sur une colonne Sizepour trier les fichiers images par taille.

Résolution de problème


Tout d'abord, parlons de ce qui devrait être fait si vous avez peu de temps.

Dans une telle situation, vous devez faire attention aux images de grande taille et aux images téléchargées plus souvent que les autres. Après les avoir trouvés, ils doivent être soumis à une optimisation manuelle, à l'aide d'un outil comme Squoosh . Les grandes photos sont généralement de bons candidats pour l'optimisation. Par exemple, tiré d'une ressource comme Hero Images .

Voici à quoi vous devez faire attention lors de l'optimisation des images:

  • Taille: les images ne doivent pas être plus grandes que nécessaire.
  • : , 80-85 , 30-40% .
  • : JPEG, PNG. MP4, GIF.

Maintenant, quelques mots sur la façon d'aborder l'optimisation d'image pour ceux qui ont un peu plus de temps.

Si les images représentent une part importante du matériel du site, pensez à utiliser un service CDN spécialisé conçu pour travailler avec des images pour leur maintenance. Ces services vous permettent de supprimer la charge de travail avec les images du serveur principal. La configuration d'un projet pour utiliser un tel service CDN est simple, mais elle nécessite la mise à jour des liens existants vers les images afin qu'ils pointent vers des ressources CDN. Voici le matériel sur l'utilisation de services CDN spécialisés conçus pour les images.

▍Minification de JavaScript et CSS


La minification du code vous permet de réduire sa taille en supprimant les caractères inutiles.

Diagnostique


Jetez un coup d'œil aux métriques Minify CSS et Minify JavaScript dans le rapport Lighthouse pour identifier les ressources qui nécessitent une minification.

Résolution de problème


Si vous n'avez pas beaucoup de temps, concentrez-vous sur la réduction du code JavaScript. Sur la plupart des sites, la quantité de code JavaScript dépasse la quantité de code CSS, donc cette décision donnera de meilleurs résultats. Voici les informations sur la réduction de JavaScript, et voici les informations sur la réduction de CSS.

4. Surveillance du serveur


Les outils de surveillance du serveur prennent en charge la collecte et la visualisation des données à l'aide des panneaux de contrôle. Ils peuvent informer les utilisateurs de divers événements liés aux performances du serveur. L'utilisation de ces outils peut aider à prévenir et à atténuer les problèmes de performances du serveur.

Lors de la mise en place d'un système de surveillance, vous devez viser la plus grande simplicité possible. Une collecte excessive de données et des notifications trop fréquentes peuvent avoir des effets négatifs. Plus l'éventail des données collectées est large et plus elles sont collectées, plus il sera coûteux de les collecter et de les stocker. Et si celui qui est responsable de l'état du serveur sera bombardé de messages sur des événements mineurs, alors, par conséquent, il ignorera ces messages.

Les notifications doivent contenir des mesures qui décrivent de manière cohérente et précise les problèmes. Par exemple, le temps de réponse du serveur (latence) est une métrique qui est particulièrement bonne pour cela: il vous permet d'identifier un grand nombre de situations problématiques et est directement lié à la façon dont le serveur est perçu par les utilisateurs. Les notifications basées sur des mesures de bas niveau, telles que les niveaux d'utilisation du processeur, peuvent jouer le rôle d'un module complémentaire utile, mais elles ne peuvent indiquer qu'une petite partie des problèmes possibles. En outre, les notifications ne devraient pas être basées sur des indicateurs moyens, mais sur des indicateurs correspondant à 95 à 99 centiles. Sinon, l'analyse des moyennes peut facilement entraîner des problèmes de saut qui n'affectent pas tous les utilisateurs.

Configuration de la surveillance


Tous les principaux fournisseurs de cloud fournissent aux clients leurs propres outils de surveillance ( GCP , AWS , Azure ). De plus, l'outil Netdata peut être noté ici - une excellente alternative open source gratuite aux outils des fournisseurs. Indépendamment de ce que vous utilisez exactement, vous devrez installer une application d'agent sur chaque serveur que vous souhaitez surveiller. Après avoir terminé la configuration du système, assurez-vous de configurer les notifications. Voici les instructions pour configurer différents outils de surveillance:


Sommaire


Aujourd'hui, nous avons expliqué comment identifier et résoudre les problèmes de performances du serveur. Je voudrais croire que vos serveurs fonctionneront de manière stable et les conseils de ce matériel ne vous seront pas utiles. Et en cas de problème - nous espérons que vous trouverez ici quelque chose qui vous aidera à résoudre le problème le plus rapidement possible.

Chers lecteurs! Que faites-vous dans une situation où le serveur sur lequel votre projet s'exécute commence à ralentir?


All Articles