How-To

Microservices: Mit Tools wie Jaeger die Übersicht behalten

(Abbildung: Shutterstock)

In komplexen Microservice-Architekturen verliert selbst der Senior-Entwickler schnell die Übersicht. Um nachvollziehen zu können, welchen Weg eine einzelne ­Nutzeranfrage eigentlich nimmt und welche Services darin involviert sind, haben sich Tools wie Jaeger etabliert. So funktioniert das Werkzeug für „Distributed Tracing“.


Die Microservice-Architektur wird derzeit als Allheilmittel für fast alle Probleme in der Softwareentwicklung gehandelt. Tatsächlich löst die Aufteilung einer komplexen Anwendung in ­zahlreiche isolierte und unabhängige Komponenten viele ­Probleme, schafft aber auch neue. Schwierig wird es beispielsweise, wenn ­Microservices sich gegenseitig aufrufen. ­Abbildung 1 zeigt, wie eine einzelne Nutzeranfrage eine Vielzahl an ­Anfragen auslöst, die von einem Microservice zum anderen gestellt werden.

In komplexeren Architekturen wird dieses Geflecht irgendwann ziemlich unübersichtlich. Ein Entwickler, der im obigen Beispiel den „Bestellabwicklungs“-Microservice aufruft, weiß wo­möglich gar nicht mehr, dass dieser wiederum mit dem „USt.ID“-Microservice kommuniziert, der wiederum eine externe API anbindet.

Abbildung 1:Beispiel einer Microservice-­Architektur, in der eine eingehende Nutzeranfrage („Zahlungsdaten aktualisieren“) für eine Vielzahl an Anfragen der Microservices untereinander sorgt. (Grafik: Martin Helmich / t3n)

Diese Komplexität wird genau dann zum Problem, wenn einmal etwas nicht so läuft, wie es soll: Wenn beispielsweise die Verarbeitungsdauer für „Zahlungsdaten aktualisieren“-­Anfragen immer länger und länger wird oder diese Anfragen nur noch Fehler­meldungen auslösen. Dann muss zunächst einmal die ­Ursache (der „Root Cause“) des Problems gefunden werden – und das kann schwierig werden.

Deshalb ist es hilfreich, den vollständigen Weg einer einzelnen Nutzeranfrage über alle beteiligten Services hinweg nachvollziehen zu können. Idealerweise mit den auftretenden Fehlern und mit Informationen darüber, wie lange die einzelnen Operatio­nen gedauert haben. Genau diese Aufgabe erfüllen Tracing-Tools wie etwa das quelloffene Jaeger.

Wie funktioniert ein Tracer?

Tracing-Tools können feingranulare Informationen über den ­genauen Ablauf einer einzelnen Abfrage verarbeiten. Sie stellen dem Entwickler Informationen darüber zur Verfügung, wie lange ein Service für externe Aufrufe, etwa zu anderen Services oder externen API oder für Datenbankabfragen braucht.

Um diese Details bereitstellen zu können, muss in der ­Regel der Quelltext des jeweiligen Services angepasst werden. So kann jeder Service zunächst für sich selbst sogenannte „Spans“ er­fassen, also die Zeit, die er mit bestimmten Operationen verbracht hat. Spans können auch verschachtelt werden, um sichtbar zu machen, dass eine übergeordnete Span (beispiels­weise die Bearbeitung einer einzelnen ­HTTP-Anfrage in einem Service) aus mehreren untergeordneten Einzel­operationen (wie etwa ­einzelnen Datenbankabfragen) besteht.

Der Anbieter des Tracers, also etwa des Jaeger-Projekts, stellt die Bibliotheken bereit, mit denen der Nutzer die Informationen in seinem Programm selbst erfassen kann. Die gesammelten Spans werden vom Service regelmäßig nach jedem Request an den Tracer übermittelt. Diese kann je nach gewähltem Anbieter entweder selbst gehostet werden oder als SaaS-Produkt in der Cloud laufen.

Um eine Nutzeranfrage serviceübergreifend nachverfolgen zu können, muss der Tracer die Spans, die er von verschiedenen ­Services empfangen hat, anhand der ursprünglichen Nutzer­anfrage wieder zusammenfügen. Abbildung 2 zeigt den üblichen Ablauf.

Hierbei erstellt der erste Service, der eine eingehende Nutzer­anfrage verarbeitet (im Beispiel oben also der Stammdaten-­Service) eine eindeutige Trace-ID. Diese ID muss der Service dann in Anfragen einbetten, die er an nachgelagerte Services stellt. Wie genau das funktioniert, hängt vom Kommunikations­protokoll ab, über das die Services miteinander kommunizieren – beispiels­weise also ein HTTP-Header oder ein gRPC­-Metadatum.

Nachgelagerte Services können diese Trace-ID dann ­wieder aus den eingehenden Anfragen extrahieren und ihrerseits weiter­verarbeiten und in andere Anfragen einbetten. Auf ­diese Weise ist es möglich, dass sämtliche Spans, die von irgend­einem Service erfasst werden, mit derselben Trace-ID zurück an den Tracer übermittelt werden. Dieser kann dann einen service­übergreifenden Trace erstellen. Abbildung 3 zeigt, wie das in der Jaeger-Nutzeroberfläche aussieht.

Neben Jaeger gibt es noch weitere Werkzeuge am Markt, die ähnliche Funktionen anbieten. Andere Open-Source-Vertreter sind beispielsweise Elastic APM oder Apache Skywalking. Neben den Lösungen zum Selbst-Hosten gibt es auch SaaS-Angebote aus der Cloud, wie etwa Datadog oder Instana.

Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Schreib den ersten Kommentar!

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!

Hey du! Schön, dass du hier bist. 😊

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team bestehend aus 70 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Danke für deine Unterstützung.

Digitales High Five,
Luca Caracciolo (Chefredakteur t3n) & das gesamte t3n-Team

Anleitung zur Deaktivierung