Sobes.tech
Middle

Kas ir gRPC?

sobes.tech AI

Atbilde no AI

gRPC ir augstas veiktspējas, atvērta koda attālinātas procedūras izsaukšanas (RPC) ietvars, ko izstrādājis Google, lai izveidotu izplatītas lietojumprogrammas un mikroservisus. Tas balstās uz HTTP/2 protokolu un izmanto Protocol Buffers (Protobuf) kā saskarnes apraksta valodu un serializācijas mehānismu:

gRPC galvenās īpašības:

  • HTTP/2: Izmanto HTTP/2 priekšrocības, piemēram, daudzlīmeņu pieprasījumu multiplexing, galvenes saspiešanu un divvirzienu straumes pārraidi, nodrošinot augstāku veiktspēju nekā parastie klienta-servera protokoli ar HTTP/1.1:
  • Protocol Buffers (Protobuf): Datu apraksta valoda, kas ļauj strukturēt datus un ģenerēt kodu serializācijai un deserializācijai dažādās programmēšanas valodās. Protobuf ir efektīvs izmēra un ātruma ziņā:
  • Straumes pārraide (Streaming): Atbalsta četrus straumes pārraides tipus:
    • Unary: Klasisks RPC (viens pieprasījums - viens atbilde):
    • Server-side Streaming: Klients sūta pieprasījumu, serveris atbild ar straumi:
    • Client-side Streaming: Klients sūta straumes ziņojumus, serveris atbild ar vienu ziņojumu:
    • Bidirectional Streaming: Klients un serveris vienlaikus apmainās ar ziņojumu straumēm:
  • Daudzvalodu: Ar Protobuf palīdzību gRPC ģenerē klienta un servera kodu vairākās programmēšanas valodās:
  • Koda ģenerēšana: Automātiski ģenerē kodu no .proto faila, samazinot manuālo kodēšanu:
  • Metadati: Atbalsta metadatu pārraidi (atslēga-vērtība pāri) kopā ar pieprasījumiem un atbildēm:
  • Interceptors: Iespēja iejaukties pieprasījumos un atbildēs, īstenojot papildu loģiku (piemēram, žurnālu, autentifikāciju):

Kā darbojas gRPC:

  1. API definēšana, izmantojot Protocol Buffers valodu .proto failā:
  2. Ģenerē klienta un servera kodu nepieciešamajā valodā ar protoc kompilatoru:
  3. Serveris īsteno ģenerēto pakalpojuma interfeisu:
  4. Klients izmanto ģenerēto kodu, lai izsauktu servera metodes:

.proto faila piemērs:

syntax = "proto3";

package greeting;

// Pakalpojuma definīcija
service Greeter {
  // Viena pieprasījuma - viena atbilde RPC metode
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Servera straumes metode
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Ziņojumu definīcija
message HelloRequest {
  string name = 1; // Lauka numurs 1
}

message HelloReply {
  string message = 1;
}

Salīdzinājums ar REST (izmantojot JSON/XML):

Īpašība gRPC (Protobuf) REST (JSON/XML)
Transporta protokols HTTP/2 HTTP/1.1 vai HTTP/2
Datu serializācija Protobuf (binārs) JSON, XML (teksts)
Veiktspēja Augsta (binārs formāts, HTTP/2) Zemāka (teksts, papildu izmaksas)
API apraksta valoda Protocol Buffers (.proto faili) OpenAPI/Swagger
API līgums Stingrs, balstīts uz Protobuf Mazāk stingrs
Datu tipizācija Stingra (noteikta .proto-ā) Vājāka (izpildes laikā pārbaude)
Koda ģenerēšana Iekļauta (standarta) Prasa trešo pušu rīkus
Straumes pārraide Iekļauta Prasa papildu mehānismus (piemēram, WebSockets)
Lasāmība Grūti lasīt bez .proto Viegli cilvēkam lasīt

gRPC ir labi piemērots starpservisa mijiedarbībai izplatītās sistēmās, mikrosistēmās, lielu datu pārraidē, kur svarīga ir veiktspēja un stingrs API līgums.