Verteiltes Tracing zur Beobachtung der Latenz von Mikrodiensten verwenden

Last reviewed 2023-08-11 UTC

Wenn eine Anwendung für die Verwendung von Mikrodiensten umgeschrieben wird, erhöht sich die Anzahl der Komponenten und Endpunkte, die an einer einzelnen Nutzertransaktion beteiligt sind. Daher ist die Beobachtbarkeit für den zuverlässigen Betrieb von Nutzerdiensten von entscheidender Bedeutung. In dieser Referenzarchitektur wird gezeigt, wie Sie mit OpenTelemetry und Cloud Trace Trace-Informationen für Mikrodienstanwendungen erfassen.

Dieses Dokument richtet sich an Entwickler, SREs und DevOps Engineers, die die Grundlagen des verteilten Tracings verstehen und diese Prinzipien auf ihre Dienste anwenden möchten, um die Beobachtbarkeit von Diensten zu verbessern.

Architektur

Das folgende Diagramm zeigt die Architektur einer Anwendung, die diese Architektur implementiert.

Architektur einer Beispielbereitstellung mit zwei GKE-Clustern

Wie im vorherigen Diagramm dargestellt, enthält diese Architektur zwei GKE-Cluster. In jedem Cluster stellen Sie eine Anwendung bereit. Nutzer-Traffic wird an die Frontend-Anwendung im Frontend-Cluster gesendet. Der Frontend-Pod im Frontend-Cluster kommuniziert mit dem Backend-Pod im Backend-Cluster. Der Backend-Pod ruft einen externen API-Endpunkt auf.

Beobachtbarkeitsdaten werden nach Cloud Trace exportiert, das erfasst, wie Anfragen die Anwendungen durchlaufen.

Überlegungen zum Design

Für Dienste, die auf Kubernetes ausgeführt werden, können Sie ein Service Mesh wie Istio verwenden, um das verteilte Tracing von Dienst-zu-Dienst-Fraffic ohne spezielle Instrumentierung zu ermöglichen. Möglicherweise müssen jedoch folgende Anforderungen erfüllt sein:

  • Sie benötigen eventuell mehr Kontrolle über die Traces, als Istio bietet.
  • Möglicherweise müssen Sie interne Elemente der Anwendung in den Trace-Informationen erfassen.
  • Möglicherweise müssen Sie Code verfolgen, der nicht in Kubernetes ausgeführt wird.

Für diese Anwendungsfälle können Sie OpenTelemetry verwenden. Dies ist eine Open-Source-Bibliothek, die Instrumentierung zu verteilten Mikrodienstanwendungen hinzufügen kann, um Traces, Messwerte und Logs für eine Vielzahl von Sprachen, Plattformen und Umgebungen zu erfassen.

Informationen zu Traces, Spans und Kontext

Das Konzept des verteilten Tracings ist in der von Google veröffentlichten Dapper-Studie beschrieben. Wie darin beschrieben, zeigt das folgende Diagramm fünf Spans in einem Trace.

Diagramm: Verteiltes Tracing mit fünf Spans in einem Trace

Ein Trace ist die Gesamtzahl der Informationen, die beschreiben, wie ein verteiltes System auf eine Nutzeranfrage reagiert. Traces bestehen aus Spans, wobei jeder Span ein bestimmtes Anfrage/Antwort-Paar darstellt, das an der Verarbeitung der Nutzeranfrage beteiligt ist. Der übergeordnete Span beschreibt die vom Endnutzer beobachtete Latenz. Jede der untergeordneten Bereiche beschreibt, wie ein bestimmter Dienst im verteilten System aufgerufen und beantwortet wurde, wobei jeweils Latenzinformationen erfasst werden.

Das Diagramm zeigt eine Frontend-Anfrage, die zwei Backend-Anfragen stellt. Für den zweiten Backend-Aufruf sind zwei Hilfsaufrufe erforderlich. Jeder Aufruf ist mit seiner eigenen Span-ID sowie der ID des übergeordneten Spans gekennzeichnet.

Eine Herausforderung bei der Verfolgung in verteilten Systemen besteht darin, dass Informationen zur ursprünglichen Frontend-Anfrage nicht automatisch weitergegeben werden, wenn nachfolgende Anfragen an verschiedene Backend-Dienste gestellt werden.

Mit einigen Tools (z. B. in der Go-Sprache) können Sie Anfragen mit Kontext stellen, also mit der Cluster-IP-Adresse und den Anmeldedaten. OpenTelemetry erweitert das Konzept des Kontexts um Span-Kontext. Dies bedeutet, dass zusätzliche Informationen in den HTTP-Header geladen werden. Informationen zum übergeordneten Span können dann in jede nachfolgende Anfrage aufgenommen werden. Sie können untergeordnete Bereiche anfügen, um den gesamten Trace zu erstellen. So können Sie sehen, wie die Nutzeranfrage das System durchlaufen hat und schließlich an den Nutzer zurückgegeben wurde.

Bereitstellung

Informationen zum Bereitstellen dieser Architektur finden Sie unter Verteiltes Tracing zur Beobachtung der Latenz von Mikrodiensten bereitstellen.

Nächste Schritte