Microservices, Integration
Die Microservices Architektur bietet den Vorteil der freien Technologieauswahl bei jedem Microservice. Ein wichtiger Punkt unseres Evaluierungsprojektes war die Prüfung der Integrationsfähigkeit von Softwarekomponenten, welche nicht Java, bzw. Spring Cloud im Technologiestack enthalten. Dazu möchte ich in diesem Beitrag unserer Blogserie zeigen auf welche Art und Weise wir legacy Software, wie zum Beispiel Fedora4 Content Repository in die „Platform Service“ der Microservices Welt integriert haben.
Integration
Für die Integration solcher „nicht Java basierten Softwarekomponenten“ stellt Netflix Open Source Stack (Netflix OSS) das Projekt Prana bereit. Prana ist eine sogenannte Sidecar Anwendung. Durch die Nutzung von Prana ist es möglich die „Platform Service„, wie zum Beispiel Eureka, Circuit Breaker und Ribbon in solchen Projekten zu verwenden. Wie der Name „Beistellwagen“ schon verrät wird das Prana Projekt lediglich neben den nicht Netflix fähigen Microservice gestellt und konfiguriert. Wie genau das funktioniert, möchte ich gerne an folgendem konkreten Beispiel demonstrieren.
Dazu haben wir im ersten Schritt ein Spring Boot Projekt aufgesetzt und Spring Cloud Sidecar durch folgende Annotation an der „main“ Klasse aktiviert.
@EnableSidecar
@SpringBootApplication
public class SideCarApplication {
public static void main(String[] args) {
SpringApplication.run(SideCarApplication.class, args);
}
}
Anschließend müssen im Sidecar Projekt noch folgende Properties gesetzt werden:
spring.application.name=Fedora4-Sidecar
server.display-name=Staatsbibliothek Fedora Sidecar
server.port=9080
sidecar.health-uri=http://localhost:8080/rest/health.json
sidecar.port=8080
sidecar.home-page-uri=http://localhost:8080/
Mit der Angabe der health-uri wird auf einen REST Endpunkt der Fedora4 Anwendung verwiesen, aus welchem Sidecar die Statusinformation zur Übermittlung an Eureka erhält. Dazu haben wir im Fedora4 folgendes triviales JSON Dokument hinterlegt:
health.json
{„status“:“UP“}
Bei erreichbarem Fedora4 kann Sidecar nun diese Statusinformation an Eureka übermitteln. Sidecar muss auf demselben Server laufen wie Fedora4. Zusätzlich zur Sidecar Konfiguration müssen natürlich noch die Konfigurationswerte für Eureka, Hystrix und Ribbon gesetzt werden. Um Fedora4 in Eureka sichtbar zu machen haben wir daher für die Service Registry folgende Werte gesetzt:
eureka.instance.leaseRenewalIntervalInSeconds=10
eureka.client.healthcheck.enabled=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/serviceregistry/eureka/
eureka.client.registryFetchIntervalSeconds=5
Ist Fedora4 gestartet zeigt Eureka die Integration wie folgt an:
Ist das Sidecar Projekt gestartet und verfügbar, kann anschließend Fedora4 über folgende URL angesteuert werden:
http://<hostname>:9080/fedora4-sidecar/
Welche Vorteile bringt uns diese Integration nun aber ganz konkret.
- ohne Fedora4 anpassen zu müssen, lässt es sich in die „Platform Services“ von Netflix integrieren,
- Fedora4 ist damit in der Service Registry sichtbar und abrufbar,
- ein Aufruf von Fedora4 über die Sidecar URL wird als Circuit Breaker Command ausgeführt,
- es werden Hystrix Metriken generiert welche im Hystrix Dashboard sichtbar sind,
- es kann Load Balancing verwendet werden, sobald Fedora4 mehrfach installiert ist,
- es kann die zentrale Configuration Management Instanz verwendet werden.
Obwohl Fedora4 kein Microservice ist können Client Anwendungen die Service Registry nach der Einstiegs URL von Fedora4 fragen. Anschließend wird jede Anfrage der Clients via Hystrix abgesichert und aufgezeichnet. So konnten wir zum Beispiel die Antwortzeiten der Fedora4 REST API im Hystrix Dashboard aufzeichnen und auswerten.
All diese Vorteile sind ohne eine einzige Anpassung des Fedora4 Systems möglich. Auf dieselbe Art und Weise haben wir einen reinen Javascript Microservice eingebunden.
Fazit
Wie dieser Beitrag zeigt, ist die Integration einer Softwarekomponente, welche nicht den Netflix Stack via Bibliotheken Integration nutzen kann, sehr einfach. Die aufgezeigten Möglichkeiten, welche sich dadurch bieten finde ich beeindruckend. Hinzufügen muss ich allerdings, dass sich auf diese Art und Weise nur Softwarekomponenten integrieren lassen, welche über eine REST API angesprochen werden können. Da alle Aufrufe dieser REST API über Sidecar geroutet werden. Für Softwarekomponenten ohne REST API ist die Integration ebenfalls möglich aber etwas aufwendiger.
Ihr Kommentar
An Diskussion beteiligen?Hinterlassen Sie uns einen Kommentar!