[JAVA] MicroProfile OpenTracing mit Helidon

Einführung

UL Systems Adventskalender 2019 - 18. Tag

Lesen Sie heute Tracing MP Guide von Helidon Eclipse MicroProfile Open Tracing und Jaeger Ich möchte die verteilte Tracing-Visualisierung ausprobieren. (Der Tracing MP Guide verwendet Zipkin, aber dieses Mal möchte ich Jaeger wegen des niedlichen Logos verwenden.)

In letzter Zeit ist es üblicher geworden, das gesamte System mit einer Microservice-Architektur zu konfigurieren. Wenn zu diesem Zeitpunkt ein Fehler oder eine Verzögerung in dem Prozess auftritt, der mehrere Dienste mit der im herkömmlichen monolithischen System verwendeten Methodenverfolgung umfasst, ist es schwierig zu bestimmen, wo sie auftritt, sodass die Verteilung durchgehend verfolgt wird Ein Mechanismus namens Tracing ist erforderlich.

jaeger.png

Was ist Helidon?

Ein Open Source-basiertes Framework für die Entwicklung leichter Microservices, mit denen Microservices für Java erstellt werden können, das Oracle im September 2018 angekündigt hat.

Eigenschaften von Helidon

Dieses Mal werde ich Helidon MP verwenden, das MaicroProfile unterstützt.

Was ist Eclipse MicroProfile?

Eclipse MicroProfile ist eine Spezifikation der Enterprise Java API für Microservices. Es enthält jetzt APIs wie JAX-RS, JSON-P und CDI sowie APIs wie Konfiguration, Metriken und Fehlertoleranz. Der diesmal verwendete Helidon MP unterstützt Eclipse MicroProfile 3.2.

Was ist OpenTracing?

OpenTracing besteht aus API-Spezifikationen, Frameworks und Bibliotheken, die diese implementieren, sowie Projektdokumentation. Mit OpenTracing können Entwickler ihrem Anwendungscode mithilfe von APIs, die nicht an ein bestimmtes Produkt oder einen bestimmten Anbieter gebunden sind, Ablaufverfolgungsfunktionen hinzufügen.

Was ist Jaeger?

Ein Open Source OpenTracing-kompatibles verteiltes Tracing-System, das von Dapper und OpenZipkin inspiriert und von Uber Technologies veröffentlicht wurde. Diesmal ist der OpenTracing-API-Teil in der folgenden Abbildung MicroProfile OpenTracing, und der Jaeger-Client-Teil ist der von Helidon bereitgestellte Client für Jaeger.

20181125234256.png

Jaeger Setup

Zunächst möchte ich andere Teile als Client einrichten. In Bezug auf das Setup wird das All-in-One-Docker-Image veröffentlicht. Verwenden Sie es daher. (Geben Sie zunächst nur die minimal erforderlichen Ports an.)

$ docker run -d --name jaeger \
   -p 5778:5778 \
   -p 16686:16686 \
   -p 14268:14268 \
   jaegertracing/all-in-one:1.15

Beschreibung jedes Ports

Helidons Jaeger-Client scheint standardmäßig HTTP 5778 zu verwenden. (Dies kann durch Einstellung geändert werden)

キャプチャ004.JPG

Erstellen eines Hauptdienstes

Erstellen Sie dann das Hauptserviceprojekt mit dem Schnellstart des Helidon MP Maven-Archetyps.

$ mvn archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-mp \
    -DarchetypeVersion=1.4.0 \
    -DgroupId=io.helidon.main_service \
    -DartifactId=main_service \
    -Dpackage=io.helidon.main_service

Jaeger Client hinzugefügt

Fügen Sie pom.xml die folgende Abhängigkeit hinzu und fügen Sie den Jaeger-Client hinzu.

pom.xml(hinzufügen)


<dependency>
    <groupId>io.helidon.tracing</groupId>
    <artifactId>helidon-tracing-jaeger</artifactId>
</dependency>

Namen des Ablaufverfolgungsdienstes hinzufügen

Geben Sie in "META-INF / microprofile-config.properties" den Dienstnamen an, der mit den von Helidon an Jaeger gesendeten Ablaufverfolgungsdaten verknüpft werden soll.

microprofile-config.properties


tracing.service=helidon-main-service

Führen Sie den Hauptdienst aus und sehen Sie ihn sich an

Jetzt möchte ich die bisher erzielten Ergebnisse sehen. Das durch Schnellstart erstellte Projekt wird erstellt, damit der Server durch Ausführen der Methode "Main" der Klasse "io.helidon.main_service.Main" gestartet werden kann.

Wenn Sie nach dem Starten des Servers auf "http: // localhost: 8080 / greet" zugreifen, wird der durch den Schnellstart erstellte Dienst ausgeführt und Sie sollten "{" message ":" Hello World! "}" Anzeigen.

$ curl http://localhost:8080/greet
{"message":"Hello World!"}

