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
.protofailist, 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:
- API määratletakse Interface Buffers keeles
.protofailis: - Genereeritakse kliendi ja serveri kood vajalikes keeltes
protockompilaatoriga: - Server rakendab genereeritud teenuse liidest:
- 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.