Architektur des cesappd
Der Dienst cesappd
stellt Host-Schnittstelle bereit, die von verschiedenen Clients angesteuert werden kann, allen voran: Dogus.
gRPC
cesappd
verwendet aus Protocol Buffer generiertes gRPC um Schnittstellen für andere Anwendungen bereitzustellen. gRPC zeichnet sich durch seine gute Performance und geringen Overhead bei der Kommunikation aus.
Die gRPC-Dienste werden mittels proto
-Dateien definiert und mithilfe des Protobuf-Compilers protoc
Quellcode daraus
generiert. Der generierte Quellcode enthält die grundlegenden Strukturen für die Implementierung der Client- und Server-
Anwendungen, nämlich Services und Messages.
Client und Server kommunizieren in einem binären Format, das nicht gut von Menschen gelesen werden kann. Unterstützend können dafür Clients wie beispielsweise grpcox verwendet werden, die die Nachrichten in das JSON-Format übersetzen.
Ein gRPC-Server kann verschiedene Dienste bereitstellen, die jeweils getrennt in den proto
-Dateien beschrieben werden.
Die unterschiedlichen Dienste werden am gRPC-Server registriert und stehen somit unter demselben Endpunkt zur Verfügung.
Repository-Struktur
Die Schnittstellen, die mittels .proto
-Dateien definiert werden, befinden sich, zusammen mit dem generierten Quellcode
in einem eigenen Package von cesappd
.
Clients binden cesappd
als Bibliothek ein und erhalten somit Zugriff auf den generierten Client-Code, um mit dem
Server kommunizieren zu können.
Dieses Vorgehen hat den Vorteil, dass nicht bei jeder Änderung an Client- oder Server-Code ein neues Release für ein zusätzliches cesappd-Protobuf-Repository erstellt werden muss. Als Nachteil ergibt sich vor allem, dass es umständlicher ist, weitere Programmiersprachen für die Client-Implementierung zu unterstützen. Es ist aber nicht schwer, die Schnittstellendefinitionen zukünftig in ein extra cesappd-Protobuf-Repository auszulagern, wenn eine andere Sprache als Golang verwendet wird.
Client-Server-Struktur
Der von cesappd
gestartete gRPC-Server stellt Endpunkte bereit, die von den Clients konsumiert werden können. Für
jeden Dienst steht eine eigene Client- und Server-Implementierung zur Verfügung. Der Server kann also mehrere Dienste
beinhalten, die die Clients gezielt ansprechen können.
Im nachfolgenden Schaubild wird grob die Client-Server-Struktur veranschaulicht.
Darin bietet cesappd
verschiedene Dienste für beispielsweise Logging und Monitoring an. Diese
Dienste werden in diesem Beispiel jeweils von anderen Client-Anwendungen angesprochen. Möchte ein Client mehrere Dienste
ansprechen, muss der jeweils dafür vorgesehene Client verwendet werden.