pt en

gRPC: O que é e como usar?

2021-09-12 3 min read

Há algum tempo passei a ouvir sobre gRPC, e sobre os benefícios que ele traria para a comunicação entre diferentes aplicações e dispositivos.

Uma vez que um dos principais requesitos dos projetos em que trabalho é ter um tempo de reposta médio bastante eficiente (abaixo de 200ms), nós passamos a utilizar o gRPC, com o objetivo de trafegar as informações com mais eficiência do que teriámos usando REST com protocolo http padrão…

E é sobre o início dessa jornada que irei comentar brevemente aqui, abordando o que é gRPC, vantagens e desvantagens.

Afinal, o que é gRPC?

gRPC é um acrônimo para Google Remote Procedure Call (Chamada de Procedimento Remoto), é um protocolo para execução remota de serviços, permitindo que uma aplicação cliente possa chamar diretamente um método de uma aplicação em um servidor remoto, e evidentemente, esse é um protocolo criado pela Google, tendo como base o antigo protocolo RPC.

Além disso, gRPC é Open Source, e por padrão utiliza HTTP/2 para a transmissão de dados entre os computadores remotos. Os dados são transportados utilizando uma Linguagem de Definição de Interface (IDL), e a mais utilizada junto ao gRPC é o Protocol Buffer (Protobuf para os intímos :D).

O protocolo fornece quatro métodos diferentes para as chamadas remotas:

  1. Unary Call: As chamadas unárias são aquelas em que o cliente envia uma solicitação única ao servidor e o servidor responde com uma única resposta, basicamente igual à uma requisição normal do REST, por exemplo.
  2. Server Streaming Call: As chamadas de stream de servidor são aquelas em que o cliente envia uma solicitação única ao servidor, porém, diferentemente da chamada unária, o servidor responde com um stream de dados, como se fosse uma lista de respostas. Assim, o cliente lê esse stream até que não haja mais dados.
  3. Client Streaming Call: As chamadas de stream de cliente são, basicamente, o contrário das Server Stream Call, de tal forma que o cliente envia um stream de dados para o servidor, o qual processará todos esses dados e por fim, enviará uma única resposta ao cliente.
  4. Bi-directional Streaming Call: As chamadas bi-direcionais são a únião das chamadas de stream de servidor e de cliente, ou seja, nesse caso tanto o cliente quanto o servidor poderão trafegar um stream de dados durante a chamada.

Por fim, é importante dizer que o gRPC é considerado não apenas um novo protocolo, mas sim um framework, visto que já implementa várias funcionalidades em diferentes linguagens sem a necessidade de re-escrever o básico.

Vantagens

A primeira grande vantagem é a facilidade de implementação, havendo exemplos fáceis e práticos em diversas linguagens. Um bom ponto de partida é a própria documentação do gRPC.

Além disso, um dos pontos positivos mais observados no gRPC e, inclusive, um dos grandes motivadores para a utilização desse framwork é o seu alto desempenho, uma vez que suas mensagens com o protobuf podem ser até 30% menores que uma mensagem JSON equivalente, e a sua execução pode ser entre 5 e 10 vezes mais rápida que uma comunicação de REST com JSON.

Os diferentes tipos de chamadas possíveis no gRPC também são uma grande vantagem, pois além de permitir a transmissão de mensagens unárias, assim como o REST, também acaba permitindo o stream de dados, o que pode ser muito útil em alguns cenários.

Desvantagens

A principal desvantagem é o fato de que é bastante difícil realizar testes com gRPC, e por testes, eu me refiro a testes de integração e E2E.

As mensagens transmitidas pelo gRPC não são human-readable, como um JSON, o que complica momentos de debugging, uma vez que se torna necessário converter as mensagens do binário para algum outro formato mais fácil de se entender.

E por hoje é isso pessoal!

Referências: