Bei gRPC ruft eine Clientanwendung direkt eine Methode auf einem Server auf einer anderen Maschine auf, als wäre sie ein lokales Objekt. Wie viele RPC-Systeme basiert gRPC darauf, einen Service zu definieren: die aufrufbaren Methoden samt Parametern und Rückgabetypen. Der Server implementiert diese Schnittstelle, der Client besitzt einen sogenannten Stub mit denselben Methoden.
Als Schnittstellensprache (IDL) und als Austauschformat nutzt gRPC standardmäßig Protocol Buffers. Die Struktur wird in einer Textdatei mit Endung .proto beschrieben, aufgebaut aus message-Records mit nummerierten Feldern. Der Proto-Compiler erzeugt daraus zur Build-Zeit nativen Code für viele Sprachen, sodass etwa ein Java-Server mit Clients in Go, Python oder Ruby sprechen kann.
gRPC läuft über HTTP/2 und kennt vier Aufruftypen:
- Unary: eine Anfrage, eine Antwort, wie ein normaler Funktionsaufruf.
- Server-Streaming: der Client sendet eine Anfrage und liest einen Strom von Antworten.
- Client-Streaming: der Client sendet eine Folge von Nachrichten, der Server antwortet einmal.
- Bidirektionales Streaming: beide Seiten senden unabhängig über einen Lese-Schreib-Strom; die Nachrichtenreihenfolge innerhalb eines Aufrufs bleibt garantiert.
Vorteile: hohe Performance durch das kompakte Binärformat (laut protobuf.dev kleiner und schneller als JSON), automatische Codegenerierung mit starker Typisierung und natives Streaming. Nachteile: die Daten sind binär und damit nicht menschenlesbar, der direkte Browser-Support ist eingeschränkt (gRPC-Web als Zwischenschicht nötig), und Protocol Buffers eignen sich laut Doku nicht gut für sehr große Nutzlasten jenseits einiger Megabyte. Typischer Einsatz sind daher interne Microservices, wo Geschwindigkeit und feste Verträge wichtiger sind als Lesbarkeit.
service HelloService {
rpc SayHello (HelloRequest) returns (HelloResponse);
}
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}Knappe .proto-Definition: ein Service mit einer Unary-Methode sowie Anfrage- und Antwortnachricht (Quelle: gRPC Core concepts).
Quellen
- Introduction to gRPC gRPC
- Core concepts, architecture and lifecycle gRPC
- Protocol Buffers Overview Protocol Buffers Documentation