//Cloudogu EcoSystem Docs

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.

Schaubild Client-Server-Struktur

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.