Wie gRPC für Ordnung in der Microservice-Kommunikation sorgt
Stellen Sie sich vor, Sie bauen ein komplexes System, in dem ein Dutzend Dienste in verschiedenen Sprachen ständig Daten austauschen müssen. Normalerweise greifen wir zu bewährtem REST, schreiben eine Menge JSON-Schemata und kämpfen dann mit Typisierung und Performance. Irgendwann wird Ihnen klar: CPU-Ressourcen für das Packen und Entpacken von Text aufzuwenden ist ein zweifelhafter Spaß. Genau hier kommt gRPC ins Spiel.
Was ist das eigentlich
Kurz gesagt, gRPC ist ein modernes Framework für Remote Procedure Calls. Es wurde von Google entwickelt, um das Problem der effizienten Kommunikation zwischen Tausenden interner Dienste zu lösen. Das Hauptmerkmal ist, dass der Aufruf einer Funktion auf einem anderen Server für Ihren Code fast genauso aussieht wie der Aufruf einer lokalen Methode.
Das Projekt befindet sich im grpc/grpc Repository und kombiniert Implementierungen für C++, Python, Ruby und andere Sprachen, die um einen gemeinsamen C-Kern herum aufgebaut sind.
Warum Sie umsteigen sollten
Als ich gRPC zum ersten Mal in einem echten Projekt ausprobierte, war das, was mich am meisten beeindruckte, nicht die Geschwindigkeit, sondern der strikte Vertrag.
Vertrag an erster Stelle
Bei gRPC beginnen Sie nicht mit Code, sondern mit einer Schnittstellenbeschreibung in .proto-Dateien. Sie beschreiben Datenstrukturen und Methoden klar und deutlich. Aus dieser Datei generiert ein spezieller Compiler Client- und Server-Code in der gewünschten Sprache. Keine Diskussionen mehr darüber, ob ein Datum als String oder Zahl übergeben werden soll — alles ist im Schema festgelegt.
Geschwindigkeit und binäres Format
Anstatt sperriges JSON über das Netzwerk zu schicken, verwendet gRPC Protocol Buffers (Protobuf). Dies ist ein binäres Format, das viel kompakter ist und schneller geparst wird. Bei mobilen Anwendungen oder hochbelasteten Backends wird der Unterschied im Datenverkehr und CPU-Verbrauch ziemlich schnell spürbar.
Streaming serienmäßig
REST ist immer „Anfrage-Antwort". gRPC ermöglicht Ihnen tolle Dinge:
- Client-Streaming (Senden eines Datenstroms an den Server).
- Server-Streaming (Server sendet einen Strom von Updates).
- Bidirektionales Streaming (Vollduplex).
Das ist perfekt für Chats, Überwachungssysteme oder die Übertragung großer Dateien in Stücken.
Wie es unter der Haube funktioniert
Das Repository basiert auf src/core — einer gemeinsamen C-Bibliothek. Wrapper für bestimmte Sprachen werden darum herum gewickelt. Interessanterweise sind einige Implementierungen, wie für Go oder Java, in separaten Repositories untergebracht, um besser in die Ökosysteme dieser Sprachen zu passen.
gRPC arbeitet auf Basis von HTTP/2. Dies ermöglicht Multiplexing (viele Anfragen in einer Verbindung) und Header-Komprimierung. Wenn Sie es gewohnt sind, Anfragen über curl zu debuggen, müssen Sie hier ein wenig umlernen, da die Daten im Kanal ohne spezielle Werkzeuge für Menschen nicht lesbar sind.
Wo man das einsetzt
Ich würde nicht empfehlen, gRPC überall einzusetzen. Wenn Sie zum Beispiel eine öffentliche API für Drittanbieter-Entwickler erstellen, ist REST wegen seiner Einfachheit immer noch der De-facto-Standard.
Aber gRPC ist in zwei Fällen unverzichtbar:
- Interne Microservice-Küche. Wenn es viele Dienste gibt, die ständig miteinander kommunizieren. Typisierung und Code-Generierung sparen Wochen der Entwicklung.
- Polyglotte Architektur. Wenn Sie Analytik in Python, Haupt-Backend in Go und speicherkritische Teile in C++ haben, wird gRPC sie nahtlos verbinden.
Wo man anfängt zu lernen
Das Repository enthält einen ausgezeichneten examples-Ordner. Es enthält Beispiele vom klassischen „Hello World
Ähnliche Projekte