¡La comunicación optimizada te espera! Descubra gRPC, el marco de código abierto y de alto rendimiento de Google para llamadas a procedimientos remotos que aprovecha HTTP/2 y buffers de protocolo.
gRPC fue creado por Google como un marco de llamadas a procedimientos remotos de alto rendimiento y código abierto que se puede utilizar en prácticamente cualquier tipo de entorno. gRPC puede conectar servicios dentro o entre centros de datos y tiene soporte conectable para equilibrio de carga, seguimiento, verificación de estado y autenticación. Incluso puede utilizar gRPC en la “última milla” de la informática distribuida para conectar servicios remotos (como aplicaciones en dispositivos móviles) a servicios de back-end.
gRPC no es un concepto nuevo. De hecho, se adoptó a partir de la llamada a procedimiento remoto RPC y ganó una popularidad significativa en unos pocos años.
¿Qué es una llamada a procedimiento remoto?
Antes de profundizar en gRPC, descubramos qué es exactamente una llamada a procedimiento remoto. RPC es una forma de comunicación cliente-servidor que se basa en una llamada a función en lugar de la llamada HTTP habitual. Mira cómo funciona:
- Un cliente envía un mensaje de solicitud a un servidor remoto para realizar un procedimiento específico.
- El servidor remoto envía una respuesta al cliente.
- La aplicación cliente recibe la respuesta y puede continuar con el proceso.
Es así de simple. Una solicitud del cliente, una respuesta del servidor y el cliente solicitante puede proceder con la acción en cuestión.
Sin esta comunicación entre clientes y servidores, las aplicaciones que dependen de datos o funciones remotas no funcionarían.
Hay dos problemas principales con RPC:
- El proceso de comunicación RPC está oculto para el usuario y (a veces) para el sistema, lo que lleva a una situación de "quién es el cliente y quién es el servidor".
- RPC suele omitir muchas de las capas del protocolo para mejorar el rendimiento, haciéndolo menos seguro.
Con gRPC, el marco declara el servicio en un lenguaje de definición de interfaz (IDL) independiente del idioma y luego genera enlaces específicos del idioma. La gran diferencia entre RPC y gRPC es que gRPC está diseñado para hacer creer al cliente que el servidor está en la misma máquina. Esto se logra parcialmente por la forma en que el protocolo utiliza la serialización.
gRPC hace posible que cualquier tipo de datos personalizado que requiera serialización se defina como un búfer de protocolo, que es una biblioteca multiplataforma de código abierto que se utiliza para serializar datos estructurados. Los buffers de protocolo son útiles para aplicaciones diseñadas para comunicarse entre sí a través de una red o para almacenar datos.
¿Qué es gRPC?
Originalmente, todos asumieron que la "g" en gRPC significaba "Google". Para evitar esto, Google cambia el significado de la "g" en cada versión que lanza, de modo que nadie sabe realmente qué significa la "g". Independientemente de la nomenclatura, gRPC se ha vuelto increíblemente popular. ¿Por qué? Porque gRPC:
- Hace que la abstracción sea increíblemente fácil.
- Está soportado por una gran cantidad de lenguajes de programación.
- Es un protocolo centrado en el rendimiento.
- Es mucho más fácil de usar (y más confiable y seguro) que las típicas llamadas HTTP.
- Es ampliamente utilizado en microservicios.
Es en el mundo de los microservicios donde gRPC realmente brilla.
¿Qué es un microservicio?
Antes de continuar, definamos los microservicios. En pocas palabras, un microservicio es una arquitectura que permite la entrega rápida, frecuente y confiable de aplicaciones y servicios complicados a escala. En lugar de depender de servicios monolíticos, los microservicios construyen sistemas "agregando" módulos de función única que trabajan juntos para formar un servicio complejo.
Estos módulos monofunción deberán disponer de medios de comunicación entre sí. Aquí es donde entra en juego gRPC.
Con los microservicios, tienes varias piezas que deben interactuar. Cuando se utiliza gRPC en microservicios, los desarrolladores no necesitan escribir documentación adicional para sus proyectos porque el código gRPC generalmente se explica por sí mismo. Además, gRPC incluye varias bibliotecas para admitir la mayoría de las funciones. Por lo tanto, no sólo es más fácil de escribir, sino que es un protocolo de comunicaciones con mayor soporte.
¿Qué hace que gRPC sea un protocolo de comunicación tan excelente?
Una de las razones más importantes por las que gRPC es un sistema tan eficaz es porque es muy bueno usando HTTP2.
La gran ventaja de HTTP2 sobre HTTP es que la segunda iteración permite enviar múltiples solicitudes y recibir múltiples respuestas simultáneamente. Por lo tanto, no será necesaria una nueva conexión para cada solicitud/respuesta. Esto no sólo hace que HTTP2 sea más eficiente, sino que también lo hace más eficiente y confiable.
Otras razones por las que gRPC es superior incluyen:
- gRPC también utiliza metadatos. En lugar de depender de los encabezados de solicitud HTTP, los metadatos funcionan con datos clave-valor que se pueden configurar en el cliente o servidor.
- gRPC puede funcionar con 3 tipos de transmisión: Server Streaming (donde el cliente envía una sola solicitud y el servidor puede devolver múltiples respuestas), Client Streaming (donde el cliente envía múltiples solicitudes y el servidor devuelve una única respuesta) y Bidireccional Streaming ( donde el cliente y el servidor envían mensajes simultáneos sin esperar respuesta).
- gRPC utiliza interceptores que le permiten interceptar y modificar solicitudes y respuestas.
- gRPC es capaz de utilizar el equilibrio de carga (y está implementado en el lenguaje GoLang).
- Los clientes de gRPC pueden cancelar una llamada de gRPC si el cliente ya no requiere una respuesta.
¿Cuándo debería utilizar gRPC?
La respuesta aquí es simple: cuando estás creando una aplicación que es una colección de microservicios y esos microservicios requieren formas de comunicarse entre sí de manera eficiente y confiable, tu mejor opción es gRPC.
Y debido a que gRPC admite muchos lenguajes (como C#, Java, Go, Node.js, Python, Ruby y PHP), puede estar seguro de que cualquier proyecto en el que esté trabajando admite este excelente marco de comunicaciones.
Fuente: BairesDev