Sobes.tech
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 .proto fá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:

  1. A .proto nyelvet használva definiáljuk az API szolgáltatást.
  2. A protoc fordító segítségével generálunk kliens- és szerverkódot a kívánt nyelven.
  3. A szerver megvalósítja a generált interfészt.
  4. 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.