Sobes.tech
Middle

Kas yra gRPC?

sobes.tech AI

Atsakymas iš AI

gRPC – tai aukšto našumo, atviro kodo RPC (Remote Procedure Call) karkasas, kurį sukūrė Google, skirtas paskirstytoms programoms ir mikrosistemoms kurti. Jis pagrįstas HTTP/2 protokolu ir naudoja Protocol Buffers (Protobuf) kaip sąsajos aprašymo kalbą ir serializacijos mechanizmą:

gRPC pagrindinės savybės:

  • HTTP/2: Naudoja HTTP/2 pranašumus, tokius kaip užklausų multiplikavimas, antraščių suspaudimas ir dvipusis srautinio perdavimo, užtikrinantį aukštesnį našumą nei įprasti klientas-serveris protokolai su HTTP/1.1:
  • Protocol Buffers (Protobuf): Duomenų aprašymo kalba, leidžianti struktūrizuoti duomenis ir generuoti kodą serializacijai ir deserializacijai įvairiomis kalbomis. Protobuf yra efektyvus dydžio ir greičio požiūriu:
  • Srautinio perdavimo (Streaming): Palaiko keturis srautinio perdavimo tipus:
    • Unary: Klasikinis RPC (vienas užklausimas - vienas atsakymas):
    • Server-side Streaming: Klientas siunčia užklausą, serveris atsako srautu:
    • Client-side Streaming: Klientas siunčia srauto žinutes, serveris atsako viena žinute:
    • Bidirectional Streaming: Klientas ir serveris keičiasi žinučių srautais vienu metu:
  • Daugiakalbystė: Protobuf leidžia gauti klientų ir serverių kodą keliomis programavimo kalbomis:
  • Kodo generavimas: Automatiškai generuoja kodą iš .proto failo, sumažindamas rankinio kodo rašymo kiekį:
  • Metaduomenys: Palaiko metaduomenų perdavimą (raktas-reikšmė poros) kartu su užklausomis ir atsakymais:
  • Interceptors: Leidžia įsikišti į užklausas ir atsakymus, įgyvendinant papildinę logiką (pvz., žurnalavimą, autentifikaciją):

Kaip veikia gRPC:

  1. Apibrėžiamas API naudojant Protocol Buffers kalbą .proto faile:
  2. Generuojamas klientų ir serverių kodas reikiama kalba naudojant protoc kompiliatorių:
  3. Serveris įgyvendina sugeneruotą paslaugos sąsają:
  4. Klientas naudoja sugeneruotą kodą, kad iškviestų serverio metodus:

.proto failo pavyzdys:

syntax = "proto3";

package greeting;

// Paslaugos apibrėžimas
service Greeter {
  // Vieno užklausimo - vieno atsakymo RPC metodas
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Serverio srauto metodas
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Žinučių apibrėžimai
message HelloRequest {
  string name = 1; // Lauko numeris 1
}

message HelloReply {
  string message = 1;
}

Palyginimas su REST (naudojant JSON/XML):

Savybė gRPC (Protobuf) REST (JSON/XML)
Transporto protokolas HTTP/2 HTTP/1.1 arba HTTP/2
Duomenų serializacija Protobuf (dvivietis) JSON, XML (teksto)
Našumas Aukštas (dvivietis formatas, HTTP/2) Žemesnis (teksto formatas, papildomi kaštai)
API aprašymo kalba Protocol Buffers (.proto failai) OpenAPI/Swagger
API sutartis Griežta, remiasi Protobuf Mažiau griežta
Duomenų tipizacija Griežta (nustatyta .proto) Silpna (vykdymo metu tikrinama)
Kodo generavimas Integruotas (standartinis) Reikalauja trečiųjų šalių įrankių
Srautinio perdavimo Integruotas Reikia papildomų mechanizmų (pvz., WebSockets)
** Skaitymas** Sunku skaityti be .proto Lengva žmogui skaityti

gRPC gerai tinka tarpaslaugų sąveikai paskirstytose sistemose, mikrosistemose, didelių duomenų perdavimui, kur svarbus našumas ir griežtas API sutartis.