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
.protofajla, č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:
- Definiše se API usluga koristeći jezik Protocol Buffers u
.protofajlu. - Generiše se klijentski i serverski kod pomoću kompilatora
protoc. - Server implementira generisani interfejs usluge.
- 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.