Micro-services : comment résoudre les problèmes des performances
Cet article vous permet de mieux comprendre les outils et les techniques de dépannage gérer l’essentiel des problèmes de performance des micro-services.
Lorsqu’on développe des applications, les micro-services peuvent améliorer considérablement la productivité des développeurs, l'agilité du projet et la réutilisation du code. Cependant, l'architecture devient plus complexe ; isoler et débugguer les problèmes de performance devient aussi beaucoup plus difficile.
L'analyse et la gestion des performances des micro-services est en effet un problème à deux niveaux qui comprend à la fois la télémétrie granulaire de chaque micro-service, et la mesure complète, de bout en bout, d'une application à l'autre. La télémétrie des micro-services est utilisée pour identifier les goulots d'étranglement internes, les inefficacités et les bugs tandis que la surveillance à l'échelle de l'application évalue les performances du point de vue de l'utilisateur et identifie les problèmes au sein de l'écosystème des micro-services et de ses connexions. Mais quels sont les techniques et les outils spécifiques pour résoudre les problèmes de performance des micro-services ? C’est ce que nous allons voir dans cet article.
Miser sur l'analyse des données
Les données sont la matière première de l'analyse des performances applicatives. Lorsqu'il s'agit d'utiliser des micro-services, plus il y a de données, mieux c'est. L'application, dans sa totalité, et les micro-services individuels qui s’y rejoingnent devraient être conçus dès le départ avec la télémétrie à l'esprit. Les architectes d'application devraient ainsi avoir une stratégie autour des données, comme leur collecte et leur analyse, avec des exigences spécifiques que chaque développeur de micro-services devrait suivre. Cette stratégie devrait proposer à la fois des mesures macroscopiques, popur analyser de bout en bout l'application dans son ensemble, et de la télémétrie interne à partir de micro-services individuels. C'est ce que l'on appelle le monitoring in situ. Les développeurs de micro-services ajoutent à chaque service des fonctions qui enregistrent les données et les événements pertinents. Ceux-ci peuvent être regroupés et analysés pour détecter les comportements qui nuisent à la performance.
Un programme de contrôle des performances et de dépannage des micro-services doit prendre en compte trois grandes catégories de données :
Les indicateurs qui enregistrent les services, les fonctions ou les opérations des micro-services qui ont soit échoué soit dépassé les seuils pré-définis et dans quelle proportion.
- Les logs qui détaillent l'activité de l'application. Celle-ci peut être analysée après un incident pour retracer les événements qui ont mené au problème. Par exemple, les logs affichent les micro-services actifs lors d'un problème, les appels API utilisés et les paramètres passés.
- Les événements externes affectant une application précédant ou survenant lors d'un problème. L'intégration avec des systèmes externes tels que les référentiels de code, les logiciels d'intégration continue/déploiement continu (CI / CD) ou les orchestrateurs de containers permet aux développeurs et à l’IT de déterminer les facteurs exogènes qui auraient pu causer un problème. Par exemple, une vérification de code qui a généré une nouvelle version d'un micro-service, le déplacement d’un ou plusieurs micro-services vers une machine physique différente, une sous-utilisation des ressources sur un cluster de micro-services ou un serveur.
Étant donné le nombre de micro-services qu'une application Cloud-native est susceptible d'utiliser et la grande variété de sources et de types de données qui en résulte, il est particulièrement utile que ces données soient regroupées dans un référentiel unique. Un tel pool de données unifié peut accroitre l'efficacité des logiciels d'analyse de logs tels que Loggly, Splunk, Sumo Logic ou n'importe quel outil utilisant la stack ELK (Elasticsearch, Logstash, Kibana). Par exemple, Elasticsearch peut trouver des termes similaire (ou avoisinant) à nos termes de recherche en utilisant l'opérateur "flou", des mots ou des chaînes de caractères (recherche de proximité). L'utilisation créative d'opérateurs peut aider à identifier et à corréler les événements qui ne sont pas nécessairement classés par ordre chronologique dans les fichiers journaux.
D'autres outils et méthodes
Il existe plusieurs autres techniques et outils d'automatisation pour isoler et résoudre les problèmes de performance des micro-services :
- Les logiciels de gestion de la performance applicative (APM) conçus pour analyser les performances de bout en bout des systèmes distribués. Ils mesurent les temps de réponse et le débit du point de vue externe du client. Certains logiciels d'APM peuvent découvrir automatiquement la topologie des micro-services pour fournir une vue graphique des interactions. Cette visualisation et cette découverte de la topologie sont très utiles pour comprendre le flux d'activité et les événements dans des applications complexes. D'autres fonctionnalités avancées d'APM incluent le suivi des transactions distribuées avec la possibilité de monitorer l'état et les événements de chaque micro-service.
- Les logiciels d'analyse et de gestion de réseau. Ils assurent la traçabilité des paquets à plusieurs niveaux de la pile réseau. Pour l'analyse rudimentaire, il existe un outil en ligne de commande comme tcpdump, intégré dans la plupart des OS. Cependant, Wireshark est un outil Open Source beaucoup plus puissant, avec une interface graphique. Il supporte des plug-ins personnalisés pour analyser de nouveaux protocoles.
- La surveillance synthétique des transactions est une technique adaptée de la surveillance des transactions Web. Les développeurs créent des scripts de test pour simuler les interactions typiques des utilisateurs et stressent ainsi les différentes parties de la chaîne fonctionnelle du micro-service. Les scripts peuvent être exécutés régulièrement. Ils peuvent déclencher des alertes lorsque les niveaux de performance sont dépassés, détectant ainsi les problèmes avant qu'ils ne surviennent. Les transactions synthétiques peuvent suivre le flux qui transite dans une application.
- Développer des API de journalisation et de mesure pour chaque micro-service. Cela doit faciliter le débogage en fournissant une interface cohérente pour chaque service.
- Dresser une checklist des interventions à réaliser en cas d'incident en prenant exemple sur les pilotes de ligne. Ceux-ci laissent rien au hasard et utilisent des procédures ad hoc. Il s’agit là d’indiquer la séquence que les développeurs et l’IT doivent jouer pour chaque exception de performance et alerte. Netflix propose un bon exemple de check-list de dépannage.
Le dépannage des logiciels basés sur les micro-services nécessite de nouvelles approches et de nouveaux outils. Cependant, en enregistrant, collectant et analysant les données liées aux performances et aux événements et en adoptant une approche systématique pour résoudre les problèmes, l'ajout de micro-services à votre architecture d'entreprise ne doit pas nécessairement conduire à un dédale interminable de solutions de dépannage.