Prácticas recomendadas para las pruebas de carga

En esta página, se proporcionan prácticas recomendadas para probar la carga de tu servicio de Cloud Run a fin de determinar si se escala de forma correcta durante el uso de producción y encontrar cuellos de botella que impiden que se escale.

Pruebas que debes ejecutar antes de la prueba de carga

Identifica y aborda los problemas de simultaneidad en un entorno de desarrollo o de prueba pequeña antes de continuar con la prueba de carga. Mide la simultaneidad de los contenedores antes de realizar una prueba de carga y asegúrate de que el servicio de Cloud Run se inicie de manera confiable.

Enfoca las pruebas de contenedor en pequeños recuentos incrementales en ejecuciones escaladas de forma manual. Puedes calcular el escalamiento manual en Cloud Run si configuras las instancias máximas en el valor al que deseas escalar.

Si solo compilaste tu imagen de contenedor o la cambiaste recientemente, pruébala de forma independiente antes de realizar una prueba de carga.

También debes verificar otros tipos de problemas de rendimiento, como la latencia excesiva y el uso de CPU, antes de ejecutar una prueba de carga a gran escala.

Usa max instances de forma adecuada

Cloud Run aplica una cantidad máxima de instancias para limitar el escalamiento de un servicio. La cantidad máxima predeterminada de instancias es 100. Si esperas que tu prueba de carga exceda este valor predeterminado, asegúrate de trabajar con tu equipo de cuentas de Google y establecer un nuevo máximo. Si aún no tienes una relación con un equipo de cuentas, comunícate con Ventas de Google Cloud.

La cantidad máxima de instancias que puedes seleccionar depende de los límites de CPU y memoria, así como de la región en la que realizas la implementación.

Estos límites se administran mediante un límite de cuota y se pueden aumentar mediante una solicitud de aumento del límite de cuota.

Prueba de carga en la región us-central1

La región de Google Cloud us-central1 ofrece un límite de cuota alto, por lo que Google recomienda realizar pruebas de carga en us-central1. Coordina con el equipo de cuentas y envía un caso de ayuda con detalles del tiempo y la escala de la prueba si esperas alcanzar los límites de cuota.

Prueba un uso adecuado de CPU y un perfil de inicialización del servicio

En una situación ideal, implementarás una versión de prueba de tu servicio en Cloud Run y la probarás de forma directa. Sin embargo, en algunos casos, es posible que no puedas implementar una versión de prueba de tu servicio. Por ejemplo, el servicio de Cloud Run puede ser parte de un ecosistema complejo que es difícil de replicar en un entorno de prueba.

Para estos casos, puedes aproximar el rendimiento de tu servicio si lo simulas con un servicio más simple que tenga un uso de CPU y tiempos de inicialización comparables. El tiempo de inicialización es muy importante para el escalamiento rápido. Ten en cuenta que realizar pruebas con algo demasiado simple también es problemático. Por ejemplo, evita realizar pruebas con un servicio hello world simple que muestre solicitudes recibidas sin ningún procesamiento.

Usa un agente de prueba para generar cargas

Puedes generar cargas de prueba que causen un aumento repentino controlado en el tráfico mediante un agente de prueba, como JMeter. Puedes usar la cantidad de grupos de subprocesos de JMeter y el retraso entre las solicitudes en la prueba de JMeter para aumentar la carga.

También puedes enviar solicitudes HTTP simples o registrar una sesión del navegador con JMeter. Cloud Run te permite probar tu servicio sin acceso a Internet mediante la autenticación de desarrolladores. Esto permite el acceso desde un agente de prueba como JMeter, que se ejecuta en una máquina virtual de Compute Engine conectada a una nube privada virtual asociada con el proyecto.

No generes cargas a partir de herramientas en las que no se pueden controlar la tasa ni la simultaneidad. Pub/Sub es una mala opción para generar una carga porque no puedes controlar la tasa de tráfico ni la cantidad de clientes. Si no conoces la tasa ni la simultaneidad, no sabrás lo que estás probando.

Usa el análisis de registros detallado mediante los registros exportados

Necesitas un análisis de eventos por segundo para comprender la respuesta del servicio de Cloud Run a los aumentos repentinos de tráfico. Se necesita un análisis de registros para hacer esto, ya que el nivel de detalle de los datos de supervisión no es lo suficientemente detallado. El análisis de registros también te permite investigar los motivos de las solicitudes con latencia alta.

Cuando escribes registros, puedes mejorar el rendimiento de los registros si escribes directamente en stdout en lugar de usar una biblioteca cliente de Cloud Logging.

Para configurar una exportación de registros antes de comenzar la prueba, crea un receptor de registros con BigQuery de destino y un filtro de inclusión, como el siguiente:

resource.type="cloud_run_revision"
resource.labels.service_name="[your app]"

Evita inicios en frío falsos

Para minimizar los inicios en frío que experimentan los usuarios, establece la cantidad mínima de instancias en 1 como mínimo.

Asegúrate de que el servicio escale horizontalmente de forma lineal

Repite la prueba en diferentes cargas para asegurarte de que el servicio de Cloud Run escale horizontalmente de forma lineal con la carga y no alcance un cuello de botella limitante en una carga menor que la que esperas en la producción.

Analiza y visualiza los resultados en Colab

Usa los gráficos de supervisión de resumen para obtener una comprensión de alto nivel de los resultados para complementar el análisis de registros detallado con los registros exportados.

Los gráficos de supervisión pueden ayudarte a descubrir lo siguiente:

  • ¿Qué tan rápido (por segundo más cercano) se crean e inicializan las instancias nuevas?
  • ¿Qué tan uniformes se distribuyen las solicitudes en las diferentes instancias?
  • ¿Qué tan rápido se puede reducir la latencia en diferentes percentiles a un valor de estado estable?

Puedes usar la interfaz de usuario de la consola de Google Cloud para BigQuery a fin de realizar la introspección del esquema de registro exportado y la vista previa de los resultados. Ejecuta las consultas y traza los resultados mediante Colab, que tiene una integración lista con BigQuery, Pandas y Matplotlab. Colab también se integra fácilmente en herramientas de visualización de datos enriquecidas como Seaborn.

Detecta cuellos de botella

Las pruebas de carga pueden ayudarte a descubrir la existencia de código ineficiente y cuellos de botella en el escalamiento. Un código ineficiente genera costos más altos, ya que necesita controlar más tráfico, pero no necesariamente evita el escalamiento. Por ejemplo, una dependencia en una traducción de una base de datos con bloqueo a nivel de tabla puede ser un cuello de botella que impedirá que el servicio de Cloud Run escale porque solo se puede ejecutar una transacción a la vez.

Verifica el rendimiento según la experiencia del cliente

Puedes consultar los registros capturados por JMeter, en los que los registros incluyen latencias medidas en el cliente. Sin embargo, debido a que las herramientas de prueba del servidor como JMeter no son lo mismo que un navegador o un cliente para dispositivos móviles, también puedes ejecutar una prueba con un framework basado en el navegador, como Selenium Webdriver o un framework de pruebas de clientes de dispositivos móviles Ten cuidado con las latencias máximas excesivas debido a la inicialización de la conexión TLS, que puede sesgar los resultados con valores atípicos.

Resumen de prácticas recomendadas

Realiza una prueba de carga para determinar si migrar a Cloud Run es la opción correcta y que tu servicio puede escalar al tráfico máximo esperado. Ejecuta la prueba con un agente como JMeter. Exporta los registros a BigQuery para realizar un análisis detallado.

¿Qué sigue?