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
.protosú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:
- Definuje sa služba API pomocou jazyka Protocol Buffers v
.protosúbore. - Pomocou prekladača
protocsa generuje klientsky a serverový kód v požadovanom jazyku. - Server implementuje vygenerované rozhranie služby.
- 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.