Verbesserung der API-Observability-Serie (Teil 3): Tracing

March 19, 2024

Technology

Einführung

Was ist Distributed Tracing?

In der heutigen Landschaft der Microservices-Architektur und verteilten Systeme durchläuft eine einzelne Anfrage oft mehrere Dienste, die jeweils verschiedene interne Verarbeitungsschritte enthalten. Um den effizienten und stabilen Betrieb von Systemen sicherzustellen, ist es unerlässlich, den vollständigen Pfad und die Verarbeitung dieser Anfragen zu verstehen. Diese Notwendigkeit führte zur Entstehung der Distributed Tracing-Technologie. Sie ermöglicht es uns, den gesamten Weg einer Anfrage von der Initiierung bis zum Abschluss klar nachzuvollziehen, einschließlich jedes Dienstes, den sie durchläuft, der Verarbeitungszeit jedes Dienstes und des Auftretens von Anomalien.

Prozess der Nutzung von Tracing in APIs

Zunächst ist es wichtig, einen Tracing-Agenten oder ein SDK für das Tracing am Einstiegspunkt jedes Dienstes bereitzustellen, um alle Anfragen zu erfassen. Durch Tracing-Daten können wir die Verarbeitungszeit von Anfragen in jedem Dienst deutlich beobachten und somit potenzielle Leistungsengpässe identifizieren. Distributed Tracing zeichnet nicht nur die normale Anfrageverarbeitung auf, sondern erfasst auch alle Ausnahmen und Fehler, die während des Prozesses auftreten. Durch die Visualisierung der Distributed-Tracing-Daten können wir den Fluss der Anfragen zwischen verschiedenen Diensten und Komponenten intuitiv verstehen.

Tracing von API7 Enterprise

Verbesserung der Beobachtbarkeit - Distributed Tracing

In Bezug auf Distributed Tracing gibt es hier einige Methoden, um die Beobachtbarkeit von APIs zu verbessern, zusammen mit spezifischen Beispielen:

1. Auswahl geeigneter Distributed-Tracing-Tools und -Technologien

Bei der Auswahl von Distributed-Tracing-Tools sollten Sie Ihre Technologie-Stack, Geschäftsanforderungen und die Komplexität der Überwachung berücksichtigen. Zipkin, SkyWalking und OpenTelemetry sind beliebte Distributed-Tracing-Lösungen, die jeweils ihre eigenen Besonderheiten haben.

2. Integration von Distributed Tracing in die API-Entwicklung

Für Zipkin und SkyWalking kann die Integration in die API-Entwicklung durch das Hinzufügen der jeweiligen Abhängigkeiten und Konfigurationen erreicht werden. Für OpenTelemetry ist jedoch die manuelle Erstellung und Verwaltung des Tracing-Kontexts über dessen API erforderlich.

3. Konfiguration und Optimierung von Distributed-Tracing-Systemen

Zipkin, SkyWalking und OpenTelemetry können alle über Konfigurationsdateien angepasst werden. Parameter wie die Sampling-Rate, die Backend-Speicherkonfiguration und die Optimierung der Datenübertragung können festgelegt werden. Darüber hinaus ist es wichtig, Warnregeln zu definieren, um schnell auf außergewöhnliche Ereignisse reagieren zu können.

4. Datenanalyse und Visualisierung

Zipkin, SkyWalking und OpenTelemetry bieten Visualisierungsschnittstellen, um Distributed-Tracing-Daten und Leistungsmetriken anzuzeigen. Beispielsweise können in der Benutzeroberfläche von Zipkin spezifische Trace-Daten gesucht und angezeigt werden, um den Fluss der Anfragen zwischen verschiedenen Diensten zu verstehen. Das Dashboard von SkyWalking bietet einen globalen Leistungsüberblick und ein Diagramm der Dienstaufrufbeziehungen. OpenTelemetry-Daten können in verschiedene Visualisierungstools wie Grafana importiert werden, um benutzerdefinierte Dashboards und Diagramme zu erstellen.

5. API7 Enterprise integriert Distributed-Tracing-Plugins

