Melhorando o desempenho de microservices com gRPC

Linda Ines
Quick Mobile Labs
Published in
3 min readNov 27, 2016

Não dá pra negar que o casamento JSON e REST é um grande sucesso. Mas até onde essa dupla consegue performar bem em grande escala?

Grandes empresas como Square, Netflix, Digital Ocean e SoundCloud estão adotando o gRPC para fazer seus microserviços se comunicarem melhor.

Mas o que é esse tal de gRPC?

Primeiramente é importante definirmos o que é RPC.

Uma chamada de procedimento remoto (RCP) se trata de uma tecnologia para comunicação de processos, permitindo que um programa de computador seja capaz de chamar um procedimento que está em outro computador, independentemente da linguagem e plataforma. O gRPC é um framework opensource RPC feito pelo Google.

A principal diferença entre ele e o REST é que o segundo é focado em recursos, enquanto o RPC é focado em operações. O exemplo abaixo pode ilustrar isso melhor:

O GRPC se aplica bem e é altamente recomendado em cenários em que são esperados:

  • Baixa latência;
  • Alta escalabilidade;
  • Sistemas distribuídos;
  • Aplicativos mobile que se comunicam com servidores na nuvem;

Isso porque ele é construído sobre o HTTP2 (clique aqui para um teste de velocidade comparado ao HTTP1) e além de fornecer ferramentas eficientes de autenticação, propicia balanceamento de carga, monitoramento, logging etc.

Aqui podemos observar qual é realmente o lugar que ele ocupa em uma arquitetura de microserviços.

Essa comunicação entre o serviço C e o restante do sistema está sendo feita por gRPC e o formato de dados é o Protobuf. Pense em um XML mais rápido, simples e menor, isso é o Protobuf! Sua rapidez é devido ao seu encoding binário.

Um comparativo entre o desempenho de JSON/REST e Protobuf/gRPC:

Claro que nem tudo são flores e em algumas situações AINDA não é aconselhável trocar o JSON por Protobuf. São eles elas:

  • Quando precisamos ter dados legíveis para humanos;
  • Quando os dados são consumidos diretamente pelo navegador;
  • Seu lado servidor é escrito em JavaScript

O gRPC fornece uma documentação bastante legal e o guia básico pode ser feito em várias linguagens, dentre elas Java, C#, PHP… e por aí vai! Aqui será dada uma pequena explicação de um dos exemplos que o pessoal do Google forneceu utilizando Python.

Temos 3 principais arquivos: o cliente, o servidor e o serviço entre eles que é definido em utlilizado Protobuf.

Através desse dele, serão gerados o stub para o cliente e servidor gRPC(isso! Ele vai gerar pra nós), por meio do grpcio-tools package.

Agora basta implementar o cliente e servidor em uma das linguagens que o gRPC suporta.

A seguir está o código do servidor, a classe Cumprimentador é uma subclasse da classe gerada pelo gRPC.

Abaixo, o código do Cliente. O stub é obtido através da instanciação da classe CumprimentadorStub, que foi gerada pelo gRPC.

É isso pessoal… Até a próxima!

--

--

Linda Ines
Quick Mobile Labs

Tech Lead at Cedro Technologies | Software Engineer | Scrum Master