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:
- Define-se o serviço API usando a linguagem Protocol Buffers num ficheiro
.proto. - Gera-se código cliente e servidor na linguagem desejada usando o compilador
protoc. - O servidor implementa a interface do serviço gerada.
- 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.