Optimiza las herramientas de redes (1a gen.)
La simplicidad de Cloud Run Functions te permite programar código rápidamente y ejecutarlo en un entorno sin servidores. A una escala moderada, el costo de ejecutar funciones es bajo, y puedes considerar que optimizar tu código no es una prioridad importante. Sin embargo, a medida que tu implementación aumenta su escala, optimizar tu código se vuelve cada vez más relevante.
En este documento, se describe cómo optimizar las Herramientas de redes para tus funciones. Algunos de los beneficios de optimizar las Herramientas de redes son los siguientes:
- Reduce el tiempo de CPU que se usa para establecer conexiones nuevas en cada llamada de función.
- Reduce la probabilidad de agotar las cuotas de DNS o de conexión.
Cómo mantener conexiones continuas
Esta sección muestra ejemplos sobre cómo mantener conexiones continuas en una función. No hacerlo puede causar que agotes tu cuota de conexión rápidamente.
En esta sección, se abordan los siguientes casos:
- HTTP/S
- API de Google
Solicitudes HTTP(S)
El fragmento de código optimizado de más abajo muestra cómo mantener la coherencia de las conexiones en lugar de crear una conexión nueva para cada invocación de función:
Node.js
Python
Go
PHP
Te recomendamos usar el framework de HTTP de Guzzle de PHP para enviar solicitudes HTTP, ya que controla las conexiones persistentes de forma automática.
Acceso a las API de Google
En el siguiente ejemplo, se usa Cloud Pub/Sub, pero este enfoque también sirve para otras bibliotecas cliente, como Cloud Natural Language o Cloud Spanner. Ten en cuenta que las mejoras de rendimiento pueden depender de la implementación actual de algunas bibliotecas cliente en particular.
Si se crea un objeto de cliente de Pub/Sub se genera una conexión y dos consultas de DNS por invocación. Para evitar consultas de DNS y conexiones innecesarias, crea el objeto de cliente de Pub/Sub en alcance global, como se indica en el siguiente ejemplo:
Node.js
Python
Go
Se restablece la conexión saliente
Las transmisiones de conexión de tu contenedor a Internet y VPC pueden finalizarse y reemplazarse de forma ocasional cuando se reinicia o actualiza la infraestructura subyacente. Si tu aplicación vuelve a usar conexiones de larga duración, te recomendamos entonces que configures tu aplicación para restablecer las conexiones para evitar la reutilización de una conexión inactiva.
Prueba la carga de tu función
Para medir cuántas conexiones ejecuta en promedio tu función, solo debes implementarla como una función de HTTP y usar un marco de trabajo de prueba de rendimiento para invocarla con una cierta cantidad de QPS. Una opción posible es Artillery, que puedes invocar con una sola línea:
$ artillery quick -d 300 -r 30 URL
Con este comando, se recupera la URL dada a 30 QPS por 300 segundos.
Después de ejecutar la prueba, verifica el uso de tu cuota de conexión en la página de cuotas de la API de Cloud Run Functions en la consola de Google Cloud. Si el uso se mantiene alrededor de 30 (o sus múltiplos), estás estableciendo una (o varias) conexiones en cada invocación. Después de optimizar el código, deberías ver que se ejecutan unas pocas conexiones (entre 10 y 30) solo al comienzo de la prueba.
También puedes comparar el costo de CPU antes y después de la optimización en el gráfico de cuota de CPU, en la misma página.