BKT en Producción: Auto Scaling en AWS

Uno de los puntos clave de todo servicio que funcione en Internet es contar con la capacidad para atender las peticiones de miles de usuarios al tiempo.

En este aspecto se dan dos temas: soporte a concurrencia y escalabilidad. En muchos casos la concurrencia está limitada por el lenguaje de programación que se use. La escalabilidad termina siendo un tema de arquitectura general del software.

Siendo bastante breve, para escalar se necesita poder incrementar el poder de los servidores donde se hospeda el programa. Sea incrementando la RAM, capacidad de disco duro, ancho de banda, cantidad de máquinas o distribución de los servidores en el mundo entero.

Afortunadamente, la oferta de empresas como Heroku y AWS, simplifican en gran parte el escalamiento mediante el llamada “Auto Scaling” o Escalamiento Automático.

Procedo a contar un poco de esto en AWS.

Auto Scaling en AWS

La experiencia que tengo con el auto escalamiento es usando servidores virtuales privados o VPS y por eso lo que contaré aplica más que nada para el servicio EC2.

Resulta que EC2 es un servicio base en AWS para muchas cosas incluso cuando se trata de aplicaciones desplegadas en contenedores (puesto que necesitas un huesped).

Hay algunas cosas que se necesitan previas a establecer reglas de auto escalamiento en AWS. Necesitamos:

  • Las máquinas en EC2
  • Un Balanceador de Carga en frente de estas
    • Los respectivos health checks para verificar el estado de cada máquina
  • Crear un Auto Scaling Group
  • Configurar Security Groups para que los servidores permitan peticiones del balanceador de carga
  • [Opcional] scripts de arranque para cada instancia
    • Esto se logra cuando se crea la AMI o imagen de servidor
  • Configurar las políticas de escalamiento en parejas: una política para agregar instancias, otra para remover.

Algunos términos que se mencionan mucho en la documentación de AWS son Scale Out y Scale In.

Scale Out significa agregar instancias para soporta un incremento de la carga del software.

Scale In significa remover las instancias previamente agregadas una vez el pico de peticiones disminuye. De esta forma se ahorra dinero al quitar servidores subutilizados.

Manteniendo las Máquinas Al Día

Dependiendo del proceso de despliegue puede que toque tomar medidas con respecto a cada máquina nueva lanzada durante un escalamiento automatizado.

Ocurre que en AWS, idealmente, tendrías una AMI para poder lanzar instancias de EC2. Dicha AMI tendría todas las configuraciones necesarias para correr tu aplicación en el servidor. También, durante cada despliegue normal, habrá scripts para descargar el código y correr los comandos necesarios para poner al día al servidor.

Es por esto que dependiendo del despliegue, puede pasar que durante un auto escalado resulte en unos servidores desactualizados sino pasan por el proceso normal de despliegue.

Cloud Deploy fue la herramienta que configuré en ese entonces y me ayudó mucho con eso porque la integración del Auto Scaling Group y EC2 pasaba por Code Deploy. De esta forma cada nueva máquina agregada en un proceso de escalamiento era instanciada como si fuera un despliegue de rutina.

Vale mencionar que dependiendo del software y de muchas configuraciones, configurar groupos de auto escalamiento puede ser una tarea sencilla o no. Aquí lo importante es leer bien la documentación, probar y tomar nota de donde se falle para mejorar.

Este artículo hace parte de la serie BKT en Producción donde cuento detalles de mis experiencias en un producto en producción sobre AWS y hecho en Ruby on Rails.

Autor: cesc1989

Ingeniero de Sistemas que le gusta escribir y compartir sobre recursos que considera útiles, además que le gusta leer manga y ver anime.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios .