Sobes.tech
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:

  1. Se define el servicio API usando el lenguaje Protocol Buffers en un archivo .proto.
  2. Se genera código cliente y servidor en el lenguaje deseado usando el compilador protoc.
  3. El servidor implementa la interfaz del servicio generada.
  4. 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.