Wenn Sie sich die Ablaufverfolgungsdaten von der Jaeger-Benutzeroberfläche (http: // localhost: 16686 / search) nach mehrmaligem Zugriff ansehen, sollten Sie die folgenden Ablaufverfolgungsdaten sehen. キャプチャ003.JPG

Klicken Sie auf jede Ablaufverfolgung weiter, um die Seite mit den Ablaufverfolgungsdetails anzuzeigen, auf der die Bereiche aufgelistet sind. Sie können die Stammspanne und die Beziehungen zwischen allen Bereichen in der Ablaufverfolgung sowie die Zeitinformationen klar erkennen. キャプチャ005.JPG

Sie können die Details der Spanne auch anzeigen, indem Sie auf jede Spannenzeile klicken. キャプチャ006.JPG

Ablaufverfolgung auf Klassen- oder Methodenebene

Darüber hinaus ist die Ablaufverfolgung auf Klassen- oder Methodenebene möglich, indem Sie die von MicroProfile OpenTracing bereitgestellte Annotation "@ Traced" hinzufügen.

GreetingProvider.java


@Traced
@ApplicationScoped
public class GreetingProvider {
...
}

キャプチャ007.JPG

Rückverfolgung über Dienste hinweg

Als nächstes möchte ich eine Nachverfolgung über Dienste hinweg durchführen.

Erstellen eines zweiten Dienstes

Erstellen Sie es mit dem Schnellstart des Helidon MP Maven-Archetyps sowie dem Hauptdienst und fügen Sie den Jaeger-Client hinzu.

$ mvn archetype:generate -DinteractiveMode=false \
    -DarchetypeGroupId=io.helidon.archetypes \
    -DarchetypeArtifactId=helidon-quickstart-mp \
    -DarchetypeVersion=1.4.0 \
    -DgroupId=io.helidon.second_service \
    -DartifactId=second_service \
    -Dpackage=io.helidon.second_service

pom.xml(hinzufügen)


<dependency>
    <groupId>io.helidon.tracing</groupId>
    <artifactId>helidon-tracing-jaeger</artifactId>
</dependency>

Einstellungsänderung

microprofile-config.properties(Nach der veränderung)


# Application properties. This is the default greeting
app.greeting=Hello From Second Service

# Microprofile server properties
server.port=8081

Funktionsprüfung

Wenn Sie den zweiten Dienst ausführen und den Vorgang überprüfen, werden die folgenden Ergebnisse erzielt.

$ curl http://localhost:8081/greet
{"message":"Hello From Second Service World!"}

Aufrufen des zweiten Dienstes vom Hauptdienst

Wechseln Sie, um den zweiten Dienst über den zuerst erstellten Hauptdienst aufzurufen.

Zunächst müssen Sie im Hauptdienst einen Rest-Client erstellen, um den zweiten Dienst aufzurufen. Im Gegensatz zum Tracing MP-Handbuch möchte ich es hier mit dem "Micro Profile Rest Client" erstellen.

SecondServiceClient.java


package io.helidon.main_service;

import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;

import javax.json.JsonObject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@RegisterRestClient(baseUri="http://localhost:8081")
public interface SecondServiceClient {
    @Path("/greet")
    @GET
    JsonObject getDefaultMessage();
}

Verwenden Sie dann den erstellten Client, um den zweiten Dienst vom Hauptdienst aus aufzurufen. Fügen Sie den erstellten SecondServiceClient in die aufrufende Klasse ein und rufen Sie den Second-Service mit SecondServiceClient für die Methode auf, die ursprünglich die Antwort zurückgegeben hat.

GreetResource.java


@Path("/greet")
@RequestScoped
public class GreetResource {
    @Inject
    @RestClient
    SecondServiceClient secondServiceClient;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public JsonObject getDefaultMessage() {
        // return createResponse("World");
        return secondServiceClient.getDefaultMessage();
    }

Funktionsprüfung

Führen Sie den Hauptdienst auf Port 8080 aus und stellen Sie sicher, dass der zweite Dienst aufgerufen wird.

$ curl http://localhost:8080/greet
{"message":"Hello From Second Service World!"}

Überprüfen Sie verteilte Ablaufverfolgungsdaten

Der Prozess dieses Mal ist so konfiguriert, dass die Anforderung von der Konsole den Hauptdienst schaltet und den zweiten Dienst aufruft. キャプチャ009.JPG

Wenn Sie sich die Ablaufverfolgungsdaten dieser Anforderung in der Jaeger-Benutzeroberfläche ansehen, wird insgesamt so viel Verarbeitungszeit benötigt, und Sie können den Verarbeitungsablauf überprüfen. キャプチャ008.JPG

Zusammenfassung

Dieses Mal habe ich versucht, die verteilte Ablaufverfolgung mit Eclipse MicroProfile Open Tracing durchzuführen. Wenn die verteilte Ablaufverfolgung bei der Einführung eines verteilten Systems visualisiert werden kann, ist es möglicherweise einfacher zu verstehen, selbst wenn ein Systemfehler oder eine Verzögerung auftritt.

Zusätzlich zu OpenTracing verfügt Eclipse MicroProfile über Spezifikationen wie Eclipse MicroProfile Metrics und Eclipse MicroProfile Fault Tolerance, die von Helidon ebenfalls unterstützt werden. Möglicherweise können andere Optionen als das Spring Framework in Betracht gezogen werden, z. B. die Migration von Anwendungen, die derzeit Java EE verwenden.

Recommended Posts

MicroProfile OpenTracing mit Helidon
Nehmen Sie Kontakt mit Eclipse MicroProfile Health auf