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

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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, consulta la siguiente entrada del blog Cómo escalar tus aplicaciones más rápido con 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 pool caliente es un conjunto de EC2 instancias preinicializadas que se encuentra junto a un grupo de Auto Scaling. 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 posibilidad de usar la configuración de tamaño mínimo (MinSize) para establecer de forma estática la cantidad mínima de instancias que se deben mantener en la piscina caliente. No hay un tamaño mínimo establecido de manera predeterminada. La MinSize configuración es útil cuando se especifica MaxGroupPreparedCapacity para garantizar que se mantenga un número mínimo de instancias en la piscina caliente, incluso cuando la capacidad deseada del grupo de Auto Scaling sea superior a laMaxGroupPreparedCapacity.

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.

Como alternativa, puede mantener las instancias en un Hibernated estado para detenerlas sin eliminar su contenido de memoria (RAM). Cuando una instancia está en hibernación, esto indica al sistema operativo que guarde su contenido en su RAM volumen EBS raíz de Amazon. Cuando se vuelve a iniciar la instancia, el volumen raíz se restaura a su estado anterior y el RAM contenido se vuelve a cargar. Mientras las instancias estén en hibernación, solo pagará por los EBS volúmenes, incluido el almacenamiento del RAM contenido, y por 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 el grupo de Auto Scaling se amplía. 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 su piscina caliente no esté sobreaprovisionada, Amazon EC2 Auto Scaling puede terminar las instancias de la piscina caliente para reducir su tamaño cuando sea más grande 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 el uso de AWS CLI o una. 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 shell 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, consulta Recuperar metadatos de instancias en la Guía del EC2 usuario de Amazon.

    sugerencia

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

    #cloud-config cloud_final_modules: - [scripts-user, always]
  • Para escenarios avanzados en los que necesite un servicio, por ejemplo, AWS Lambda para hacer algo cuando las instancias entren o salgan de la piscina caliente, puede crear un enlace de ciclo de vida para su grupo de Auto Scaling y configurar el servicio de destino para que realice acciones personalizadas basadas en las notificaciones del 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 las instancias de Auto Scaling para que usen el estado del Hibernated grupo, cree una nueva plantilla de lanzamiento o configuración de lanzamiento que esté configurada correctamente para admitir la hibernación de las instancias, tal y como se describe en el tema Requisitos previos de 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 Utilice 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. Todas las instancias nuevas se lanzan con las actualizaciones nuevas AMI y otras que se especifican en la plantilla de lanzamiento o en la configuración de lanzamiento, pero las instancias existentes no se ven 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 Utilice una actualización de instancias para actualizar instancias en un grupo de escalado automático.

Puedes visitar nuestro GitHubrepositorio para ver ejemplos de mejoras en el ciclo de vida de piscinas calientes.

Limitaciones

  • No puede agregar un grupo de calentamiento a un grupo de escalado automático que tiene una política de instancias mixtas. Tampoco puede agregar un grupo de calentamiento a un grupo de escalado automático que tenga una plantilla o una configuración de inicialización que solicite instancias de spot.

  • Amazon EC2 Auto Scaling puede colocar una instancia en un Hibernated estado Stopped o solo si tiene un EBS volumen de Amazon 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 solo puede colocar una instancia en un Hibernated estado si cumple todos los requisitos que se enumeran en el tema Requisitos previos de hibernación de la Guía EC2del usuario de Amazon.

  • 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 intentas utilizar una piscina caliente con un grupo de nodos gestionado por Amazon Elastic Kubernetes Service (EKSAmazon), es posible que las instancias que aún se estén inicializando se registren en tu 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 intentas usar una piscina caliente con un ECS clúster de Amazon, es posible que las instancias se registren 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.

  • El soporte de hibernación para piscinas calientes está disponible en todos los anuncios comerciales en los Regiones de AWS que Amazon EC2 Auto Scaling y la hibernación estén disponibles, excepto en los siguientes:

    • Asia-Pacífico (Hyderabad)

    • Asia-Pacífico (Melbourne)

    • Oeste de Canadá (Calgary)

    • Región China (Pekín)

    • Región China (Ningxia)

    • Europa (España)

    • Israel (Tel Aviv)