gRPC (Remote Procedure Call)

gRPC je moderní, vysoce výkonný open-source framework pro vzdálené volání procedur (RPC). Byl vyvinut společností Google a je navržen tak, aby umožňoval klientským a serverovým aplikacím komunikovat napříč různými programovacími jazyky (např. C#, Python, Java, Go).

V architektuře mikroslužeb se gRPC stalo standardem pro vysoce efektivní interní komunikaci.

Klíčové technologie

Vysoký výkon gRPC je dán kombinací dvou technologií:

HTTP/2: Na rozdíl od RESTu (který často používá HTTP/1.1) využívá gRPC binární protokol HTTP/2. Ten umožňuje multiplexování (více požadavků v jednom spojení) a obousměrné streamování.

Protocol Buffers (Protobuf): Místo čitelného textu (JSON) používá gRPC binární serializaci. Data jsou díky tomu až o 80 % menší a jejich zpracování je mnohem rychlejší.

Režimy komunikace

gRPC definuje čtyři typy metod (servisů):

Typ	Popis
Unary	Klasický model: Klient pošle jeden požadavek a čeká na jednu odpověď.
Server Streaming	Klient pošle jeden požadavek a server mu posílá proud zpráv (např. živé výsledky).
Client Streaming	Klient posílá proud zpráv a server odpoví jednou souhrnnou zprávou (např. upload souboru).
Bidirectional Streaming	Obě strany posílají data nezávisle na sobě v reálném čase (např. chat nebo telemetrie).

Výhody a nevýhody

Výhody

Vysoký výkon: Ideální pro systémy s nízkou latencí.

Silné typování: Díky souborům `.proto` je kontrakt mezi serverem a klientem pevně daný.

Code Generation: Nástroje automaticky vygenerují kód pro klienta i server v mnoha jazycích.

Nevýhody

Omezená podpora prohlížečů: Prohlížeče zatím plně nepodporují HTTP/2 v míře potřebné pro gRPC (vyžaduje se gRPC-Web).

Nečitelnost pro lidi: Protože jsou zprávy binární, nelze je snadno kontrolovat v běžném textovém editoru.

Příklad definice (.proto)

Veškerá logika gRPC začíná definicí v IDL (Interface Definition Language):

syntax = "proto3";
// Definice služby
service Vypocet {
rpc Secti (SestavaCisel) returns (Vysledek) {}
}
// Definice zpráv
message SestavaCisel {
int32 a = 1;
int32 b = 2;
}
message Vysledek {
int32 soucet = 1;
}

— Související pojmy: Mikroslužby, API, Google