Eine auf Microservices basierte Taxi-App

Die Java-Services helfen, die Funktionalität der App zu verbessern und sie vor Überlastung und Inflexibilität wegen der Größe, die mit der Zeit kommen kann, zu schützen.

Eine auf Microservices basierte Taxi-App hero background

Herausforderung

Der Kunde hat die Entwicklung einer Taxi-Plattform bestellt. Eine der Anforderungen war, die Lösung plattformübergreifend zu machen (damit man sie nicht nur als eine Web-Anwendung sondern auch als eine mobile App nutzen kann). Es wurden Standardfunktionen angefragt: Taxi bestellen, Taxi verfolgen, bezahlen, Benachrichtigungen erhalten, Kommentare hinterlassen.

Herausforderung

Herangehen

Auf der Analysephase hat das Entwicklungsteam von SCAND die Aufteilung der Aufgabe durchgeführt und danach beschlossen, die Komponenten wie Fahrgast-Management, Fahrer-Management, Fahrten-Management, Dispatcher, Zahlungen, Benachrichtigungen und Abrechnung einzuführen.

Herangehen

Beschreibung 

Jede der Komponenten hat klare Grenzen und passt perfekt, um als ein unabhängiger Microservice implementiert zu werden. Das Ziel des Fahrgast-Service ist die Speicherung und die Aktualisierung der Daten des Fahrgastes. Für die Erstellung und die Verarbeitung der Daten über Taxifahrten ist der Dienst Trip Management zuständig. Die Zahlungskomponente kontrolliert den Fahrpreis und die Rechnungen, die nach der Fahrt erhalten werden. Die Benutzeroberfläche für Browser und Smartphones wurde als ein separater Microservice betrachtet.

Der Prozess der Entwicklung war auf solche Weise organisiert, dass für jeden Service ein einzelnes spezielles Team eingesetzt wurde. So konnten die Spezialisten mit Fokus auf dem Thema arbeiten und relevante Wissen generieren. Das Team musste eine gute Leistung erbringen, um die Anforderungen des Kunden bestmöglich zu erfüllen und ein starkes Microservices-Architekturmuster aufzubauen.

Jeder Service stellt seine eigene API zur Verfügung, die von anderen verwendet werden kann. Die engagierten Teams kooperierten beim Austausch der APIs und der Anforderungen an ihre Services miteinander. Die meisten davon verwenden REST als einen synchronen, auf Anfrage/Antwort basierenden Mechanismus für die Kommunikation zwischen den Prozessen und JSON als Nachrichtenformat. Zum Beispiel, der Microservice für Reisemanagement ruft den Fahrgastservice an, um mithilfe des oben genannten Mechanismus zu überprüfen, ob das Konto aktiv ist. Eine asynchrone Publish/Subscribe-Interaktion (wenn eine neue Reise erstellt wird) wird zwischen dem Reisemanagement und dem Dispatcher organisiert. Letzterer ermöglicht das Auffinden eines verfügbaren Fahrers. Um die oben erwähnte Interaktion zu realisieren, wurde Apache Kafka (ein Messaging-System mit einem Java-Client) verwendet.

Grails 3 (ein leistungsstarkes Groovy-basiertes Framework für die JVM) wurde für den implementierenden Teil der Dienste ausgewählt. Es hat ein großes Potenzial für die Unterstützung von den Microservices, da es die Mechanismen für das Bereitstellen der REST-API, das Analysieren von JSON und für das Senden von HTTP-Anfragen mit RestBuilder bereitstellt. Die Groovy-Sprache fügt Java eine Menge syntaktischen Zuckers hinzu, um den Prozess der Entwicklung zu vereinfachen. Die Entwickler können sich auf die Implementierung der Geschäftslogik konzentrieren, anstatt den Boilerplate-Code zu schreiben. Die Services mit hohen Performance-Anforderungen wurden jedoch in Java mit Spring Boot geschrieben.

Die Kundenanwendungen (für Browser oder Smartphone) senden die Anfragen nicht direkt an die Services, sondern nur über API Gateway. Wir haben es in RxJava implementiert, um die gleichzeitige Ausführung von mehreren unabhängigen Anfragen zu ermöglichen.

Um mit anderen Diensten in der verteilten Systemumgebung interagieren zu können, muss der Dienst den Standort von anderen Diensten «kennen». Apache ZooKeeper wird als Service-Register und als eine Datenbank der verfügbaren Service-Instanzen verwendet. Die Dienste verwenden den Java-Client, um eine Verbindung mit Apache ZooKeeper herzustellen, um den Netzwerkstandort von den Microservices zu verfolgen.

Beschreibung 

Zugehörige Fallbeispiele