Usar el autoescalado con aplicaciones muy escalables

En este tutorial se explica cómo usar el autoescalado para ajustar automáticamente el número de instancias de VM que alojan tu aplicación, lo que permite que tu aplicación se adapte a diferentes cantidades de tráfico.

Para usar el autoescalado, aloja tu aplicación en un grupo de instancias gestionado. Un grupo de instancias gestionado es un conjunto de instancias que ejecutan la misma aplicación y que se pueden gestionar como una sola entidad. Cuando un grupo de instancias gestionadas tiene habilitado el autoescalado, el número de VMs del grupo de instancias aumenta (se escala horizontalmente) o disminuye (se escala verticalmente) automáticamente según el valor objetivo que especifiques para tu política de autoescalado.

En este tutorial se incluyen los pasos detallados para lanzar una aplicación web en un grupo de instancias gestionado, configurar el autoescalado, configurar el acceso a la red y observar el autoescalado simulando picos y descensos de carga. En función de tu experiencia con estas funciones, tardarás unos 20 minutos en completar este tutorial.

Arquitectura de aplicaciones

La aplicación incluye los siguientes componentes de Compute Engine:

Iniciar la aplicación web

En este tutorial se usa una aplicación web almacenada en GitHub. Si quieres obtener más información sobre cómo se ha implementado la aplicación, consulta el repositorio GoogleCloudPlatform/python-docs-samples en GitHub.

Inicia la aplicación web en todas las VMs de un grupo de instancias gestionado incluyendo un script de inicio en una plantilla de instancia. Para permitir el tráfico HTTP a la aplicación web, crea una regla de cortafuegos.

Crear una regla de cortafuegos

Crea una regla de cortafuegos para permitir el tráfico HTTP a la aplicación web:

  1. En la Google Cloud consola, ve a la página Cortafuegos.

    Ir a Cortafuegos

  2. Haz clic en Crear regla de cortafuegos.

  3. En Name (Nombre), introduce default-allow-http.

  4. Selecciona Red y, a continuación, default.

  5. En Objetivos, seleccione Specified target tags.

  6. En Etiquetas de destino, introduzca http-server.

  7. Defina Filtro de fuente como IPv4 ranges.

  8. En Intervalos de IPv4 de origen, introduce 0.0.0.0/0.

    para permitir el acceso a todas las direcciones IP.

  9. En Protocolos y puertos, selecciona Protocolos y puertos especificados. A continuación, selecciona TCP e introduce 80 para permitir el acceso al tráfico HTTP.

  10. Haz clic en Crear.

Crear una plantilla de instancia

Crea una plantilla de instancia que inicie la aplicación web de demostración al arrancar:

  1. En la consola, ve a la página Plantillas de instancia. Google Cloud

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancia.

  3. En Name (Nombre), introduce autoscaling-web-app-template.

  4. En Configuración de la máquina, selecciona e2-standard-2 en Tipo de máquina.

  5. En Cortafuegos, selecciona la casilla Permitir el tráfico HTTP. Esto aplica la etiqueta de red http-server a cada instancia creada a partir de esta plantilla.

  6. Despliega la sección Opciones avanzadas para ver la configuración avanzada.

  7. Despliega la sección Gestión.

  8. En la sección Automatización, introduce la siguiente secuencia de comandos de inicio:

    sudo apt update && sudo apt -y install git gunicorn3 python3-pip
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/compute/managed-instances/demo
    sudo pip3 install -r requirements.txt
    sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
    

    Esta secuencia de comandos hace que cada máquina virtual ejecute la aplicación web durante el inicio.

  9. Haz clic en Crear.

Crear un grupo de instancias gestionado

Crea un grupo de instancias regional para empezar a ejecutar la aplicación web:

  1. En la consola, ve a la página Grupos de instancias. Google Cloud

    Ir a Grupos de instancias

  2. Haz clic en Crear grupo de instancias para crear un grupo de instancias.

  3. Selecciona Nuevo grupo de instancias gestionado (sin reconocimiento del estado).

  4. En Nombre, escribe autoscaling-web-app-group.

  5. En Plantilla de instancia, selecciona autoscaling-web-app-template.

  6. En Ubicación, selecciona Varias zonas.

  7. En Región, selecciona us-central1.

  8. En Zonas, selecciona las siguientes zonas de la lista desplegable:

    • us-central1-b
    • us-central1-c
    • us-central1-f
  9. Configura el autoescalado del grupo de instancias:

    1. En Modo de autoescalado, selecciona Activado: añade y quita instancias del grupo.
    2. Define el Número mínimo de instancias en 3.

    3. Define Número máximo de instancias como 6.

    4. Define el periodo de inicialización en 120 segundos.

    5. En Métricas de autoescalado, selecciona Uso de CPU como tipo de métrica. Para obtener más información sobre las métricas de autoescalado, consulta Política de autoescalado.

    6. Define el Uso de CPU objetivo en 60.

    7. Haz clic en Listo.

  10. En Autorreparación, selecciona Sin comprobación del estado en la lista desplegable Comprobación del estado.

  11. Haz clic en Crear. Se te redirigirá a la página Grupos de instancias.

  12. Para verificar que tus instancias se están ejecutando, haz lo siguiente:

    1. En la página Grupos de instancias de la Google Cloud consola, haz clic en autoscaling-web-app-group para ver las instancias de ese grupo.
    2. En IP externa, haz clic en una dirección IP para conectar esa instancia. Se abrirá una nueva pestaña del navegador con la aplicación web de demostración:

      Aplicación web de demostración que muestra información sobre la instancia y tiene botones de acción.

      Cuando hayas terminado, cierra la pestaña del navegador de la aplicación web de demostración.

Observar el autoescalado

Para obtener más información sobre el comportamiento del ajuste de escala automático, consulte Entender las decisiones de las herramientas de adaptación dinámica.

Monitorizar el autoescalado

El grupo de instancias que has creado usa una política de autoescalado basada en el uso de la CPU. Esto significa que la herramienta de adaptación dinámica aumenta o reduce el tamaño del grupo según sea necesario para mantener el uso de la CPU objetivo del 60%.

Para monitorizar el tamaño y la utilización de la CPU de tu grupo de instancias, usa los gráficos de autoescalado de la consola: Google Cloud

  1. En la página Grupos de instancias del grupo de instanciasautoscaling-web-app-group, haz clic en la pestaña Monitorización.
  2. Puedes monitorizar el autoescalado en el gráfico Tamaño del grupo. El gráfico muestra las Instancias, que representan el número de instancias de VM del grupo a lo largo del tiempo.
  3. Opcional: Para monitorizar la capacidad autoescalada en comparación con el uso, consulta el gráfico Uso del autoescalador (CPU). El gráfico muestra la Utilización, que es la utilización total de la CPU de las instancias de VM del grupo, y la Capacidad, que es la utilización de la CPU objetivo acumulada del grupo (utilización de la CPU objetivo multiplicada por el número de instancias de VM).

    El autoescalado intenta que la capacidad coincida con la utilización cambiando el número de instancias, cuando sea posible.

Mantén esta ventana abierta.

Simular escalado horizontal

El escalado horizontal se produce cuando la utilización media de la CPU del grupo de instancias es significativamente superior al valor objetivo. Durante el escalado horizontal, el autoescalador aumenta gradualmente el tamaño del grupo de instancias hasta que el uso de la CPU disminuye hasta el valor de uso de la CPU objetivo o hasta que el tamaño del grupo de instancias es igual al Número máximo de instancias, que se ha definido en 6.

Para activar el escalado horizontal, aumenta la utilización de la CPU de tus instancias:

  1. En la Google Cloud consola, abre Cloud Shell.

    Abrir Cloud Shell

    Cloud Shell se abre en la parte inferior de la Google Cloud consola. La sesión puede tardar unos segundos en inicializarse.

  2. Crea una variable bash local para el ID del proyecto:

    export PROJECT_ID=[PROJECT_ID]
    

    donde PROJECT_ID es el ID del proyecto actual, que se muestra en cada línea nueva de Cloud Shell:

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. Ejecuta la siguiente secuencia de comandos bash. Esta secuencia de comandos provoca que las instancias de la aplicación web de demostración tengan una carga mayor, lo que aumenta el uso de la CPU. Al cabo de unos minutos, el uso de la CPU superará el valor objetivo, lo que provocará que el autoescalado aumente el tamaño del grupo de instancias.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating high load for instance $NAME"
      curl -q -s "http://$IP/startLoad" >/dev/null --retry 2
    done
    
  4. Abre la pestaña Monitorización en la Google Cloud consola.

    Al cabo de unos minutos, en la pestaña Monitorización se muestra que la utilización de la CPU ha aumentado, lo que activa el autoescalado para incrementar la capacidad aumentando el número de instancias.

    También puede observar que ahora se muestran 6 instancias en la pestaña Resumen.

Mantén ambas ventanas abiertas.

Simular escalado horizontalmente descendente

El escalado horizontal se produce cuando el uso medio de la CPU del grupo de instancias es significativamente inferior al valor objetivo. Durante la reducción de escala, el autoescalador disminuye gradualmente el tamaño del grupo de instancias hasta que el uso de la CPU aumenta hasta el uso de la CPU objetivo o hasta que el tamaño del grupo de instancias es igual al número mínimo de instancias, que se ha definido en 3.

Para activar el escalado horizontal, reduce la utilización de la CPU de tus instancias:

  1. Ejecuta la siguiente secuencia de comandos bash. Esta secuencia de comandos hace que las instancias de la aplicación web de demostración tengan una carga menor, lo que reduce el uso de la CPU. Al cabo de unos minutos, el uso de la CPU será inferior al valor objetivo, por lo que el autoescalador reducirá el tamaño del grupo de instancias.

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating low load for instance $NAME"
      curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2
    done
    
  2. Abre la pestaña Monitorización en la Google Cloud consola.

    Al cabo de unos minutos, en la pestaña Monitorización se muestra que la utilización de la CPU ha disminuido. Después del periodo de estabilización, en el que se verifica que la carga es constantemente inferior, el autoescalado reduce la capacidad disminuyendo el número de instancias.

    También puede que observes que solo se muestran tres instancias en la pestaña Resumen.

Cierra ambas ventanas cuando hayas terminado.