Middle
Ce este gRPC?
sobes.tech AI
Răspuns de la AI
gRPC - este un cadru RPC (Remote Procedure Call) open-source, de înaltă performanță, dezvoltat de Google, pentru crearea de aplicații distribuite și microservicii. Se bazează pe protocolul HTTP/2 pentru transport și utilizează Protocol Buffers (Protobuf) ca limbaj de descriere a interfeței și mecanism de serializare.
Caracteristici cheie ale gRPC:
- HTTP/2: Utilizează avantajele HTTP/2, precum multiplexarea cererilor, comprimarea antetelor și transferul bidirecțional de fluxuri, asigurând o performanță mai mare comparativ cu protocoalele client-server obișnuite peste HTTP/1.1.
- Protocol Buffers (Protobuf): Limbaj de descriere a datelor, care permite structurarea datelor și generarea de cod pentru serializare și deserializare în diferite limbaje.
- Transmisie în flux (Streaming): Suportă patru tipuri de streaming:
- Unary: RPC clasic (o cerere - un răspuns).
- Streaming pe server: Clientul trimite o cerere, serverul răspunde cu un flux de mesaje.
- Streaming pe client: Clientul trimite un flux de mesaje, serverul răspunde cu un singur mesaj.
- Streaming bidirecțional: Clientul și serverul schimbă fluxuri de mesaje simultan.
- Multilingv: Cu ajutorul Protobuf, gRPC generează cod client și server pentru multiple limbaje de programare.
- Generare de cod: Creare automată de cod pentru client și server pe baza fișierului
.proto, reducând necesitatea de programare manuală. - Metadate: Suport pentru transmiterea de metadate (perechi cheie-valoare) împreună cu cererile și răspunsurile.
- Interceptors: Posibilitatea de a intercepta cererile și răspunsurile pentru a executa logică suplimentară (ex. logare, autentificare).
Cum funcționează gRPC:
- Se definește serviciul API folosind limbajul Protocol Buffers în fișierul
.proto. - Se generează codul client și server pentru limbajul dorit cu ajutorul compilatorului
protoc. - Serverul implementează interfața generată a serviciului.
- Clientul folosește codul generat pentru a apela metodele serviciului pe server.
Exemplu de fișier .proto:
syntax = "proto3";
package greeting;
// Definirea serviciului
service Greeter {
// Metodă RPC unary
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Metodă streaming pe server
rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}
// Definirea mesajelor
message HelloRequest {
string name = 1; // Câmp cu numărul de ordine 1
}
message HelloReply {
string message = 1;
}
Comparatie cu REST (folosind JSON/XML):
| Caracteristică | gRPC (Protobuf) | REST (JSON/XML) |
|---|---|---|
| Protocol de transport | HTTP/2 | HTTP/1.1 sau HTTP/2 |
| Serializare date | Protobuf (binara) | JSON, XML (text) |
| Performanță | Ridicată (format binar, HTTP/2) | Inferioară (format text, overhead) |
| Limbaj de descriere API | Protocol Buffers (.proto) |
OpenAPI/Swagger |
| Contract API | Strict, bazat pe Protobuf | Mai puțin strict |
| Tipizare date | Strictă (se definește în .proto) |
Slabă (verificare la runtime) |
| Generare de cod | Încorporată | Necesită instrumente terțe |
| Streaming | Încorporat | Necesită mecanisme suplimentare (ex. WebSockets) |
| Lisibilitate | Dificil de citit fără .proto |
Ușor de citit de oameni |
gRPC este foarte potrivit pentru interacțiunea între servicii în sistemele distribuite, microservicii, transferul unui volum mare de date, unde performanța și contractul strict al API-ului sunt importante.