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.
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.
Ya sabemos lo que es… pero… ¡Momento!, {ara 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.
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 clientes, 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.
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.
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.