Introducción a GRPC

Cuemby
Cuemby
Jul 25 · 4 min read

Autor: Santiago Yepes Tamayo / Senpai Backend Engineer ⋅ Cuemby

El desarrollo basado en microservicios es una tendencia, y es que ahora, desde las pequeñas hasta las grandes empresas están utilizando este concepto para la construcción de aplicaciones en la nube. Acá es donde aparece una solución como gRPC, la cual nos permite conectar esos micro servicios de una manera más eficiente que otras soluciones.


¿Pero entonces qué es gRPC y de dónde viene?

gRPC, como está autodefinido “Framework RPC, moderno, orientado al alto rendimiento y universal”. El cual fue liberado por Google en el año 2015 para el uso de la comunidad, cabe aclarar que Google lo usa hace varios años, he internamente es conocido como Stubby.

Antes de continuar hablando un poco de gRPC, es importante aclarar Qué es RPC. RPC (Inglés: Remote Procedure Call, Español: Llamado a procedimiento remoto) Es una implementación de software la cual busca llamar una función dentro de un programa, el principio es que dicha llamada o procedimiento esté ubicada en otro lugar (una máquina remota), y que se debe consumir de forma transparente, es decir, como si estuviera en la misma máquina, el usuario nunca se debe preocupar por detalles de comunicación cliente-servidor.

Continuando…

Ya sabemos lo que es… Pero… ¡Momento!, para algunas personas Déjà vu, Sí ya existen soluciones como CORBA, XML-RPC y SOAP que ya tienen sus años de vida y ahora algunas están en desuso, ¿Por qué usar otra implementación RPC?

Comencemos diciendo que conforme como pasan los años, nuevas tecnologías, dispositivos, protocolos y necesidades surgen. La mayoría de los sistemas RPC están basados en HTTP, mientras que gRPC toma partido de las bondades de HTTP/2 para solventar problemas que con HTTP/1 podrían ser un dolor de cabeza.

Conceptos básicos de gRPC:

Primero vale recordar, que el concepto cliente — servidor, debe ser tenido en cuenta como base de gRPC.

En el diagrama podemos ver un Servicio C++ el cual expone un servidor gRPC, y a este servidor se conectan dos cliente, uno en Ruby y el otro en Android, para lo cual, cada uno utiliza en su interior lo que conocemos como gRPC Stub o simplemente clientes gRPC los cuales ya saben como comunicarse con el servidor.

gRPC Server

Después de un repaso ligero por la arquitectura, tenemos los conceptos más básicos a tener en cuenta:

Características principales

Definición simple de servicio: gRPC se caracteriza por la definición del servicio de una manera simple, usando Protocol Buffers como IDL, aunque también podríamos configurar otras alternativas, como por ejemplo XML. Sin embargo, Protocol Buffer y gRPC son el equipo ideal.

Universal: Está disponible para iOS, sistemas operativos basados en Linux, Windows, Android y Mac OS. Adicionalmente, ofrece soporte para mas de diez lenguajes de programación.

Streaming bidireccional: Recordemos que gRPC está basado en HTTP/2, por lo tanto soporta las nuevas características que ésta nos ofrece, entre ellas la posibilidad de hacer un streaming bidireccional entre cliente y servidor.

Conceptos básicos

Ciclo de vida de RPC: En gRPC tenemos cuatro ciclos de vida diferentes.

Antes de hablar sobre los tipos, en cualquier llamado se cumple lo siguiente para establecer comunicación cliente-servidor: Al invocar el método del cliente gRPC, se le notifica al servidor cuál método se llamará (con nombre del método, metadata para la llamada y en caso de que aplique con un deadline), cuando pasa esto, el servidor le puede responder con su metadata inicial al cliente o hacerlo cuando llegue el request del cliente.

  • Unary RPC: Es el tipo de llamado simple, consiste en que el cliente gRPC hace una petición, el servidor gRPC retorna la respuesta. En otras palabras, llamar una función.
  • Server streaming RPC: En este tipo de llamado, el cliente gRPC hace una petición, pero el servidor puede retorna un stream de respuestas.
  • Cliente streaming RPC: En este tipo de llamado, a diferencia del Server streaming RPC, el cliente gRPC comienza enviando un stream de peticiones, y el servidor, retorna una única respuesta. Generalmente esta respuesta se envía después de recibir todas las peticiones, aunque no necesariamente.
  • Bidirectional streaming RPC: Este es el tipo más complejo, puesto que ambos (cliente y servidor) envían stream de mensajes. Después de la conexión inicial que hacen todas las llamadas RPC, el flujo para el Bidirectional streaming RPC dependerá totalmente de lo que la aplicación quiera hacer.

Hay otros conceptos básicos como Deadline/timeouts o Metadata que puedes encontrar en la página de gRPC: https://grpc.io/docs/guides/concepts/

Nuestro primer servicio gRPC con GoLang

Visita el repositorio https://github.com/zetogk/first-grpc-with-golang allí encontrarás el readme y los archivos de ejemplo para construir y consumir el primer micro servicio gRPC usando GoLang.

Cuemby TechBlog

Cuemby is a technology specialist helping businesses build sustainable ecosystems based on native cloud technologies. We offer professional and experienced Kubernetes and Cloud Native consultancy services, cloud native tools, support as well as training.

Cuemby

Written by

Cuemby

Cuemby is a technology specialist helping businesses build sustainable ecosystems based on native cloud technologies.

Cuemby TechBlog

Cuemby is a technology specialist helping businesses build sustainable ecosystems based on native cloud technologies. We offer professional and experienced Kubernetes and Cloud Native consultancy services, cloud native tools, support as well as training.

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade