Sobes.tech
Middle

Čo je gRPC?

sobes.tech AI

Odpoveď od AI

gRPC je vysoko výkonný, open-source rámec RPC (Remote Procedure Call), ktorý vyvinula spoločnosť Google, na vytváranie distribuovaných aplikácií a mikroslužieb. Je založený na protokole HTTP/2 pre prenos a používa Protocol Buffers (Protobuf) ako jazyk na opis rozhrania a mechanizmus serializácie.

Kľúčové vlastnosti gRPC:

  • HTTP/2: Využíva výhody HTTP/2, ako je multiplexovanie požiadaviek, kompresia hlavičiek a obojsmerný tok, čo zabezpečuje vyšší výkon v porovnaní s bežnými klient-server protokolmi nad HTTP/1.1.
  • Protocol Buffers (Protobuf): Jazyk na opis dát, ktorý umožňuje štruktúrovanie dát a generovanie kódu pre serializáciu a deserializáciu v rôznych jazykoch.
  • Streaming: Podporuje štyri typy streamovania:
    • Unary: Klasický RPC (jeden požiadavok - jedna odpoveď).
    • Server-side Streaming: Klient odošle požiadavku, server odpovie tokom správ.
    • Client-side Streaming: Klient odošle tok správ, server odpovie jednou správou.
    • Obojsmerné streamovanie: Klient a server si súčasne vymieňajú toky správ.
  • Viacjazyčnosť: S pomocou Protobuf generuje gRPC klientsky a serverový kód pre viacero jazykov programovania.
  • Generovanie kódu: Automaticky sa vytvára kód pre klienta a server na základe .proto súboru, čím sa znižuje potreba manuálneho kódovania.
  • Metadáta: Podpora prenosu metadát (kľúč-hodnota párov) spolu so žiadosťami a odpoveďami.
  • Interceptors: Možnosť zachytiť požiadavky a odpovede na vykonanie dodatočnej logiky (napríklad logovanie, autentifikácia).

Ako gRPC funguje:

  1. Definuje sa služba API pomocou jazyka Protocol Buffers v .proto súbore.
  2. Pomocou prekladača protoc sa generuje klientsky a serverový kód v požadovanom jazyku.
  3. Server implementuje vygenerované rozhranie služby.
  4. Klient používa vygenerovaný kód na volanie metód služby na serveri.

Príklad .proto súboru:

syntax = "proto3";

package greeting;

// Definícia služby
service Greeter {
  // Unary RPC metóda
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Server-side streaming
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Definícia správ
message HelloRequest {
  string name = 1; // Pole s poradovým číslom 1
}

message HelloReply {
  string message = 1;
}

Porovnanie s REST (použitím JSON/XML):

Charakteristika gRPC (Protobuf) REST (JSON/XML)
Transportný protokol HTTP/2 HTTP/1.1 alebo HTTP/2
Serializácia dát Protobuf (binárny) JSON, XML (textový)
Výkon Vysoký (binárny formát, HTTP/2) Nižší (textový formát, režie)
Jazyk na opis API Protocol Buffers (.proto) OpenAPI/Swagger
Zmluva o API Prísna, založená na Protobuf Menej prísna
Typovanie dát Prísne (definované v .proto) Slabé (kontrola za behu)
Generovanie kódu Vstavané Vyžaduje externé nástroje
Streamovanie Vstavané Vyžaduje dodatočné mechanizmy (napr. WebSockets)
Čitateľnosť Ťažko čitateľné bez .proto Jednoducho čitateľné človekom

gRPC je veľmi vhodný pre komunikáciu medzi službami v distribuovaných systémoch, mikroslužbách, prenos veľkého objemu dát, kde sú dôležité výkon a prísna zmluva API.