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:
- Definuje se služba API pomocí jazyka Protocol Buffers v souboru
.proto. - Pomocí překladače
protocse generuje klientský a serverový kód v požadovaném jazyce. - Server implementuje vygenerované rozhraní služby.
- 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.