Sobes.tech
Middle

O que é gRPC?

sobes.tech IA

Resposta da IA

gRPC é um framework de código aberto de alto desempenho para chamadas de procedimento remoto (RPC), desenvolvido pelo Google, para criar aplicações distribuídas e microserviços. Baseia-se no protocolo HTTP/2 para transporte e utiliza Protocol Buffers (Protobuf) como linguagem de descrição de interfaces e mecanismo de serialização.

Principais características do gRPC:

  • HTTP/2: Aproveita as vantagens do HTTP/2, como multiplexação de pedidos, compressão de cabeçalhos e transmissão bidirecional, proporcionando melhor desempenho em comparação com protocolos cliente-servidor tradicionais sobre HTTP/1.1.
  • Protocol Buffers (Protobuf): Linguagem de descrição de dados que permite estruturar dados e gerar código para serialização e desserialização em várias linguagens. Protobuf é eficiente em tamanho de mensagens e velocidade de processamento.
  • Transmissão (Streaming): Suporta quatro tipos de streaming:
    • Unary: RPC clássico (uma solicitação - uma resposta).
    • Server-side Streaming: O cliente envia uma solicitação, o servidor responde com um fluxo de mensagens.
    • Client-side Streaming: O cliente envia um fluxo de mensagens, o servidor responde com uma mensagem.
    • Bidirectional Streaming: O cliente e o servidor trocam fluxos de mensagens simultaneamente.
  • Multilíngue: Com Protobuf, o gRPC gera código cliente e servidor para múltiplas linguagens de programação.
  • Geração de código: Criação automatizada de código para cliente e servidor baseado em ficheiros .proto, reduzindo a codificação manual.
  • Metadados: Suporte para transmitir metadados (pares chave-valor) juntamente com pedidos e respostas.
  • Interceptors: Capacidade de interceptar pedidos e respostas para realizar lógica adicional (por exemplo, registo, autenticação).

Como funciona o gRPC:

  1. Define-se o serviço API usando a linguagem Protocol Buffers num ficheiro .proto.
  2. Gera-se código cliente e servidor na linguagem desejada usando o compilador protoc.
  3. O servidor implementa a interface do serviço gerada.
  4. O cliente usa o código gerado para chamar os métodos do serviço no servidor.

Exemplo de ficheiro .proto:

syntax = "proto3";

package greeting;

// Definição do serviço
service Greeter {
  // Método RPC unário
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Método de streaming do lado do servidor
  rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}

// Definição de mensagens
message HelloRequest {
  string name = 1; // Campo com número de ordem 1
}

message HelloReply {
  string message = 1;
}

Comparação com REST (que usa JSON/XML):

Característica gRPC (Protobuf) REST (JSON/XML)
Protocolo de transporte HTTP/2 HTTP/1.1 ou HTTP/2
Serialização de dados Protobuf (binário) JSON, XML (texto)
Desempenho Alto (formato binário, HTTP/2) Menor (formato de texto, sobrecarga)
Linguagem de descrição de API Protocol Buffers (.proto) OpenAPI/Swagger
Contrato API Rigoroso, baseado em Protobuf Menos rigoroso
Tipagem de dados Rigorosa (definida em .proto) Fraca (verificação em tempo de execução)
Geração de código Integrada Requer ferramentas externas
Transmissão em streaming Integrada Requer mecanismos adicionais (por exemplo, WebSockets)
Legibilidade Difícil de ler sem .proto Fácil de ler por humanos

O gRPC é muito adequado para interação entre serviços em sistemas distribuídos, microserviços, transmissão de grandes volumes de dados, onde o desempenho e um contrato API rigoroso são importantes.