Sobes.tech
Middle

Mis on gRPC?

sobes.tech AI

Vastus AI-lt

gRPC on kõrge jõudlusega, avatud lähtekoodiga kaugkutsumise (RPC) raamistik, mille on välja töötanud Google, et luua hajutatud rakendusi ja mikroteenuseid. See põhineb HTTP/2 protokollil ja kasutab Interface Buffers (Protobuf) kui liidese kirjelduse keelt ja serialiseerimismehhanismi:

gRPC peamised omadused:

  • HTTP/2: Kasutab HTTP/2 eeliseid, nagu päringute multipleximine, päiste tihendamine ja kahepoolne voogedastus, pakkudes kõrgemat jõudlust võrreldes tavaliste kliendi-teenuse protokollidega HTTP/1.1 peal:
  • Protocol Buffers (Protobuf): Andmete kirjeldamise keel, mis võimaldab andmeid struktureerida ja genereerida koodi serialiseerimiseks ja deserialiseerimiseks erinevates keeltes. Protobuf on tõhus suuruse ja kiiruse osas:
  • Voogedastus (Streaming): toetab nelja tüüpi voogedastust:
    • Unary: Klassikaline RPC (üks päring - üks vastus):
    • Server-side Streaming: Klient saadab päringu, server vastab voogedastusega:
    • Client-side Streaming: Klient saadab voogedastuse sõnumeid, server vastab ühe sõnumiga:
    • Bidirectional Streaming: Klient ja server vahetavad sõnumi voogusid samaaegselt:
  • Mitmekeelne: Protobuf abil genereerib gRPC kliendi ja serveri koodi mitmes programmeerimiskeeles:
  • Koodi genereerimine: automaatselt genereerib koodi .proto failist, vähendades käsitsi koodi kirjutamist:
  • Metadatas: toetab metadatat (võti-väärtus paarid) koos päringute ja vastustega:
  • Interceptors: võimaldab sekkuda päringutesse ja vastustesse, täiendava loogika rakendamiseks (näiteks logimine, autentimine):

Kuidas gRPC töötab:

  1. API määratletakse Interface Buffers keeles .proto failis:
  2. Genereeritakse kliendi ja serveri kood vajalikes keeltes protoc kompilaatoriga:
  3. Server rakendab genereeritud teenuse liidest:
  4. Klient kasutab genereeritud koodi teenuse meetodite kutsumiseks serverile:

.proto faili näide:

syntax = "proto3";

package greeting;

// Teenuse määratlus
service Greeter {
  // Ühe päringu - ühe vastuse RPC meetod
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Serveri voogedastusmeetod
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Sõnumite määratlus
message HelloRequest {
  string name = 1; // Välja järjekorranumber 1
}

message HelloReply {
  string message = 1;
}

Võrdlus REST-iga (kasutades JSON/XML):

Omadus gRPC (Protobuf) REST (JSON/XML)
Transportprotokoll HTTP/2 HTTP/1.1 või HTTP/2
Andmete serialiseerimine Protobuf (binaarne) JSON, XML (tekstiline)
Tõhusus Kõrge (binaarne formaat, HTTP/2) Madalam (tekstiline formaat, lisakulud)
API kirjeldamise keel Protocol Buffers (.proto failid) OpenAPI/Swagger
API leping Range, põhineb Protobuf Vähem range
Andmete tüüpimine Range (määratud .proto-s) Nõrk (jooksuaegne kontroll)
Koodide genereerimine Sisseehitatud (standardselt) Vajab kolmanda osapoogi tööriistu
Voogedastus Sisseehitatud Vajab täiendavaid mehhanisme (näiteks WebSockets)
Lugemine Raske ilma .proto-ta Lihtne inimesele lugeda

gRPC sobib hästi vaheteenuste vahetuseks hajutatud süsteemides, mikroteenustes, suurte andmemahtude edastamisel, kus oluline on jõudlus ja range API leping.