Sobes.tech
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:

  1. Se definește serviciul API folosind limbajul Protocol Buffers în fișierul .proto.
  2. Se generează codul client și server pentru limbajul dorit cu ajutorul compilatorului protoc.
  3. Serverul implementează interfața generată a serviciului.
  4. 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.