© fewerton/shutterstock.com, © S&S Media
gRPC Services mit Go entwickeln

Go for gRPC?


Die meisten Personen, die an APIs für Microservices denken, denken als Erstes an HTTP-basierende RESTful Web Services. Das REST-Paradigma ist das vorherrschende, wenn es um öffentlich im Internet verfügbare Services geht, mit denen viele Entwicklungsteams zu tun haben. Es passt auch recht gut, wenn sich die Problemstellung im weitesten Sinne auf CRUD-Dienste (Create, Read, Update, Delete) zurückführen lässt. In der Praxis passt REST aber nicht zu jedem Problem.

gRPC ist ein allgemeineres Protokoll, mit dem beliebige Funktionen über Prozess- oder Netzwerkgrenzen hinweg aufgerufen werden können. In diesem Artikel beschreibe ich, wie man mit der Programmiersprache Go effiziente gRPC Services entwickelt, die problemlos von anderen Plattformen wie .NET und C# erreichbar sind.

Warum gRPC und nicht REST?

Viele Microservices kümmern sich nicht um das Speichern von Daten in Datenbanken, sondern bieten andersartige Funktionen an. Entsprechend schwierig ist es, sie in das Korsett von REST zu zwängen. Ist das Aktivieren einer Heizfunktion bei einem IoT-Device ein Insert oder Update? Wie passt ein Service zum Neustarten einer VM in das Konzept von REST? Wie modelliert man einen Service zum Versenden von SMS-Nachrichten, sodass das API von anderen leicht verstanden werden kann? Das Konzept von RPC ist uralt und allgemeiner als REST. Alle Operationen werden auf eine Sammlung von Kommandos zurückgeführt, die Parameter erhalten und das Ergebnis zurückgeben.

Vorteil dieses generischen Ansatzes ist, dass er auf eine größere Anzahl an Problemstellungen anwendbar ist, ohne diese in ein schlecht passendes Architekturprinzip pressen zu müssen. Der Nachteil ist, dass jede RPC-Schnittstelle anders modelliert sein kann, während RESTful APIs – wo sie konzeptionell passen – einheitlicher und daher leichter zu verstehen und zu nutzen sind. In der Praxis empfehle ich, Diskussionen über das eine oder das andere zu vermeiden. Es spricht nichts dagegen, im Zweifelsfall einen Cloud-Service mit einem RESTful API und einem gRPC API anzubieten. Die Logik im Hintergrund sollte die gleiche sein, nur das Kommunikationsprotokoll kann vom Nutzer je nach Technologie und Anwendungsfall gewählt werden.

Natürlich unterscheidet sich ein modernes RPC-System wie gRPC deutlich von seinen Urahnen aus den 70er Jahren des letzten Jahrhunderts. Es ist viel mächtiger geworden und unterstützt beispielsweise die effiziente Übertragung komplexer Datenstrukturen mit Hilfe von Protocol Buffers (ProtoBuf [1]) sowi...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang