Middle
Mi az a gRPC?
sobes.tech MI
Válasz az MI-től
A gRPC egy magas teljesítményű, nyílt forráskódú RPC (Távoli Eljárás Hívás) keretrendszer, amelyet a Google fejlesztett ki, és elosztott alkalmazások és mikroszolgáltatások létrehozására szolgál. Az HTTP/2 protokollra épül a szállításhoz, és a Protocol Buffers (Protobuf) nyelvet használja az interfész leírására és a sorosítási mechanizmushoz.
A gRPC fő jellemzői:
- HTTP/2: Előnyeit használja, mint például a kérés multiplexelése, fejléc tömörítése és kétirányú streaming, ami magasabb teljesítményt biztosít a szokásos HTTP/1.1 alapú kliens-szerver protokollokhoz képest.
- Protocol Buffers (Protobuf): Adatleíró nyelv, amely lehetővé teszi az adatok strukturálását és kód generálását különböző nyelveken a sorosításhoz és deszerializáláshoz.
- Streaming: Négy típusú streaminget támogat:
- Unary: Klasszikus RPC (egy kérés - egy válasz).
- Server-side streaming: A kliens kér, a szerver pedig egy üzenetfolyammal válaszol.
- Client-side streaming: A kliens egy üzenetfolyamot küld, a szerver pedig egy üzenettel válaszol.
- Kétirányú streaming: A kliens és a szerver egyidejűleg cserél üzenetfolyamokat.
- Többnyelvűség: A Protobuf segítségével a gRPC több programozási nyelvhez generál kliens- és szerverkódot.
- Kódgenerálás: Automatikusan generálódik a
.protofájl alapján, csökkentve a kézi kódolás szükségességét. - Metaadatok: Támogatja a metaadatok (kulcs-érték párok) átadását a kérésekkel és válaszokkal együtt.
- Interceptors: Lehetővé teszi a kérések és válaszok közötti beavatkozást, például naplózás vagy hitelesítés céljából.
A gRPC működése:
- A
.protonyelvet használva definiáljuk az API szolgáltatást. - A
protocfordító segítségével generálunk kliens- és szerverkódot a kívánt nyelven. - A szerver megvalósítja a generált interfészt.
- A kliens a generált kódot használva hívja a szerver szolgáltatásait.
Példa .proto fájl:
syntax = "proto3";
package greeting;
// Szolgáltatás definiálása
service Greeter {
// Unary RPC metódus
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Szerver oldali streaming
rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}
// Üzenetek definiálása
message HelloRequest {
string name = 1; // 1-es sorszámú mező
}
message HelloReply {
string message = 1;
}
Összehasonlítás a REST-vel (JSON/XML használatával):
| Jellemző | gRPC (Protobuf) | REST (JSON/XML) |
|---|---|---|
| Szállítási protokoll | HTTP/2 | HTTP/1.1 vagy HTTP/2 |
| Adatsorozás | Protobuf (bináris) | JSON, XML (szöveg) |
| Teljesítmény | Magas (bináris formátum, HTTP/2) | Alacsonyabb (szöveges formátum, overhead) |
| API leíró nyelv | Protocol Buffers (.proto) |
OpenAPI/Swagger |
| API szerződés | Szigorú, Protobuf alapú | Kevésbé szigorú |
| Adattípusok | Szigorú (meghatározva a .proto-ban) |
Gyenge (futási időben ellenőrzött) |
| Kódgenerálás | Beépített | Külső eszközöket igényel |
| Streaming | Beépített | Kiegészítő mechanizmusokat igényel (pl. WebSockets) |
| Olvashatóság | Nehéz .proto nélkül olvasni |
Könnyű emberi olvasásra |
A gRPC kiválóan alkalmas a szolgáltatások közötti kommunikációra elosztott rendszerekben, mikroszolgáltatásokban, nagy adatmennyiség átvitelében, ahol fontos a teljesítmény és a szigorú API szerződés.