En esta página se muestran detalles específicos de Knative Serving para desarrolladores que quieran usar gRPC para conectar un servicio de Knative Serving con otros servicios. Por ejemplo, para proporcionar una comunicación sencilla y de alto rendimiento entre microservicios internos. Knative Serving admite llamadas gRPC unarias y de streaming.
Unario de gRPC
En una llamada RPC unaria, el cliente envía una única solicitud al servidor y recibe una única respuesta, de forma similar a una llamada de función normal:rpc SayHello(HelloRequest) returns (HelloResponse);
Transmisión gRPC
gRPC ofrece las siguientes opciones de streaming. RPCs de streaming del servidor en los que el cliente envía una solicitud al servidor y obtiene un flujo para leer que contiene una secuencia de mensajes. El cliente lee el flujo devuelto hasta que no haya más mensajes.
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);
RPCs de streaming del cliente en los que el cliente escribe una secuencia de mensajes y los envía al servidor en un flujo. Una vez que el cliente termina de escribir los mensajes, espera a que el servidor devuelva su respuesta.
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);
RPCs de streaming bidireccionales en los que el cliente y el servidor envían mensajes en dos flujos de lectura y escritura que funcionan de forma independiente.
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);
Estos son algunos de los posibles casos prácticos:
- Comunicación entre microservicios internos.
- Grandes cargas de datos (gRPC usa búferes de protocolo, que son hasta siete veces más rápidos que las llamadas REST).
- Solo necesitas una definición de servicio sencilla, no quieres escribir una biblioteca de cliente completa.
Para integrar tu servicio con gRPC, sigue estos pasos:
- Define los mensajes de solicitud y las respuestas en un archivo proto y compílalos.
- Crea un servidor gRPC para gestionar las solicitudes y devolver las respuestas. Debe escuchar la variable de entorno
PORT
. - Crea un cliente que envíe solicitudes y gestione las respuestas del servidor gRPC.
- Si quieres, añade la autenticación.
- Compila y despliega el servicio.
Definir y compilar mensajes en un archivo proto
No hay nada más que añadir a tus definiciones de proto que sea específico de Knative Serving. Al igual que con cualquier otro uso de gRPC, se utilizan buffers de protocolo de gRPC para las definiciones de servicios y la serialización de datos.
Crear un cliente gRPC
No hay que añadir nada específico de Knative Serving a un cliente que use gRPC: sigue las instrucciones de la documentación de gRPC sobre cómo usar definiciones de servicio en el código de cliente y los clientes de ejemplo que se proporcionan en los tutoriales de gRPC específicos de cada lenguaje.
Escuchar solicitudes gRPC en un servicio de Knative Serving
El único requisito especial para un servidor gRPC que se ejecute en Knative Serving es que use el puerto especificado por la variable de entorno PORT
tal como se muestra en el código:
Go
Abrir una conexión gRPC a un servicio
Para abrir una conexión gRPC a un servicio y poder enviar mensajes gRPC, debes especificar el dominio del host, que es la URL del servicio de Knative o el dominio personalizado asignado a ese servicio, junto con el puerto 443, que es el puerto que se espera que use gRPC.
Go
Enviar solicitudes gRPC sin autenticación
En el siguiente ejemplo se muestra cómo enviar una solicitud sin autenticación mediante una conexión gRPC configurada como se ha indicado anteriormente.