¿Qué es gRPC?

gRPC es un protocolo RPC (Remote Procedure Call) del que últimamente se oye hablar mucho relacionado con la conexión de microservicios.

gRPC es un protocolo open-source creado por Google que usa para conectar sus microservicios.

Entre sus características:

  • Protocolo construido sobre HTTP/2
  • Foco principal en el rendimiento: bajo consumo de CPU, ancho de banda, latencia…
  • Protocolo bidireccional, con control de flujo de datos, con capacidad de enviar múltiples peticiones sobre una única conexión TCP.
  •  Serialización con Proto3 (nueva versión de Protocol Buf) que ofrece soporte para más lenguajes y JSON encodings.
  • Funciona sobre IDLs (abajo lo que explicamos) lo que hace necesario tener una librería en el lenguaje correspondiente. Por suerte ofrece librerías para distintos lenguajes: C, C++, C#, Go, Java, Node.js, Objective-C, PHP, Python, Ruby. Eso sí, no todas están tan maduras como la de C y Java J.
  • Autenticación incorporada soportando SSL, autenticación por Token,..: https://grpc.io/docs/guides/auth.html

Veamos cómo funciona:

En gRPC una aplicación cliente llama a métodos de la aplicación servidora como si estuviera en local (bueno, esto ya lo habíamos visto antes :D), con la ventaja de la sencillez que da para comunicar clientes y servers en diferentes lenguajes:

La forma de crear una aplicación gRPC es esta (ejemplo en Java):

1. Definir el servicio en un fichero .proto

Algo como esto: https://github.com/grpc/grpc-java/blob/master/examples/src/main/proto/helloworld.proto

En este fichero se define el paquete en el que se generarán las clases Java (opción package o java_package que lo sobreescribe), el nombre del servicio, el método en el servicio (GetFeature) y el mensaje que intermcabia ese método.

2. Generar los interfaces cliente y servidor gRPC con el compilador proto3 (puede descargarse aquí https://github.com/protocolbuffers/protobuf/releases) . También pueden usarse los plugins para Maven, Gradle, Eclipse,…

3. Crear el Servidor, esto implica 2 cosas:

Sobreeescribir la clase base generada desde el servicio generado:

Ejecutar un gRPC Server escuchando peticiones

En el ejemplo https://github.com/grpc/grpc-java/blob/master/examples/src/main/java/io/grpc/examples/helloworld/HelloWorldServer.java se ve

4. Crear el cliente gRPC, se pueden crear llamadas síncronas y bloqueantes

o llamadas asíncronas

Una vez visto…¿qué opináis? ¿lo usaríais en vuestro microservicios?

Personalmente le veo aplicación en escenarios concretos donde el rendimiento sea crítico, pero para escenarios usuales genera una complejidad que debe valorarse con cuidado.

Un comentario

  1. Totalmente de acuerdo en cuanto a la complejidad y que dependerá del caso de uso en donde el rendimiento y/o tiempos de respuesta sean críticos. Podría probarse MessagePack o RSocket.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s