Le traçage distribué est une méthode de suivi des demandes de service dans les systèmes distribués, offrant une visibilité sur la latence, les goulots d’étranglement au niveau de la performance, etc
Les exigences des entreprises modernes ont entraîné une explosion des technologies de l’information, avec des systèmes informatiques centralisés et hérités évoluant dans des environnements informatiques distribués puissants et complexes. Malheureusement, en plus des capacités améliorées des réseaux infonuagiques d’aujourd’hui et du traitement des données à distance, cette complexité accrue entraîne également un risque plus élevé.
En raison de leurs interdépendances élaborées, les systèmes complexes sont plus susceptibles d’éprouver des problèmes. Les défaillances dans une partie peuvent se répercuter sur tout le système, et l’identification et la résolution des problèmes sont souvent bien plus difficiles que dans les systèmes centralisés. En même temps, plus le système est complexe, plus il est difficile de prévoir de quelle façon les changements dans une partie affectent les autres, ce qui entraîne des conséquences inattendues, même pour les ajustements les plus anodins. Et malgré tout, tester minutieusement un système complexe est exponentiellement plus difficile, ce qui signifie que les problèmes sont de plus en plus susceptibles de passer inaperçus. Le traçage distribué fournit une solution.
On peut dire que le traçage distribué a commencé avec la publication de Dapper, publiée par Google en 2010, qui a jeté les bases de l’infrastructure de traçage des systèmes distribués à grande échelle. Fait intéressant, Ben Sigelman, fondateur de Lightstep (qui est devenu ultérieurement Observabilité infonuagique de ServiceNow), a joué un rôle déterminant dans la création de Dapper. À la suite de Dapper, Twitter a publié Zipkin en 2012, le premier projet de traçage distribué en libre-source. Puis, en 2015, Uber a lancé Jaeger, qui était lui-même inspiré de Dapper.
En 2016, Sigelman a écrit un article de blogue (« Toward Turnkey Distributed Tracing » (Vers un traçage distribué clé en main), qui serait appelé le manifeste de l’OpenTracing). Ce texte crucial a introduit l’OpenTracing comme norme unique, en abordant le manque de standardisation au sein de l’écosystème de traçage et en fixant la base pour que l’OpenTracing devienne un projet sous la Cloud Native Computing Foundation (CNCF) et, éventuellement, de fusionner avec OpenTelemetry en 2019.
La version 1.0 de l’OpenTelemetry a été lancée en 2021 et est depuis devenue la norme de facto pour le traçage, les mesures et la journalisation. De Dapper en 2010 aux capacités de l’OpenTelemetry d’aujourd’hui, en peu plus d’une décennie, le traçage distribué a évolué d’un système unique en arrière-plan à une solution de bout en bout largement utilisée, ce qui ouvre la voie aux pratiques modernes d’observabilité complètes.
Le traçage distribué permet aux organisations de créer des profils et de surveiller leur gamme complète d’applications, en particulier celles construites à l’aide d’une architecture de microservices. Cette approche fournit une visibilité sur la façon dont les services individuels au sein d’un système distribué interagissent les uns avec les autres, créant ainsi une image précise des demandes individuelles au fur et à mesure qu’elles circulent dans le système.
En suivant le parcours des demandes et en mesurant la durée de chaque partie, le traçage distribué aide à identifier les goulots d’étranglement au niveau de la performance, les problèmes de latence et les échecs potentiels. Ainsi, le traçage distribué est un outil essentiel pour les équipes DevOps et des services informatiques, leur permettant d’optimiser, de dépanner et de maintenir leurs systèmes plus efficacement.
Le traçage distribué est basé sur trois composants principaux :
- Étendue
Une étendue est une unité de travail unique effectuée par un service au sein du système, marquée par des intervalles de temps de début et de fin et peut-être même par des métadonnées comme des journaux ou des balises. Les étendues sont les éléments de base d’une trace, représentant différentes parties du flux de travail. Les étendues de la racine (également appelée « étendue mère ») peuvent avoir leur propre étendue (appelée « étendue enfant »), qui peut également avoir des étendues. - Trace
Une trace est constituée d’une étendue ou de plusieurs étendues qui, ensemble, représentent le chemin d’exécution complet de la demande de service au fur et à mesure qu’elle passe à travers le système distribué. Les traces sont souvent visualisées sous forme d’arbres, dans lesquels le nœud de la racine représente l’interaction de l’utilisateur, et les autres nœuds représentent les divers microservices impliqués dans le traitement de la demande et la préparation de la réponse. - Balises
Les balises sont des éléments de métadonnées liés à des étendues. Elles fournissent un contexte et une classification.
La structure trace/étendue offre une vue centrée sur les demandes, en comblant les écarts entre les microservices indépendants et en fournissant une perspective unifiée des performances du système. Grâce à ces informations, les organisations sont mieux préparées à comprendre et à améliorer l’expérience de l’utilisateur.
Le traçage, la journalisation et les mesures jouent un rôle clé dans l’observation, mais ce ne sont pas les mêmes concepts. Chacun sert des buts distincts et la compréhension des différences et de la nature complémentaire de ces concepts est essentielle pour une surveillance et un débogage complets du système :
- Traçage
Le traçage distribué permet d’avoir une vue détaillée des demandes lorsqu’elles traversent les composants d’un système distribué, captant le flux d’une demande par l’intermédiaire de services variés jouant un rôle dans la mise au point de la performance et le dépannage. Contrairement à la journalisation et aux mesures, le traçage distribué porte sur le parcours des demandes spécifiques, ce qui donne une image claire des interactions entre les microservices. - Journalisation
La journalisation est la pratique qui consiste à enregistrer des événements individuels spécifiques dans un système, tels que des actions des utilisateurs, des erreurs système ou d’autres activités. Les journaux horodatés fournissent des informations détaillées sur ce qui s’est passé dans le système à un moment donné, souvent essentielles au débogage et à la vérification. Tandis que le traçage distribué suit le flux des demandes, la journalisation offre un instantané plus statique des événements, sans nécessairement montrer les relations entre les différentes parties du système.
Les mesures sont des valeurs numériques qui représentent l’état d’un système à un moment donné ou sur un intervalle de temps, et peuvent inclure les temps de réponse, les taux d’erreur et l’utilisation des ressources système. Les mesures jouent un rôle essentiel dans le traçage distribué, offrant une manière quantifiable de surveiller et d’analyser la performance de divers services au sein d’un système distribué. Ces valeurs numériques sont extrapolées à partir de pistes et de journaux, fournissant des informations « instantanées », ou même des rapports détaillés sur des aspects spécifiques tels que les délais de réponse, les taux d’erreur et le débit du système.
En examinant les données de trace et de journal à travers l’objectif des mesures qui résument les indicateurs de performance clés, les organisations peuvent avoir une compréhension complète de leur architecture distribuée, ce qui permet de poser des diagnostics rapides et d’avoir des informations exploitables, et faciliter une optimisation efficace du système.
Les microservices sont une conception d’architecture logicielle dans laquelle une application est structurée comme une collection de services à couplage lâche et à déploiement indépendant. Chaque microservice porte sur un domaine fonctionnel spécifique et fonctionne comme un composant individuel au sein du système global. Cette approche modulaire favorise la flexibilité, l’évolutivité et peut améliorer la vitesse de développement. Dans le contexte du traçage distribué, les microservices jouent un rôle important dans les nœuds individuels qui passent par une demande.
Lorsqu’une demande passe d’un microservice à un autre, le traçage distribué saisit les détails de ces interactions, notamment le temps passé à chaque étape. Cette information explique la façon dont la demande est acheminée par les nombreux services, en identifiant les goulots d’étranglement, les retards et les défaillances potentielles.
Il peut s’avérer compliqué de comprendre comment les microservices interagissent dans un système distribué; le traçage distribué fournit des informations précieuses sur ces interactions, permettant aux organisations de visualiser les chemins, de surveiller la performance des systèmes et de résoudre les problèmes qui peuvent survenir afin de favoriser une architecture système plus robuste et plus efficace.
Le traçage distribué est devenu un outil indispensable pour les organisations travaillant avec des systèmes distribués, en particulier dans le contexte des microservices et des architectures dynamiques. En suivant et en enregistrant de manière exhaustive chaque interaction d’une requête avec chaque service, le traçage distribué fournit des informations cruciales sur la surveillance, le débogage et l’optimisation des performances. Les attributs peuvent être ajoutés à des traces pour plus de précision, et une telle étendue est enregistrée avec des métadonnées détaillées, notamment les relations parent-enfant, ce qui permet une compréhension complète de la façon dont les demandes circulent et traversent les services.
Ainsi, de plus en plus d’entreprises se tournent vers le traçage distribué pour gérer la complexité de leurs environnements d’applications modernes. Avec les nombreux points de défaillance potentiels dans les piles d’applications complexes d’aujourd'hui, identifier les causes profondes des problèmes peut être difficile, chronophage et potentiellement semé d’erreurs. Le traçage distribué simplifie ce processus, facilitant l’identification plus rapide et plus précise des problèmes et améliore ainsi directement la capacité d’une entreprise à fournir une excellente expérience utilisateur.
Parallèlement, le traçage distribué est une réponse efficace au problème de la cardinalité, dans lequel les volumes de données augmentent au point où la capacité de stockage et de calcul des données devient difficile à gérer.
Les avantages du traçage distribué s’étendent à l’amélioration de la compréhension des performances des microservices, à la résolution rapide des problèmes et à la satisfaction des clients. En fournissant une vue détaillée de la performance de chaque microservice, les organisations peuvent garantir des flux de revenus stables tout en consacrant plus de temps à la stratégie et à l’innovation.
Les données fournies par l’intermédiaire du traçage distribué sont essentielles, mais en finalité, il ne s’agit que de données. Sans une compréhension claire de ce que les données représentent, elles ne peuvent pas avoir d’impact positif sur le processus de prise de décision. La véritable valeur des données sont les informations détaillées exploitables qui peuvent être dérivées des chiffres, à condition qu’elles soient récentes, pertinentes et fiables.
C’est dans l’analyse intelligente et la compréhension contextuelle de ces données que les organisations peuvent cibler les problèmes, identifier les causes et mettre en œuvre des solutions efficaces. De quelle façon le traçage distribué va-t-il au-delà de la simple collecte de données pour fournir des informations approfondies sur divers scénarios? Tenir compte des éléments suivants :
Le traçage distribué joue un rôle essentiel dans la reconnaissance des symptômes d’une mauvaise santé logicielle, comme la latence ou un faible débit. Il agit comme un outil de diagnostic, reliant les effets observables à leurs causes sous-jacentes, ce qui permet de valider les hypothèses sur ce qui peut avoir déclenché le changement observé.
Lorsqu’un service devient non disponible, cela requiert une explication. Le suivi aide les organisations à déterminer quels changements, internes ou externes, ont été apportés avant une panne. Que la variation soit causée par des bogues du logiciel, des changements dus aux utilisateurs ou des modifications de l’infrastructure qui entraînent des problèmes de performance, le traçage distribué permet de déterminer l’état du système avant et après la panne, et d’en identifier clairement la cause.
Il est essentiel de comprendre les changements au sein des services individuels. Qu’il s’agisse de déploiements ou de mises à jour de versions, le traçage distribué décompose les performances à travers des étapes distinctes, en identifiant chaque étendue avec les informations de version. Cette vue détaillée aide à diagnostiquer les changements qui affectent la performance d’un service.
Les systèmes ne sont pas statiques et les utilisateurs qui travaillent dans les systèmes ne le sont pas non plus. Des facteurs externes tels que les changements de comportement des utilisateurs peuvent entraîner des changements au niveau de la performance des services. Le traçage perspicace utilise des balises pour saisir les parties essentielles des demandes et des fonctionnalités utilisateur, offrant une meilleure compréhension de la façon dont les utilisateurs interagissent avec l’application et de la manière dont ces interactions peuvent créer des demandes imprévues.
Les ressources sont limitées, et parfois il n’y en a tout simplement pas assez pour tout le monde. La concurrence en matière de ressources dans les réseaux distribués peut avoir une incidence importante sur les performances. Le traçage distribué offre des informations sur la façon dont les ressources partagées telles que les UC, les conteneurs ou les bases de données sont utilisées. Des traces correctement balisées permettent une analyse globale, révélant quand et où des performances plus lentes sont en corrélation avec une utilisation spécifique des ressources, aidant ainsi à la planification des ressources et à la résolution des conflits.
La nature dynamique des dépendances signifie que les changements en amont peuvent avoir une incidence sur la performance de votre service. Un traçage distribué intuitif, notamment l’identification des opérations d’évacuation et des numéros de version, permet de voir comment les services en amont affectent les performances. La compréhension de ces relations aide à s’adapter aux impacts de ces changements ou à les atténuer.
Les normes du traçage distribué à source libre sont des cadres essentiels qui guident la collecte, la gestion et l’analyse des données de traçage entre différents services de manière normalisée. Ces normes favorisent l’interopérabilité et réduisent le verrouillage des fournisseurs, permettant aux développeurs de passer d’un outil à l’autre avec des ajustements minimes. Elles constituent également un terrain d’entente commun pour l’intégration de diverses plateformes, langues et applications dans des systèmes distribués complexes.
Parmi les normes de traçage distribué à source ouverte les plus largement utilisées, mentionnons :
Faisant partie de la Cloud Native Computing Foundation (CNCF), OpenTracing est l’une des premières normes de traçage distribué à source ouverte. Ce cadre comprend des API qui prennent en charge la propagation du contexte distribué et permettent aux développeurs d’ajouter des instruments à leur code d’application (sans s’enfermer dans un fournisseur spécifique). OpenTracing a offert des sémantiques de traçage cohérentes sur différentes plateformes, mais a depuis été archivée; le CNCF ne fournit plus de soutien pour le projet.
OpenCensus est conçu pour soutenir plusieurs exportateurs, ce qui permet aux utilisateurs d’envoyer des données de trace à différents rétrosites pour analyse. Ce cadre (qui provient de Google) fournit un ensemble clair d’API et de bibliothèques qui permettent la collecte automatique et manuelle de traces et de mesures distribuées. En offrant une solution unifiée pour l’observabilité, OpenCensus simplifie le processus de collecte et de gestion des données statistiques essentielles. OpenCensus a également été supprimé.
OpenTelemetry est un projet de fusion entre OpenTracing et OpenCensus, combinant les meilleures fonctionnalités des deux normes. Cofondé par Lightstep, OpenTelemetry offre un ensemble unifié et plus étendu d’API, de bibliothèques, d’agents et d’instrumentation pour fournir un cadre d’observation complet pour les logiciels natifs en nuage. OpenTelemetry simplifie l’instrumentation des applications, offrant une prise en charge intégrée de divers cadres et bibliothèques populaires. Elle vise à devenir la norme d’observabilité des traces, de journalisation et des mesures distribuées, soutenue par une communauté en croissance et un soutien étendu à l’industrie.
Diverses fonctionnalités font partie intégrante de la fonctionnalité et du succès du traçage distribué. Voici comment chaque caractéristique joue un rôle :
Les mécanismes d’alerte dans l’arrière-plan de l’observabilité permettent aux équipes de définir des seuils pour des mesures ou des comportements spécifiques susceptibles d’indiquer un problème. Lorsque ces seuils sont atteints, les alertes peuvent être envoyées au personnel concerné, ce qui permet d’identifier et de résoudre rapidement les problèmes potentiels, améliorant ainsi la fiabilité du système.
Le traçage distribué offre une visibilité complète sur l’ensemble du parcours d’une demande grâce à différents services et composants. Ces informations de bout en bout aident à identifier les goulots d’étranglement, les inefficacités et les anomalies dans le système, fournissant un contexte détaillé pour la mise au point des performances et l’analyse des erreurs.
En fournissant des informations précises sur le comportement du système, le traçage distribué réduit considérablement le temps consacré au débogage et à l’identification des problèmes. Cette efficacité se traduit par des économies de coûts, car les équipes peuvent consacrer plus de temps au développement et à l’innovation des fonctionnalités plutôt qu’au dépannage.
Avec l’essor de l’informatique distribuée sur plusieurs emplacements géographiques et fournisseurs de nuage, le traçage distribué facilite l’intégration dans ces environnements complexes. Il permet une vue cohérente des performances du système dans différentes régions et plateformes infonuagiques, assurant ainsi une surveillance et une analyse cohérentes.
Le traçage distribué permet une surveillance et un suivi en temps réel de la performance de chaque service, en analysant la façon dont ils interagissent et en repérant les domaines qui pourraient nécessiter une optimisation.
Le collecteur agit comme un composant essentiel dans la collecte, le traitement et l’exportation des données de télémétrie (c.-à-d., traces, mesures et journaux). Il offre une option unifiée et indépendante des fournisseurs pour la collecte et la transmission de données, permettant une intégration transparente avec divers contreforts d’observation. La flexibilité du collecteur garantit que le traçage peut être adapté à différents environnements sans modification du code d’instrumentation.
L’échantillonnage est une fonctionnalité qui permet de collecter un sous-ensemble de demandes (plutôt que chaque demande) afin de réduire le volume total de données envoyées au système de traçage. Cela permet aux systèmes de traçage distribués de fonctionner à grande échelle sans avoir recours à des ressources accablantes, tout en fournissant des informations précieuses.
À mesure que les systèmes évoluent, le traçage distribué doit s’adapter à un accroissement de la complexité et de volume de données. Les fonctionnalités d’évolutivité garantissent que le traçage peut prendre en charge les environnements à grande échelle, fournissant des informations de performance cohérentes, quelle que soit la taille du système. Bien sûr, la saisie des données n’est que la première étape; pour s’assurer que les organisations comprennent les données, elles ont besoin d’un accès à une plateforme qui peut évoluer en même temps que le traçage distribué au fur et à mesure que les systèmes grandissent et évoluent.
Les applications modernes sont composées de langues, de cadres, de technologies et de clients variés (à la fois basés sur le Web et mobiles). La capacité du traçage distribué de fonctionner dans des environnements hétérogènes généralistes garantit que les développeurs disposent des informations dont ils ont besoin dans l’ensemble de la pile technologique, quelle qu’en soit la diversité.
Comme nous l’avons déjà mentionné, les avantages du traçage distribué sont liés à la visibilité améliorée qu’il fournit dans les systèmes distribués d’une organisation. Mais la visibilité en soi n’est précieuse que lorsqu’elle ouvre la porte à d’autres avantages. Les principaux avantages du traçage distribué comprennent :
L’un des principaux avantages du traçage distribué est sa capacité à mesurer la durée nécessaire à l’exécution des actions essentielles de l’utilisateur, telles que la réalisation d’un achat. Le suivi du parcours de demande aide à localiser et à corriger les obstacles en arrière-plan qui pourraient autrement avoir une incidence négative sur l’expérience de l’utilisateur.
La plupart des organisations fonctionnent dans les limites des accords sur les niveaux de service (ANS), formalisant les engagements de performance envers les clients ou d’autres divisions internes. Les outils de suivi distribués compilent les données de performance des services individuels, ce qui permet aux équipes d’évaluer si elles respectent leurs ANS.
Les objectifs de niveau de service sont des cibles spécifiques et mesurables qui définissent les performances et la disponibilité anticipées d’un service, et sont soutenus par des indicateurs de niveau de service qui aident les organisations à mesurer leurs niveaux de service. Un traçage distribué correctement déployé offre l’occasion de suivre et de répondre aux SLO en choisissant les signaux spécifiques à surveiller et à définir des alertes pour toute erreur ou donnée qui se situe en dehors d’une plage prédéterminée. Cela permet de traiter rapidement et efficacement les incidents connexes.
Le traçage distribué fournit des informations sur les relations de cause à effet complexes entre les services assortis. Cette compréhension aide les entreprises à optimiser la performance globale de leur système.
Dans les environnements où différentes équipes supervisent les différents services impliqués dans la réalisation d’une demande, le traçage distribué offre des précisions sur le lieu où une erreur s’est produite et sur l’équipe devant la traiter. Cette clarté améliore la collaboration entre les équipes, réduit considérablement le temps passé à pointer du doigt et contribue à la productivité globale au sein de l’organisation.
Lorsque des problèmes surviennent dans la performance des applications, les équipes de soutien peuvent utiliser des traces distribuées pour déterminer si le problème se trouve dans le système principal. En analysant les traces du service affecté, les ingénieurs peuvent identifier et résoudre le problème. L’utilisation d’outils de traçage distribué de bout en bout permet même d’enquêter sur les problèmes de performance de première ligne au sein de la même plateforme, réduisant ainsi le délai moyen jusqu’à la détection (MTTD) et le délai moyen jusqu’à la résolution (MTTR) pour les problèmes potentiellement problématiques.
Même si le traçage distribué apporte de nombreux avantages, il comporte également des obstacles inhérents qui pourraient entraver son plein potentiel. Comprendre ces défis est essentiel pour les organisations qui visent à mettre en œuvre le traçage distribué de façon efficace. Voici quelques-uns des défis les plus notables :
L’un des obstacles auxquels certaines plateformes de traçage distribués sont confrontées est la nécessité de l’instrumentation manuelle. Cela signifie que l’organisation devra peut-être modifier son code existant pour lancer le traçage des demandes. Cette intervention manuelle ne nécessite pas seulement de précieuses ressources d’ingénierie, mais peut également entraîner l’introduction d’erreurs dans les applications au fur et à mesure que le code est révisé.
Le traçage distribué traditionnel est souvent restreint aux services dorsaux, générant un identifiant de trace uniquement lorsque la demande touche le premier service dorsal. Sans utiliser une plateforme de traçage distribué de bout en bout, la visibilité de la session utilisateur correspondante au système frontal reste masquée. Cette limitation rend plus difficile la recherche de la cause profonde de certaines demandes problématiques et de déterminer si le problème doit être résolu par l’équipe frontale ou dorsale.
Heureusement, l’adoption de cadres comme OpenTelemetry réduit ou élimine les défis de visibilité limitée aux transactions frontales ainsi que les problèmes associés à l’instrumentation. Ces défis, ainsi que d’autres, sont inhérents à de nombreuses technologies de l’industrie (telles que Kubernetes) qui incorporent OpenTelemetry dans leurs bases de code de base.
Alors que le paysage moderne des services informatiques de l’entreprise continue d’évoluer en termes de taille et de complexité, les avantages du traçage distribué deviennent de plus en plus évidents. L'Observabilité infonuagique de ServiceNow, tirant parti de la Now Platform® primée, établit une nouvelle norme pour le suivi, offrant une visibilité complète sur les demandes des systèmes distribués.
Intégration aux outils existants. Rapprocher les mesures et le traçage pour créer une télémétrie unifiée. Réduire considérablement le MTTR de votre organisation. Et, grâce à tout cela, aligner les prix sur les résultats commerciaux, pour une valeur accrue sans réduire les coûts pour une utilisation accrue.
L’observabilité infonuagique révolutionne le traçage distribué pour profiter à votre entreprise. Communiquer avec ServiceNow dès aujourd’hui pour en savoir plus!