Saltar al contenido principal

gRPC: Microservicios Eficientes con Protocol Buffers

Guía y material de la exposición sobre gRPC, Protocol Buffers, HTTP/2 y el patrón arquitectónico Backend for Frontend (BFF) utilizando Node.js y Python.

Integrantes

  • Fiber Piedrahita
  • Daniel Fajardo
  • Paula Ferreira

Diapositivas y Recursos

Enlaces del Proyecto y Presentación

1. Fundamentos de gRPC y Protocol Buffers

gRPC (gRPC Remote Procedure Calls) es un framework de comunicación RPC de alto rendimiento desarrollado por Google. A diferencia de las tradicionales arquitecturas REST basadas en texto JSON sobre HTTP/1.1, gRPC se apoya en dos pilares:

  1. Protocol Buffers (Protobuf): Mecanismo de serialización binaria fuertemente tipado y agnóstico al lenguaje de programación.
  2. Transporte HTTP/2: Soporta multiplexación de múltiples peticiones sobre una misma conexión TCP, compresión de encabezados (HPACK) y streaming bidireccional.

2. Comparación: gRPC vs. REST

CriteriogRPCREST Tradicional
Protocolo de RedHTTP/2 (Multiplexado)Generalmente HTTP/1.1 o HTTP/2
Formato de CargaBinario (Protocol Buffers)Texto (JSON o XML)
Definición de ContratoObligatoria y estricta (.proto)Opcional (OpenAPI / Swagger)
RendimientoAltísimo rendimiento y bajo consumo de ancho de bandaMayor sobrecarga por tamaño de texto
TransmisiónUnario, Server/Client Streaming y BidireccionalTípicamente petición / respuesta unaria
Caso de Uso IdealComunicación interna entre microserviciosAPIs públicas para navegadores y terceros

3. Demostración Práctica: Pokédex con Arquitectura BFF

1

Definir el Contrato en Protocol Buffers

proto/pokemon.proto
syntax = "proto3";

package pokemon;

service PokemonService {
rpc GetPokemon (PokemonRequest) returns (PokemonResponse);
}

message PokemonRequest {
string name_or_id = 1;
}

message PokemonResponse {
int32 id = 1;
string name = 2;
int32 height = 3;
int32 weight = 4;
repeated string types = 5;
string sprite_url = 6;
string description = 7;
}
2

Implementar Servidor gRPC en Node.js

El servidor en Node.js carga el contrato .proto, consulta PokeAPI y responde al cliente gRPC en formato binario estructurado:

cd backend_node
npm install
node server.js
3

Implementar el Cliente gRPC en Python (Flask)

El BFF en Python actúa como cliente de gRPC, compilando los stubs y exponiendo la ruta web para el navegador:

cd frontend_python
python -m venv venv
source venv/bin/activate # En Windows: venv\Scripts\activate
pip install -r requirements.txt
python app.py