Alto Desempenho com gRPC

Letícia Silva
Único
Published in
4 min readMay 5, 2020

A tecnologia usada para fornecer uma API para a sua aplicação é uma escolha importante. Existem alternativas como: SOAP, REST e gRPC. Recentemente, eu desenvolvia APIs REST e considero REST e JSON um grande sucesso.

Estou participando de um projeto onde a integração entre as aplicações é através do gRPC. Tive algumas dúvidas inicialmente: O que é gRPC? Existe algum benefício no uso do gRPC se comparado ao REST?

Este artigo explica as motivações de usarmos gRPC na Acesso Digital.

Fonte: Unsplash

* Agradeço aos amigos Diego Marangoni e Luciano Wilson de Medeiros pela leitura cuidadosa dos rascunhos deste artigo e pelas sugestões valiosas.

O que é gRPC?

O gRPC é uma biblioteca RPC (Chamada de Procedimento Remoto) desenvolvida pelo Google, com código aberto e alto desempenho. No gRPC uma aplicação cliente pode chamar os métodos de uma aplicação servidor, como se estivessem no mesmo local, facilitando a criação de serviços distribuídos. É possível usar a configuração do serviço e arquivos de definição da interface da API para gerar documentação de referência para sua API.

Figura 1 - Aplicação cliente chamando os métodos da aplicação servidor (gRPC Guides)

O que é REST?

O REST (Representational State Transfer) é um estilo de arquitetura de software para sistemas distribuídos. O REST permite a comunicação entre aplicações cliente e servidor através do protocolo HTTP. Em um serviço Web REST, as solicitações feitas ao URI de um recurso provocarão uma resposta com uma carga útil formatada em JSON, XML, JPEG ou algum outro formato.

Benchmark gRPC x REST

A tabela a seguir fornece uma comparação dos recursos entre as APIs gRPC e REST.

Para comparação entre o desempenho do gRPC (HTTP/2 com Protobuf) e do REST (HTTP com JSON) criei um repositório no GitHub em .NET Core que está disponível aqui. Para geração dos resultados foi utilizada a biblioteca de código aberto BenchmarkDotNet.

Neste repositório criei três projetos: API REST, serviço gRPC e um para o benchmark (gRPC x REST). O projeto REST tem um endpoint HTTP GET que recebe um parâmetro e retorna uma mensagem, o serviço gRPC tem um método que faz o mesmo. No Benchmark foram feitas 100 e 200 interações no endpoint REST e método gRPC. A quantidade de interações pode ser alterada.

A tabela a seguir exibe os resultados da execução do Benchmark.

Legenda
- Method: método usado na comparação
- IterationCount: número de iterações
- Mean: média aritmética de todas as medições
- Error: metade do intervalo de confiança de 99,9%
- StdDev: desvio padrão de todas as medições
- Median: valor que separa a metade mais alta de todas as medições
- 1 us: 1 microssegundo (0.000001 segundo)

O gráfico a seguir evidencia um ganho de desempenho considerável ao usar o gRPC.

Figura 2 - Benchmark gRPC x REST

Benefícios do gRPC

  • Desempenho: as mensagens são serializadas em Protobuf, um formato de mensagem binária que serializa rapidamente no cliente e no servidor. Uma mensagem gRPC é sempre menor do que uma mensagem JSON equivalente. Outro ponto importante é que o gRPC foi projetado para HTTP/2, uma revisão importante do HTTP que fornece benefícios significativos de desempenho. Clique aqui para ver um teste bem bacana que compara o tempo de carregamento de imagens com HTTP e HTTP/2.
  • Código: o arquivo .proto define o contrato de serviços e mensagens gRPC. Ao compartilhar o arquivo .proto do servidor as definições são geradas no cliente, eliminando retrabalho no desenvolvimento.
  • Especificação formal: a especificação gRPC é prescritiva sobre o formato que um serviço gRPC deve seguir. No caso do REST não existe uma especificação. O gRPC permite implementações independentemente da linguagem.

Benefícios do REST

  • A comunicação geralmente acontece usando um JSON, que é legível ao humano.
  • Não é possível chamar um serviço gRPC (HTTP2) a partir de um aplicativo web (browser-based). O gRPC-Web é um protocolo que permite que os aplicativos JavaScript do navegador acessem um serviço gRPC.
  • O REST é amplamente utilizado. Muitas pessoas têm experiência com ele e muitos serviços da Web (e clientes) usam o REST.

Minhas Considerações

O primeiro passo para criar um serviço gRPC com .NET Core, caso não tenha feito um, é seguir o tutorial da Microsoft.

Normalmente, eu uso REST em comunicação com o mundo externo, como integração de serviços externos e comunicação com front-end. A questão de desempenho e escala sempre são levadas em consideração na Acesso Digital, e isso sem dúvidas fez com que optássemos pelo uso do gRPC em alguns projetos, aproveitando os benefícios desta tecnologia. No projeto que estou participando, o gRPC é usado para integração entre serviços internos e fornece métodos do serviço (servidor) para o aplicativo móvel (cliente). Espero que a leitura tenha sido útil.

Leituras Adicionais

grpc-gateway
Enjoy (gRPC-JSON transcoder)

Letícia Silva é desenvolvedora na Acesso Digital.

--

--