Red de conocimiento informático - Aprendizaje de programación - GoLang: cuatro servicios del marco gRPC

GoLang: cuatro servicios del marco gRPC

gRPC facilita la creación de aplicaciones y servicios distribuidos al permitir que las aplicaciones cliente llamen directamente a métodos de aplicaciones de servidor en diferentes máquinas como si fueran objetos locales. Como muchos sistemas RPC, gRPC se basa en la idea de definir servicios y especificar métodos (con parámetros y tipos de retorno) que se pueden llamar de forma remota. Implemente la interfaz en el lado del servidor y ejecute un servidor gRPC para manejar las llamadas de los clientes. Cree un código auxiliar en el lado del cliente que se pueda ejecutar como un método del lado del servidor.

Los clientes y servidores de gRPC pueden ejecutarse e interactuar en una variedad de entornos, desde los servidores internos de Google hasta su propia computadora portátil, y pueden escribirse en cualquier idioma admitido por gRPC. Por lo tanto, puedes crear fácilmente un servidor gRPC en Java y un cliente en Go, Python o Ruby. Además, las API de Google más recientes tendrán una versión gRPC de la interfaz, lo que le permitirá integrar fácilmente la funcionalidad de Google en sus aplicaciones.

gRPC utiliza buffers de protocolo de forma predeterminada, un mecanismo maduro de serialización de datos estructurados que Google tiene de código abierto (por supuesto, también se pueden usar otros formatos de datos como JSON). El nuevo estilo de buffers de protocolo, llamado proto3, tiene una sintaxis liviana y simplificada, algunas características nuevas útiles y soporte para lenguajes más nuevos. Actualmente existen versiones beta de Java y C++, una versión alfa de JavaNano (también conocido como Android Java), compatibilidad con Ruby en el repositorio de buffers de protocolo de Github, generadores Go en el repositorio de Github golang/protobuf y muchos más lenguajes en soporte de desarrollo. Se están desarrollando más idiomas.

Con gRPC, podemos definir un servicio una vez en un archivo .proto e implementarlo como cliente y servidor en cualquier idioma que admita servicios. A su vez, estos servicios se pueden utilizar desde los servidores de Google hasta los suyos. tableta y más: gRPC resuelve las complejidades de la comunicación entre diferentes idiomas y entornos. Otras ventajas de utilizar buffers de protocolo incluyen serialización eficiente, IDL simple y actualizaciones de interfaz sencillas.

Ahora, echemos un vistazo más de cerca a lo que sucede cuando un cliente gRPC llama a un método en un servidor gRPC. No discutiremos los detalles de implementación; puede encontrar más detalles en nuestras páginas específicas del idioma.

Comencemos con el RPC más simple: el cliente realiza una única solicitud y obtiene una única respuesta.

El RPC de transmisión del lado del servidor es igual que nuestro ejemplo simple, excepto que devuelve un flujo de respuesta después de obtener información sobre la solicitud del cliente. Una vez enviadas todas las respuestas, los detalles del estado del lado del servidor (código de estado e información de estado opcional) y los metadatos de seguimiento opcionales se envían al cliente para completar el trabajo del lado del servidor. El cliente también completa su trabajo después de recibir todas las respuestas del lado del servidor.

El RPC de transmisión del lado del cliente es básicamente el mismo que nuestro ejemplo simple, excepto que el cliente envía un flujo de solicitudes al servidor en lugar de una sola solicitud. Por lo general, pero no necesariamente, el servidor recibe todas las solicitudes de los clientes y envía respuestas que contienen detalles de estado y datos de seguimiento opcionales.

En un RPC de flujo bidireccional, la llamada la inicia el cliente que llama al método y el servidor recibe los metadatos del cliente, el nombre del método y la fecha límite. El servidor puede optar por devolver sus metadatos iniciales o esperar a que el cliente envíe la solicitud. Lo que sucede a continuación depende de la aplicación, porque el cliente y el servidor pueden leer y escribir en cualquier orden, y estos flujos funcionan de forma completamente independiente. Por ejemplo, el servidor puede esperar hasta haber recibido mensajes de todos los clientes antes de escribir la respuesta, o el servidor y los clientes pueden actuar como "ping pong": el servidor recibe la solicitud y devuelve la respuesta, luego el cliente envía otra solicitud. basado en la respuesta, y así sucesivamente.

Clone e instale el código base grpc-go ejecutando los siguientes comandos:

Descargue el paquete de código fuente de protobuf

Instalar golang-protobuf

El primer paso es definir gRPC usando protocolos

El primer paso es definir el tipo de servicio gRPC y los métodos de solicitud y respuesta usando buffers de protocolo.

Para definir un servicio, debe especificar el servicio en un archivo .proto:

Luego defina el método rpc en el servicio, especificando los tipos de solicitud y respuesta. gRPC permite cuatro tipos de métodos de servicio.

El archivo service.proto tiene este aspecto: