Estudos pessoais sobre o gRPC

31/10/2021 - 3 min de leitura

MICROSERVIÇOS

O que é o gRPC?

O gRPC é um framework desenvolvido pelo Google que tem como objetivo facilitar a comunicação entre sistemas de forma bastante rápida e leve, independente da linguagem de progamação. RPC quer dizer Remote Procedure Call. A letra g, não tem seu significado muito bem escrito, mas, aparentemente não é Google 🤔😂

Assim como o REST, o gRPC surgiu como uma alternativa para a comunicação entre os sistemas. Porém, possui algumas diferenças:

  • Utiliza o HTTP/2 por padrão (o REST pode ser implementado utilizando a versão 1 ou 1.1);
  • Tem outros tipos de workflow de request-response (falaremos mais a frente);
  • Manda os dados da request via binários (isso possibilita um ganho de performance na deserialização e largura da banda);
  • Entre outras. Consulte a página oficial para saber mais.

O gRPC nos permite executar funções/chamadas dentro do servidor. É um pouco diferente do REST, onde temos acesso a somente um endpoint exposto na web. A comunicação no gRPC seria algo assim:

Comunicação gRPC

Sintaxe/linguagem adotada para a comunicação

Assim como o padrão REST, o gRPC também requer um padrão para comunicação. O JSON é praticamente a sintaxe oficial do REST. No gRPC, a sintaxe é a Protocol Buffers (também chamado de proto buffer).

Veja um exemplo abaixo da sintaxe do proto buffer retirada do site oficial do google.

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;
}

Os arquivos de proto buffers têm a extensão .proto. Essa linguagem está para o gRPC, assim como o JSON está para o REST. A diferença é que, no gRPC, só existe uma linguagem para comunicação, que é o proto.

Como havia dito acima, no final, vão ser gerados binários para a comunicação. E isso acarreta em diversas melhorias em relação ao tráfego de dados na rede.

Tipos de APIs de comunicação do gRPC

Unary

Bastante simples e conhecida para os desenvolvedores. Essa comunicação é aquela que um cliente envia uma request e espera uma response.

Comunicação unária

Server Streaming

Quando o servidor fica mandando vários dados de volta para o cliente. Um caso de uso seria saber a localização em tempo real de um ônibus.

Server Streaming

Client Streaming

Essa é o contrário da anterior. Aqui, o cliente quem manda várias requisições. Um caso de uso seria o upload de uma pasta com várias imagens, por exemplo.

Bi Directional Streaming

Esse tipo de comunicação é quando ocorre o streaming dos dois lados. Um ótimo caso de uso pra isso seria assistir um vídeo no youtube enquanto faz upload de outro no seu canal.

Conclusão

Ainda não sei ao certo. Mas, principalmente nas comunicações de streaming, me parece muito que eles usam algo relacionado ao protocolo UDP. Então, fica de estudos futuros pra mim e pra você vermos se isso é verdade ou não.

O ensinamento principal que quero deixar é que não é crime fazer comunicação de microserviços via REST. Aliás, acho que essa forma talvez seja a mais comum nas bolhas techs. No entanto, por trazer diversas vantagens, o gRPC me parece bastante adequado para fazer comunicação entre microserviços. Ele traz outra proposta diferente do REST.

Apesar de também ser possível fazer comunicação gRPC do browser para o servidor, esse recurso ainda não me parece ser convincente o suficiente para tal. Por isso, ainda acho que o REST ou o GraphQL seja os mais indicados.

Foto da capa by Denny Müller on Unsplash

 

Compartilhe

Twitter