Sobes.tech
Middle

Co je to gRPC?

sobes.tech AI

Odpověď od AI

gRPC je vysoce výkonný, open-source rámec RPC (Remote Procedure Call), který byl vyvinut společností Google, pro vytváření distribuovaných aplikací a mikroslužeb. Je založen na protokolu HTTP/2 pro přenos a používá Protocol Buffers (Protobuf) jako jazyk popisu rozhraní a mechanismus serializace.

Klíčové vlastnosti gRPC:

  • HTTP/2: Využívá výhod HTTP/2, jako je multiplexování požadavků, komprese hlaviček a obousměrný proudový přenos, což zajišťuje vyšší výkon ve srovnání s běžnými klient-server protokoly nad HTTP/1.1.
  • Protocol Buffers (Protobuf): Jazyk popisu dat, který umožňuje strukturovat data a generovat kód pro serializaci a deserializaci v různých jazycích.
  • Streaming: Podporuje čtyři typy streamování:
    • Unary: Klasická RPC (jeden požadavek - jedna odpověď).
    • Server-side Streaming: Klient odešle požadavek, server odpoví proudem zpráv.
    • Client-side Streaming: Klient odešle proud zpráv, server odpoví jednou zprávou.
    • Obousměrné streamování: Klient a server si současně vyměňují proudy zpráv.
  • Multijazyčnost: Pomocí Protobuf generuje gRPC klientský a serverový kód pro mnoho programovacích jazyků.
  • Generování kódu: Automatické vytváření kódu pro klienta a server na základě souboru .proto, což snižuje potřebu ručního kódování.
  • Metadata: Podpora přenosu metadat (klíč-hodnota páry) spolu s požadavky a odpověďmi.
  • Interceptors: Možnost zachytit požadavky a odpovědi pro provádění dodatečné logiky (například logování, autentifikace).

Jak gRPC funguje:

  1. Definuje se služba API pomocí jazyka Protocol Buffers v souboru .proto.
  2. Pomocí překladače protoc se generuje klientský a serverový kód v požadovaném jazyce.
  3. Server implementuje vygenerované rozhraní služby.
  4. Klient používá vygenerovaný kód k volání metod služby na serveru.

Příklad souboru .proto:

syntax = "proto3";

package greeting;

// Definice služby
service Greeter {
  // Unary RPC metoda
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Server-side streaming
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Definice zpráv
message HelloRequest {
  string name = 1; // Pole s pořadovým číslem 1
}

message HelloReply {
  string message = 1;
}

Porovnání s REST (použitím JSON/XML):

Charakteristika gRPC (Protobuf) REST (JSON/XML)
Transportní protokol HTTP/2 HTTP/1.1 nebo HTTP/2
Serializace dat Protobuf (binární) JSON, XML (textový)
Výkon Vysoký (binární formát, HTTP/2) Nižší (textový formát, režie)
API popisovací jazyk Protocol Buffers (.proto) OpenAPI/Swagger
API kontrakt Přísný, založený na Protobuf Méně přísný
Typování dat Přísné (definováno v .proto) Slabé (kontrola za běhu)
Generování kódu Vestavěné Vyžaduje externí nástroje
Streamování Vestavěné Vyžaduje dodatečné mechanismy (např. WebSockets)
Čitelnost Těžko čitelné bez .proto Snadno čitelné člověkem

gRPC je velmi vhodné pro komunikaci mezi službami v distribuovaných systémech, mikroslužbách, přenos velkého objemu dat, kde je důležitý výkon a přísná smlouva API.