Sobes.tech
Middle

Šta je gRPC?

sobes.tech АИ

Одговор од АИ

gRPC je visokoperformansni, open-source okvir za RPC (Remote Procedure Call), koji je razvio Google, za kreiranje distribuiranih aplikacija i mikrousluga. Osnovan je na protokolu HTTP/2 za transport i koristi Protocol Buffers (Protobuf) kao jezik za opis interfejsa i mehanizam serijalizacije.

Ključne osobine gRPC:

  • HTTP/2: Koristi prednosti HTTP/2, kao što su multipleksiranje zahteva, kompresija zaglavlja i dvostruki tok, što obezbeđuje viši performans u poređenju sa običnim klijent-server protokolima preko HTTP/1.1.
  • Protocol Buffers (Protobuf): Jezik za opis podataka koji omogućava strukturiranje podataka i generisanje koda za serijalizaciju i deserializaciju na različitim jezicima.
  • Streaming: Podržava četiri tipa streaminga:
    • Unary: Klasični RPC (jedan zahtev - jedan odgovor).
    • Server-side Streaming: Klijent šalje zahtev, server odgovara tokom poruka.
    • Client-side Streaming: Klijent šalje tok poruka, server odgovara jednom porukom.
    • Obostrani streaming: Klijent i server razmenjuju tokove poruka istovremeno.
  • Višejzičnost: Uz pomoć Protobuf, gRPC generiše klijentski i serverski kod za više jezika programiranja.
  • Generisanje koda: Automatski se kreira kod za klijenta i server na osnovu .proto fajla, čime se smanjuje potreba za ručnim kodiranjem.
  • Metapodaci: Podrška za prenos metapodataka (parova ključ-vrednost) zajedno sa zahtevima i odgovorima.
  • Interceptors: Mogućnost presretanja zahteva i odgovora za izvršavanje dodatne logike (npr. logovanje, autentifikacija).

Kako funkcioniše gRPC:

  1. Definiše se API usluga koristeći jezik Protocol Buffers u .proto fajlu.
  2. Generiše se klijentski i serverski kod pomoću kompilatora protoc.
  3. Server implementira generisani interfejs usluge.
  4. Klijent koristi generisani kod za pozivanje metoda usluge na serveru.

Primer .proto fajla:

syntax = "proto3";

package greeting;

// Definisanje usluge
service Greeter {
  // Unary RPC metoda
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Server-side streaming
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Definisanje poruka
message HelloRequest {
  string name = 1; // Polje sa rednim brojem 1
}

message HelloReply {
  string message = 1;
}

Uporedba sa REST-om (korišćenjem JSON/XML):

Karakteristika gRPC (Protobuf) REST (JSON/XML)
Transportni protokol HTTP/2 HTTP/1.1 ili HTTP/2
Serijalizacija podataka Protobuf (binarni) JSON, XML (tekstualni)
Performanse Visoke (binarni format, HTTP/2) Niže (tekstualni format, troškovi)
Jezik za opis API-ja Protocol Buffers (.proto) OpenAPI/Swagger
Ugovor o API-ju Strogi, zasnovan na Protobuf Manje strog
Tipizacija podataka Stroga (definisana u .proto) Slaba (provera u runtime-u)
Generisanje koda Ugrađeno Zahteva spoljne alate
Streamovanje Ugrađeno Zahteva dodatne mehanizme (npr. WebSockets)
Čitljivost Teško za čitanje bez .proto Lako za čitanje od strane čoveka

gRPC je veoma pogodan za međuslužnu komunikaciju u distribuiranim sistemima, mikrouslužbama, prenos velikog volumena podataka, gde su važni performanse i strogi ugovor o API-ju.