Middle
¿Qué es gRPC?
sobes.tech AI
Respuesta de la IA
gRPC es un marco de trabajo de código abierto y de alto rendimiento para llamadas a procedimientos remotos (RPC), desarrollado por Google, para crear aplicaciones distribuidas y microservicios. Se basa en el protocolo HTTP/2 para el transporte y utiliza Protocol Buffers (Protobuf) como lenguaje de descripción de interfaces y mecanismo de serialización.
Características clave de gRPC:
- HTTP/2: Aprovecha las ventajas de HTTP/2, como multiplexación de solicitudes, compresión de encabezados y transmisión bidireccional, lo que proporciona un rendimiento superior en comparación con los protocolos cliente-servidor tradicionales sobre HTTP/1.1.
- Protocol Buffers (Protobuf): Lenguaje de descripción de datos que permite estructurar datos y generar código para serialización y deserialización en varios lenguajes. Protobuf es eficiente en tamaño de mensajes y velocidad de procesamiento.
- Transmisión (Streaming): Soporta cuatro tipos de transmisión:
- Unary: RPC clásico (una solicitud - una respuesta).
- Server-side Streaming: El cliente envía una solicitud, el servidor responde con un flujo de mensajes.
- Client-side Streaming: El cliente envía un flujo de mensajes, el servidor responde con un mensaje.
- Bidirectional Streaming: El cliente y el servidor intercambian flujos de mensajes simultáneamente.
- Multilenguaje: Con Protobuf, gRPC genera código cliente y servidor para múltiples lenguajes de programación.
- Generación de código: Creación automatizada de código para cliente y servidor basado en archivos
.proto, reduciendo la codificación manual. - Metadatos: Soporte para transmitir metadatos (pares clave-valor) junto con solicitudes y respuestas.
- Interceptors: Capacidad para interceptar solicitudes y respuestas para realizar lógica adicional (por ejemplo, registro, autenticación).
Cómo funciona gRPC:
- Se define el servicio API usando el lenguaje Protocol Buffers en un archivo
.proto. - Se genera código cliente y servidor en el lenguaje deseado usando el compilador
protoc. - El servidor implementa la interfaz del servicio generada.
- El cliente usa el código generado para llamar a los métodos del servicio en el servidor.
Ejemplo de archivo .proto:
syntax = "proto3";
package greeting;
// Definición del servicio
service Greeter {
// Método RPC unario
rpc SayHello (HelloRequest) returns (HelloReply) {}
// Método de transmisión en servidor
rpc SayHelloStream (HelloRequest) returns (stream HelloReply) {}
}
// Definición de mensajes
message HelloRequest {
string name = 1; // Campo con número de orden 1
}
message HelloReply {
string message = 1;
}
Comparación con REST (que usa JSON/XML):
| Característica | gRPC (Protobuf) | REST (JSON/XML) |
|---|---|---|
| Protocolo de transporte | HTTP/2 | HTTP/1.1 o HTTP/2 |
| Serialización de datos | Protobuf (binario) | JSON, XML (texto) |
| Rendimiento | Alto (formato binario, HTTP/2) | Menor (formato de texto, sobrecarga) |
| Lenguaje de descripción de API | Protocol Buffers (.proto) |
OpenAPI/Swagger |
| Contrato API | Estricto, basado en Protobuf | Menos estricto |
| Tipificación de datos | Estricta (definida en .proto) |
Débil (verificación en tiempo de ejecución) |
| Generación de código | Integrada | Requiere herramientas externas |
| Transmisión en streaming | Integrada | Requiere mecanismos adicionales (por ejemplo, WebSockets) |
| Legibilidad | Difícil de leer sin .proto |
Fácil de leer por humanos |
gRPC es muy adecuado para la interacción entre servicios en sistemas distribuidos, microservicios, transmisión de grandes volúmenes de datos, donde la rendimiento y un contrato API estricto son importantes.