Comunicação entre Sistemas: A Alta Performance do gRPC e Protocol Buffers

Por: Gabriel Sotero – Responsável por Desenvolvimento de Software e IA na NETEXPERTS

Dando continuidade à nossa série sobre comunicação entre sistemas, hoje mergulhamos no protocolo que é o padrão ouro para a comunicação interna de microsserviços em larga escala: o gRPC.

Como Google Premier Partners, na NetExperts utilizamos o gRPC quando a latência de milissegundos e a eficiência de banda são críticas para a operação dos nossos clientes.

Do RPC ao gRPC: Uma Breve História

O conceito de RPC (Remote Procedure Call) não é novo; ele nasceu na década de 80 com a ideia de permitir que um programa chamasse uma função em outro computador como se fosse uma função local. No entanto, as implementações antigas (como SOAP) eram pesadas e baseadas em XML, o que gerava um consumo excessivo de recursos.

Em 2015, o Google lançou o gRPC. Ele foi construído sobre décadas de experiência interna com um framework chamado Stubby. O gRPC foi doado à Cloud Native Computing Foundation (CNCF) e se tornou o padrão para conectar microsserviços de forma extremamente rápida e tipada.

Por que o gRPC é tão rápido?

O segredo da velocidade do gRPC reside em dois pilares fundamentais:

  1. HTTP/2: Diferente do REST tradicional (HTTP/1.1), o gRPC utiliza HTTP/2, que permite multiplexação (várias requisições em uma única conexão), compressão de cabeçalhos e comunicação binária bidirecional.
  2. Protocol Buffers (Protobuf): Em vez de enviar texto puro (JSON/XML), o gRPC utiliza um formato de serialização binária. O dado trafega de forma compacta, o que reduz drasticamente o uso de rede e o tempo de processamento de CPU para “ler” a mensagem.

Potencial em Microsserviços: Em comunicações internas (Lado do Servidor), o gRPC pode ser até 10 vezes mais rápido que o REST com JSON, tornando-o ideal para arquiteturas de alta carga.

Tutorial: Implementação com Node.js

Para trabalhar com gRPC, o primeiro passo não é o código, mas sim o Contrato.

1. Criando o Protobuff (servidor.proto)

O arquivo .proto define a estrutura dos dados e os serviços disponíveis. É a “planta” da sua comunicação.

Protocol Buffers

syntax = “proto3”;

package netexperts;

// Definição do serviço

service ServidorService {

  rpc ObterStatus (ServidorRequest) returns (ServidorResponse) {}

}

// Estrutura da requisição

message ServidorRequest {

  string id = 1;

}

// Estrutura da resposta

message ServidorResponse {

  string hostname = 1;

  string status = 2;

  bool online = 3;

}

2. Implementação do Servidor (server.js)

Precisamos instalar as bibliotecas necessárias:

npm install @grpc/grpc-js @grpc/proto-loader

JavaScript

const grpc = require(‘@grpc/grpc-js’);

const protoLoader = require(‘@grpc/proto-loader’);

// Carregar o arquivo proto

const packageDefinition = protoLoader.loadSync(‘servidor.proto’);

const netexpertsProto = grpc.loadPackageDefinition(packageDefinition).netexperts;

// Lógica da função (Provedor)

function obterStatus(call, callback) {

    const servidores = {

        “1”: { hostname: “cloud-master-google”, status: “Operacional”, online: true },

        “2”: { hostname: “vpn-gateway”, status: “Reiniciando”, online: false }

    };

    const response = servidores[call.request.id] || { hostname: “N/A”, status: “Desconhecido”, online: false };

    callback(null, response);

}

// Inicializar o servidor gRPC

const server = new grpc.Server();

server.addService(netexpertsProto.ServidorService.service, { ObterStatus: obterStatus });

server.bindAsync(‘0.0.0.0:50051’, grpc.ServerCredentials.createInsecure(), () => {

    console.log(“🚀 Servidor gRPC NetExperts rodando na porta 50051”);

    server.start();

});

3. Chamada pelo Cliente (Consumidor)

O cliente utiliza o mesmo arquivo .proto para saber como chamar o servidor.

JavaScript

const client = new netexpertsProto.ServidorService(

    ‘localhost:50051’,

    grpc.credentials.createInsecure()

);

client.ObterStatus({ id: “1” }, (error, response) => {

    if (!error) {

        console.log(“Resposta do Servidor:”, response.hostname, “-“, response.status);

    } else {

        console.error(error);

    }

});

Conclusão

O gRPC é a escolha definitiva para quem busca o máximo de performance em sistemas distribuídos. Embora o REST ainda seja soberano para APIs públicas (pela facilidade de consumo via navegador), o gRPC é o que sustenta os motores internos das maiores empresas de tecnologia do mundo, incluindo o Google e a NetExperts.

Ao utilizar Protocol Buffers, você garante que seus sistemas falem a mesma língua de forma rápida, segura e fortemente tipada.

Referências e Documentações Oficiais: