Série sur l'amélioration de l'observabilité des API (Partie 3) : Tracing
March 19, 2024
Introduction
Qu'est-ce que le traçage distribué ?
Dans le paysage actuel de l'architecture des microservices et des systèmes distribués, une seule requête traverse souvent plusieurs services, chacun contenant diverses étapes de traitement internes. Pour garantir le fonctionnement efficace et stable des systèmes, il est impératif de comprendre le chemin complet et le traitement de ces requêtes. Cette nécessité a donné naissance à la technologie de traçage distribué. Elle nous permet de comprendre clairement l'ensemble du parcours d'une requête, de son initiation à son achèvement, y compris chaque service qu'elle traverse, le temps de traitement de chaque service et la survenue de toute anomalie.
Processus d'utilisation du traçage dans les API
Initialement, il est essentiel de déployer un agent de traçage ou un SDK pour le traçage au point d'entrée de chaque service afin de capturer toutes les requêtes. Grâce aux données de traçage, nous pouvons observer distinctement le temps de traitement des requêtes dans chaque service, identifiant ainsi les goulots d'étranglement potentiels en termes de performance. Le traçage distribué enregistre non seulement le traitement normal des requêtes, mais capture également les exceptions et erreurs survenant pendant le processus. En visualisant les données de traçage distribué, nous pouvons comprendre intuitivement le flux des requêtes entre les différents services et composants.
Améliorer l'observabilité - Traçage distribué
Concernant le traçage distribué, voici quelques méthodes pour améliorer l'observabilité des API, accompagnées d'exemples spécifiques :
1. Sélection des outils et technologies de traçage distribué appropriés
Lors du choix des outils de traçage distribué, il faut tenir compte de votre pile technologique, des exigences métier et de la complexité de la surveillance. Zipkin, SkyWalking et OpenTelemetry sont des solutions populaires de traçage distribué, chacune ayant ses caractéristiques uniques.
2. Intégration du traçage distribué dans le développement des API
Pour Zipkin et SkyWalking, l'intégration dans le développement des API peut être réalisée en ajoutant les dépendances et configurations respectives. Cependant, pour OpenTelemetry, il est nécessaire de créer et gérer manuellement le contexte de traçage en utilisant son API.
3. Configuration et optimisation des systèmes de traçage distribué
Zipkin, SkyWalking et OpenTelemetry peuvent tous être personnalisés via des fichiers de configuration. Des paramètres tels que le taux d'échantillonnage, la configuration du stockage backend et l'optimisation de la transmission des données peuvent être définis. De plus, il est crucial de définir des règles d'alerte pour répondre rapidement aux événements exceptionnels.
4. Analyse et visualisation des données
Zipkin, SkyWalking et OpenTelemetry fournissent des interfaces de visualisation pour afficher les données de traçage distribué et les métriques de performance. Par exemple, dans l'interface utilisateur de Zipkin, il est possible de rechercher et de visualiser des données de traçage spécifiques pour comprendre le flux des requêtes entre différents services. Le tableau de bord de SkyWalking offre une vue d'ensemble globale des performances et un graphique des relations d'appel de service. Les données d'OpenTelemetry peuvent être importées dans divers outils de visualisation comme Grafana pour créer des tableaux de bord et des graphiques personnalisés.
5. API7 Enterprise intègre des plugins de traçage distribué
API7 Enterprise prend en charge plusieurs plugins de traçage, y compris Zipkin, OpenTracing et SkyWalking. Ces plugins de traçage doivent être liés à des règles de routage ou à des règles globales. S'il n'y a pas d'exigences en matière de taux d'échantillonnage, il est conseillé de les lier à des règles globales pour éviter les omissions.
Analyse de cas pratique : Amélioration de l'observabilité des API d'e-commerce
Lors du processus de navigation et d'achat de produits sur une plateforme e-commerce, plusieurs appels d'API sont impliqués. Par exemple, les utilisateurs appellent initialement l'API du service de produits pour récupérer une liste de produits, puis sélectionnent un produit spécifique et appellent l'API du service de commande pour créer une commande, et enfin appellent l'API du service de paiement pour finaliser le paiement.
Dans ce scénario, il a été remarqué que l'API du service de commande subissait souvent des retards et des délais d'attente pendant les périodes de pointe, entraînant des retards et des échecs notables pendant le processus de paiement. Pour résoudre ce problème, l'équipe a décidé d'introduire la technologie de traçage distribué pour diagnostiquer les goulots d'étranglement de performance et optimiser le système.
-
Sélection des outils de traçage distribué : L'équipe a choisi SkyWalking comme outil de traçage distribué en raison de son support pour plusieurs langages, de sa facilité d'intégration et de ses capacités de visualisation riches.
-
Intégration de SkyWalking : Le service de commande est développé en Java, et l'équipe a intégré l'agent Java de SkyWalking dans le code du service de commande. Cela permet à SkyWalking de collecter automatiquement les données de traçage lorsque l'API du service de commande est appelée.
-
Configuration de SkyWalking : L'équipe a configuré le stockage backend de SkyWalking sur Elasticsearch et a défini des taux d'échantillonnage appropriés pour équilibrer le niveau de détail des données de traçage et les coûts de stockage.
-
Collecte et analyse des données de traçage : Pendant les périodes de pointe, l'équipe a observé la chaîne d'appel et les métriques de performance de l'API du service de commande via l'interface utilisateur de SkyWalking. Ils ont constaté qu'un appel particulier à l'API du service d'inventaire des produits prenait significativement plus de temps pendant le processus de création de commande, devenant un goulot d'étranglement de performance.
-
Investigation approfondie : L'équipe a examiné plus en détail les données de traçage de l'API du service d'inventaire des produits, y compris les paramètres d'appel, les résultats retournés et les informations d'exception. Ils ont découvert que l'API exécutait une opération complexe de requête de base de données lors du traitement de produits spécifiques, entraînant une augmentation du temps de traitement.
-
Mesures d'optimisation : Pour résoudre ce problème, l'équipe a mis en œuvre deux mesures d'optimisation. Premièrement, ils ont optimisé les instructions de requête de base de données pour améliorer l'efficacité des requêtes. Deuxièmement, ils ont mis en place un cache pour l'API du service d'inventaire des produits, récupérant les résultats directement du cache pour les produits fréquemment consultés et peu susceptibles de changer, évitant ainsi les requêtes de base de données inutiles.
Conclusion
La technologie de traçage distribué joue un rôle crucial dans l'architecture des microservices et des systèmes distribués. En enregistrant et en visualisant le flux des requêtes entre plusieurs services, nous pouvons rapidement identifier et résoudre les goulots d'étranglement de performance, améliorant ainsi la stabilité et l'observabilité du système. En sélectionnant les outils de traçage distribué appropriés et en les intégrant dans le développement des API, nous pouvons obtenir des insights plus profonds sur le fonctionnement du système, améliorant ainsi l'expérience utilisateur et l'efficacité du système.