Sobes.tech
Middle

Cos'è gRPC?

sobes.tech AI

Risposta dell'AI

gRPC è un framework open source ad alte prestazioni per chiamate di procedura remota (RPC), sviluppato da Google, per creare applicazioni distribuite e microservizi. Si basa sul protocollo HTTP/2 per il trasporto e utilizza Protocol Buffers (Protobuf) come linguaggio di descrizione delle interfacce e meccanismo di serializzazione.

Caratteristiche principali di gRPC:

  • HTTP/2: Sfrutta i vantaggi di HTTP/2, come multiplexing delle richieste, compressione degli header e streaming bidirezionale, offrendo prestazioni superiori rispetto ai protocolli client-server tradizionali su HTTP/1.1.
  • Protocol Buffers (Protobuf): Linguaggio di descrizione dei dati che permette di strutturare i dati e generare codice per serializzazione e deserializzazione in vari linguaggi. Protobuf è efficiente in termini di dimensione dei messaggi e velocità di elaborazione.
  • Streaming: Supporta quattro tipi di streaming:
    • Unary: RPC classico (una richiesta - una risposta).
    • Streaming lato server: Il client invia una richiesta, il server risponde con un flusso di messaggi.
    • Streaming lato client: Il client invia un flusso di messaggi, il server risponde con un messaggio.
    • Streaming bidirezionale: Client e server scambiano contemporaneamente flussi di messaggi.
  • Multilingue: Con Protobuf, gRPC genera codice client e server per molteplici linguaggi di programmazione.
  • Generazione di codice: Creazione automatica di codice per client e server basata su file .proto, riducendo la codifica manuale.
  • Metadati: Supporto alla trasmissione di metadati (coppie chiave-valore) insieme a richieste e risposte.
  • Interceptors: Possibilità di intercettare richieste e risposte per eseguire logica aggiuntiva (ad esempio, logging, autenticazione).

Come funziona gRPC:

  1. Si definisce il servizio API usando il linguaggio Protocol Buffers in un file .proto.
  2. Viene generato codice client e server nel linguaggio desiderato usando il compilatore protoc.
  3. Il server implementa l'interfaccia del servizio generata.
  4. Il client utilizza il codice generato per chiamare i metodi del servizio sul server.

Esempio di file .proto:

syntax = "proto3";

package greeting;

// Definizione del servizio
service Greeter {
  // Metodo RPC unario
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Metodo di streaming lato server
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Definizione dei messaggi
message HelloRequest {
  string name = 1; // Campo con numero di posizione 1
}

message HelloReply {
  string message = 1;
}

Confronto con REST (che utilizza JSON/XML):

Caratteristica gRPC (Protobuf) REST (JSON/XML)
Protocolo di trasporto HTTP/2 HTTP/1.1 o HTTP/2
Serializzazione dei dati Protobuf (binario) JSON, XML (testo)
Prestazioni Elevate (formato binario, HTTP/2) Inferiori (formato testuale, overhead)
Linguaggio di descrizione API Protocol Buffers (.proto) OpenAPI/Swagger
Contratto API Rigoroso, basato su Protobuf Meno rigoroso
Tipizzazione dei dati Rigorosa (definita in .proto) Debole (controllo a runtime)
Generazione di codice Integrata Richiede strumenti di terze parti
Streaming Integrato Richiede meccanismi aggiuntivi (ad esempio, WebSockets)
Leggibilità Difficile da leggere senza .proto Facile da leggere per gli umani

gRPC è molto adatto per l'interazione tra servizi in sistemi distribuiti, microservizi, trasmissione di grandi volumi di dati, dove sono importanti prestazioni e contratto API rigoroso.