API7 Enterprise unterstützt mehrere Tracing-Plugins, darunter Zipkin, OpenTracing und SkyWalking. Diese Tracing-Plugins müssen an Routing-Regeln oder globale Regeln gebunden werden. Wenn keine Anforderungen an die Sampling-Rate bestehen, ist es ratsam, sie an globale Regeln zu binden, um Auslassungen zu vermeiden.

API7 Enterprise Observability Plugins

Praktische Fallanalyse: Verbesserung der Beobachtbarkeit von E-Commerce-APIs

Während des Prozesses des Durchsuchens und Kaufens von Produkten auf einer E-Commerce-Plattform sind mehrere API-Aufrufe beteiligt. Beispielsweise rufen Benutzer zunächst die API des Produktdienstes auf, um eine Liste von Produkten abzurufen, wählen dann ein bestimmtes Produkt aus und rufen die API des Bestelldienstes auf, um eine Bestellung zu erstellen, und rufen schließlich die API des Zahlungsdienstes auf, um die Zahlung abzuschließen.

In diesem Szenario wurde festgestellt, dass die API des Bestelldienstes während der Spitzenzeiten oft Verzögerungen und Timeouts erlebte, was zu spürbaren Verzögerungen und Fehlern während des Bezahlvorgangs führte. Um dieses Problem zu lösen, entschied sich das Team, Distributed-Tracing-Technologie einzuführen, um Leistungsengpässe zu diagnostizieren und das System zu optimieren.

  1. Auswahl von Distributed-Tracing-Tools: Das Team wählte SkyWalking als Distributed-Tracing-Tool aufgrund seiner Unterstützung für mehrere Sprachen, der einfachen Integration und der umfangreichen Visualisierungsmöglichkeiten.

  2. Integration von SkyWalking: Der Bestelldienst ist in Java entwickelt, und das Team integrierte den Java-Agenten von SkyWalking in den Code des Bestelldienstes. Dadurch kann SkyWalking automatisch Tracing-Daten sammeln, wenn die API des Bestelldienstes aufgerufen wird.

  3. Konfiguration von SkyWalking: Das Team konfigurierte den Backend-Speicher von SkyWalking auf Elasticsearch und legte angemessene Sampling-Raten fest, um das Detailniveau der Tracing-Daten und die Speicherkosten auszugleichen.

  4. Sammlung und Analyse von Tracing-Daten: Während der Spitzenzeiten beobachtete das Team die Aufrufkette und Leistungsmetriken der API des Bestelldienstes über die Benutzeroberfläche von SkyWalking. Sie stellten fest, dass ein bestimmter Aufruf der API des Produktbestandsdienstes während des Bestellprozesses deutlich länger dauerte und zu einem Leistungsengpass wurde.

  5. Vertiefende Untersuchung: Das Team untersuchte detaillierte Tracing-Daten der API des Produktbestandsdienstes, einschließlich Aufrufparameter, Rückgabeergebnisse und Ausnahmeinformationen. Sie entdeckten, dass die API bei der Verarbeitung bestimmter Produkte eine komplexe Datenbankabfrageoperation ausführte, was zu einer erhöhten Verarbeitungszeit führte.

  6. Optimierungsmaßnahmen: Um dieses Problem zu lösen, implementierte das Team zwei Optimierungsmaßnahmen. Erstens optimierten sie die Datenbankabfrageanweisungen, um die Abfrageeffizienz zu verbessern. Zweitens implementierten sie ein Caching für die API des Produktbestandsdienstes, um Ergebnisse für häufig abgefragte und selten geänderte Produkte direkt aus dem Cache abzurufen und so unnötige Datenbankabfragen zu vermeiden.

Fazit

Distributed-Tracing-Technologie spielt eine entscheidende Rolle in der Microservices-Architektur und verteilten Systemen. Durch die Aufzeichnung und Visualisierung des Flusses von Anfragen zwischen mehreren Diensten können wir schnell Leistungsengpässe identifizieren und beheben, was die Stabilität und Beobachtbarkeit des Systems verbessert. Durch die Auswahl geeigneter Distributed-Tracing-Tools und deren Integration in die API-Entwicklung können wir tiefere Einblicke in den Systembetrieb gewinnen und somit die Benutzererfahrung und Systemeffizienz verbessern.

Verwandte Blogbeiträge

Tags: