Reducción de la latencia de las aplicaciones con tiempos de arranque prolongados mediante grupos de calentamiento - Amazon EC2 Auto Scaling

Reducción de la latencia de las aplicaciones con tiempos de arranque prolongados mediante grupos de calentamiento

Un grupo de calentamiento le permite reducir la latencia de las aplicaciones que tienen tiempos de arranque excepcionalmente prolongados, por ejemplo, porque las instancias tienen que escribir cantidades masivas de datos en el disco. Con los grupos de calentamiento, ya no tiene que aprovisionar en exceso los grupos de Auto Scaling para administrar la latencia con el fin de mejorar el rendimiento de las aplicaciones. Para obtener más información, consulte la siguiente entrada del blog Scaling your applications faster with EC2 Auto Scaling Warm Pools.

importante

Crear un grupo de calentamiento cuando no es necesario puede generar costos innecesarios. Si el primer tiempo de arranque de la aplicación no causa problemas de latencia detectables, probablemente no sea necesario que use un grupo de calentamiento.

Conceptos clave

Antes de empezar, familiarícese con los siguientes conceptos clave:

Grupo de calentamiento

Un grupo de calentamiento es un grupo de instancias de EC2 inicializadas previamente que se encuentra junto a un grupo de escalado automático. Siempre que la aplicación tenga que escalarse horizontalmente, el grupo de escalado automático puede recurrir al grupo de calentamiento para satisfacer su nueva capacidad deseada. Esto ayuda a garantizar que las instancias estén listas para comenzar a atender rápidamente el tráfico de las aplicaciones, lo que acelera la respuesta a un evento de escalado horizontal. A medida que las instancias salgan del grupo de calentamiento, cuentan para alcanzar la capacidad deseada del grupo. Esto se conoce como arranque en caliente.

Mientras las instancias se encuentran en el grupo de preparación, las políticas de escalado solo escalan horizontalmente si el valor de la métrica de las instancias con estado InService es mayor que el umbral superior de la alarma de la política de escalado (que es el mismo que la utilización de objetivo de una política de escalado de seguimiento de objetivo).

Tamaño del grupo de calentamiento

De forma predeterminada, el tamaño del grupo de calentamiento se calcula como la diferencia entre la capacidad máxima del grupo de escalado automático y la capacidad deseada. Por ejemplo, si la capacidad deseada de su grupo de escalado automático es 6, y la capacidad máxima es 10, el tamaño del grupo de calentamiento será 4 cuando configure el grupo de calentamiento por primera vez y el grupo se inicialice.

Para especificar la capacidad máxima del grupo de calentamiento por separado, utilice la opción de especificación personalizada (MaxGroupPreparedCapacity) y establezca un valor personalizado que sea mayor que la capacidad actual del grupo. Si especifica un valor personalizado, el tamaño del grupo de calentamiento se calcula como la diferencia entre el valor personalizado y la capacidad actual deseada del grupo. Por ejemplo, si la capacidad deseada de su grupo de escalado automático es 6, si la capacidad máxima es 20, y si el valor personalizado es 8, el tamaño del grupo de calentamiento será 2 cuando configure el grupo de calentamiento por primera vez y el grupo se inicialice.

Es posible que solo necesite usar la especificación personalizada (MaxGroupPreparedCapacity) cuando trabaje con grupos de escalado automático grandes para administrar la rentabilidad de tener un grupo de calentamiento. Por ejemplo, un grupo de escalado automático con 1000 instancias, una capacidad máxima de 1500 (para proporcionar una capacidad adicional para picos de tráfico de emergencia), y un grupo de calentamiento de 100 instancias podría servirle para alcanzar sus objetivos mejor que mantener 500 instancias reservadas para el uso futuro dentro del grupo de calentamiento.

Tamaño mínimo de grupo de calentamiento

Considere la opción de usar la configuración de tamaño mínimo (MinSize) para establecer de forma estática el número mínimo de instancias que se mantendrán en el grupo en caliente. No hay un tamaño mínimo establecido de manera predeterminada. La configuración MinSize es útil cuando se especifica MaxGroupPreparedCapacity para garantizar que se mantenga una cantidad mínima de instancias en el grupo en caliente, incluso cuando la capacidad deseada del grupo de escalado automático sea mayor que MaxGroupPreparedCapacity.

Estado de la instancia del grupo de calentamiento

Puede mantener las instancias en el grupo de calentamiento en uno de tres estados: Stopped, Running o Hibernated. Mantener las instancias en un estado Stopped es una manera efectiva de minimizar los costos. Con las instancias detenidas, solo paga por los volúmenes que utiliza y las direcciones IP elásticas adjuntas a las instancias.

También puede mantener las instancias en un estado Hibernated para detener instancias sin eliminar el contenido de la memoria (RAM). Cuando se hiberna una instancia, esto indica al sistema operativo que guarde el contenido de la RAM en el volumen raíz de Amazon EBS. Cuando se reinicia la instancia, el volumen raíz se restaura a su estado anterior y el contenido de la RAM se vuelve a cargar. Mientras las instancias están en hibernación, solo paga por los volúmenes de EBS, incluido el almacenamiento del contenido de la RAM y las direcciones IP elásticas adjuntas a las instancias.

Mantener las instancias en un estado Running dentro del grupo de calentamiento también es posible, pero se desaconseja encarecidamente evitar incurrir en cargos innecesarios. Cuando las instancias se detienen o hibernan, ahorra el costo de las mismas instancias. Solo paga por las instancias cuando se están ejecutando.

Enlaces de ciclo de vida

Los enlaces de ciclo de vida se usan para poner instancias en estado de espera a fin de poder realizar acciones personalizadas en las instancias. Las acciones personalizadas se realizan a medida que se lanzan las instancias o antes de que finalicen.

En la configuración de un grupo en caliente, los enlaces de ciclo de vida retrasan la detención o la hibernación de las instancias, así como su puesta en servicio, durante un evento de escalado horizontal hasta que hayan terminado de inicializarse. Si agrega un grupo de calentamiento al grupo de escalado automático sin un enlace de ciclo de vida, las instancias que tardan mucho tiempo en finalizar la inicialización se podrían detener o hibernar y, a continuación, poner en servicio durante un evento de escalado horizontal antes de que estén listas.

Política de reutilización de instancias

De forma predeterminada, Amazon EC2 Auto Scaling termina las instancias cuando se escala el grupo de escalado automático. A continuación, lanza nuevas instancias en el grupo de calentamiento para reemplazar las instancias que se terminaron.

Si desea devolver instancias al grupo de calentamiento, puede especificar una política de reutilización de instancias. Esto le permite reutilizar instancias que ya están configuradas para atender el tráfico de aplicaciones. Para asegurarse de que el grupo de calentamiento no esté sobreaprovisionado, Amazon EC2 Auto Scaling puede terminar instancias del grupo de calentamiento para reducir su tamaño cuando es mayor de lo necesario en función de su configuración. Al terminar instancias en el grupo de calentamiento, utiliza la política de terminación predeterminada para elegir qué instancias terminará primero.

importante

Si desea hibernar instancias durante la reducción horizontal y hay instancias existentes en el grupo de escalado automático, deben cumplir los requisitos de hibernación de instancias. Si no lo hacen, cuando las instancias regresen al grupo de calentamiento, volverán a detenerse en lugar de hibernar.

nota

Actualmente, solo puede especificar una política de reutilización de instancias mediante la AWS CLI o un SDK. Esta característica no está disponible desde la consola.

Requisitos previos

Antes de crear un grupo en caliente para su grupo de escalado automático, decida cómo utilizará los enlaces de ciclo de vida para inicializar nuevas instancias con un estado inicial adecuado.

Para realizar acciones personalizadas en las instancias mientras están en estado de espera debido a un enlace de ciclo de vida, tiene dos opciones:

  • Para escenarios sencillos en los que desea ejecutar comandos en las instancias durante el lanzamiento, puede incluir un script de datos de usuario al crear una plantilla de lanzamiento o una configuración de lanzamiento para el grupo de escalado automático. Los scripts de datos de usuario son solo scripts de intérprete de comandos normales o directivas cloud-init que ejecutan cloud-init cuando se inician las instancias. El script también puede controlar cuándo las instancias realizan la transición al siguiente estado utilizando el ID de la instancia en la que se ejecuta. Si aún no lo ha hecho, actualice el script para recuperar el ID de instancia de la instancia de los metadatos de instancia. Para obtener más información, consulte Metadatos de instancia de acceso en la Guía del usuario de Amazon EC2.

    sugerencia

    Para ejecutar scripts de datos de usuario cuando se reinicia una instancia, estos datos deben tener el formato multiparte MIME y especificar lo siguiente en la sección #cloud-config de los datos de usuario:

    #cloud-config cloud_final_modules: - [scripts-user, always]
  • Para escenarios avanzados en los que necesita un servicio como AWS Lambda para hacer algo mientras las instancias entran o salen del grupo de calentamiento, puede crear un enlace de ciclo de vida para su grupo de escalado automático y configurar el servicio de destino para que realice acciones personalizadas basadas en notificaciones de ciclo de vida. Para obtener más información, consulte Destinos de notificación admitidos.

Preparación de instancias para la hibernación

Para preparar instancias de escalado automático para utilizar el estado de grupo Hibernated, cree una nueva plantilla o una configuración de inicialización que esté configurada correctamente para admitir la hibernación de instancias, como se describe en el tema Requisitos previos de la hibernación de la Guía del usuario de Amazon EC2. A continuación, asocie la nueva plantilla de lanzamiento o configuración de lanzamiento con el grupo de escalado automático e inicie una actualización de instancias para reemplazar las instancias asociadas con una plantilla de lanzamiento o configuración de lanzamiento anterior. Para obtener más información, consulte Uso de una actualización de instancias para actualizar instancias en un grupo de escalado automático.

Actualización de las instancias de un grupo en caliente

Para actualizar las instancias de un grupo en caliente, cree una nueva plantilla de lanzamiento o configuración de lanzamiento y asóciela al grupo de escalado automático. Las nuevas instancias se lanzan con la nueva AMI y otras actualizaciones especificadas en la plantilla de lanzamiento o configuración de lanzamiento, pero las instancias existentes no resultan afectadas.

Puede iniciar una actualización de instancias para hacer una actualización de su grupo a fin de forzar el lanzamiento de instancias de reemplazo de grupo en caliente que utilicen la nueva plantilla de lanzamiento o configuración de lanzamiento. Una actualización de instancia reemplaza primero las instancias InService. Luego reemplaza las instancias en el grupo de calentamiento. Para obtener más información, consulte Uso de una actualización de instancias para actualizar instancias en un grupo de escalado automático.

Puede visitar nuestro Repositorio de GitHub para ver ejemplos de enlaces de ciclo de vida para grupos en caliente.

Limitaciones

  • Limitaciones de los grupos en caliente para un grupo de escalado automático con tipos de instancias mixtos:

    • Los grupos en caliente no son compatibles con los grupos de instancias mixtos ponderados. Si su grupo de escalado automático usa la ponderación de instancias, no puede agregar un grupo en caliente.

    • Los grupos en caliente no son compatibles con las instancias de spot en grupos de instancias mixtos. Su política de instancias mixtas debe configurarse para las instancias bajo demanda solo cuando utilice grupos en caliente.

    • Si utiliza grupos en caliente con grupos de instancias mixtos en estado de hibernación, debe configurar HibernationOptions en su plantilla de lanzamiento.

  • Amazon EC2 Auto Scaling puede poner una instancia en un estado Stopped o Hibernated solo si tiene un volumen de Amazon EBS como dispositivo raíz. Las instancias que utilizan almacenes de instancias para el dispositivo raíz no se pueden detener o hibernar.

  • Amazon EC2 Auto Scaling puede colocar una instancia en un estado Hibernated solo si cumple todos los requisitos enumerados en el tema Requisitos previos de la hibernación de la Guía del usuario de Amazon EC2.

  • Si el grupo de calentamiento se agota cuando hay un evento de escalado horizontal, las instancias se iniciarán directamente en el grupo de escalado automático (un arranque en frío). También puede experimentar arranques en frío si no queda capacidad en una zona de disponibilidad.

  • Si una instancia del grupo de calentamiento encuentra un problema durante el proceso de inicialización, que le impide que alcance el estado InService, la instancia se considerará una inicialización fallida y se cancelará. Esto se aplica independientemente de la causa subyacente, como un error de capacidad insuficiente o cualquier otro factor.

  • Si intenta utilizar un grupo de calentamiento con un grupo de nodos administrados de Amazon Elastic Kubernetes Service (Amazon EKS), puede que las instancias que aún estén inicializándose se registren con el clúster de Amazon EKS. Como resultado, puede que el clúster programe trabajos en una instancia que se está preparando para detenerse o hibernarse.

  • Del mismo modo, si intenta utilizar un grupo de calentamiento con un clúster de Amazon ECS, las instancias pueden registrarse en el clúster antes de que terminen de inicializarse. Para resolver este problema, debe configurar una plantilla de lanzamiento o una configuración de lanzamiento que incluya una variable de configuración de agente especial en los datos de usuario. Para obtener más información, consulte Uso de un grupo de calentamiento para el grupo de escalado automático en la Guía para desarrolladores de Amazon Elastic Container Service.