El pasado 13 de febrero de 2013 TVE emitió el programa Comando Actualidad hablando sobre consumo colaborativo. Una pequeña parte del programa mostró el funcionamiento de etece a través del día a día de nuestro trabajo y el de algunos solucionadores.
Con independencia del impacto en el negocio, quiero compartir el impacto que tuvo en nuestra infraestructura, cómo planificamos la escalabilidad y qué hicimos bien y mal, esperando que sea útil para otras empresas que vayan a pasar por situaciones similares.
Cómo está montada nuestra infraestructura
Tal y como comentaba en un post anterior, nuestra infraestructura está en la nube de Amazón. Una de las características que ofrece es la capacidad de auto escalado en función de la carga que están soportando las máquinas virtuales EC2. Para poderte beneficiar de esta característica, la arquitectura debe estar concebida para ello. No voy a entrar en detalle sobre cómo montar grupos de auto escalado porque ya hay mucha literatura al respecto y no es el propósito de este post. No obstante, si alguien quiere que lo detalle, lo haré sin problema.
Nuestro grupo de auto escalado está configurado para tener como mínimo una máquina, ya que normalmente tenemos poco tráfico, añadiendo una máquina cada vez que la CPU de las máquinas que forman el grupo supera el 75% de carga. Este chequeo de la carga de la CPU del grupo se hace cada minuto (no se puede configurar cada menos). Eso quiere decir que, ante un pico de carga, escalamos añadiendo una máquina por minuto. Teniendo en cuenta que en levantar una nueva máquina lleva entre 20 y 30 segundos, desde que se supera el umbral de carga, tardamos 30 segundos como mínimo y 90 como máximo en incrementar el número de máquinas.
Cómo nos preparamos para el presumible pico de tráfico
Presuponiendo que salir en TV nos iba a suponer un pico de tráfico, modificamos el grupo para que tuviera como mínimo 10 máquinas. En Amazón se paga por tiempo de uso de las máquinas (además de tráfico y alguna cosa más) por lo que tener muchas máquinas durante un rato sólo supone un sobrecoste de unos pocos euros. Además, al salir en TV se producen unos picos de carga muy agudos por lo que más valía prevenir que… morir de éxito.
Qué pasó
Pues pasó lo previsible. No soportamos el pico que se produjo, el escalado, añadiendo una máquina por minuto fue demasiado lento y estuvimos caídos durante unos tres minutos. A partir de ahí fuimos remontando y pudimos volver a estar operativos.
A toro pasado parece obvio que las cosas iban a suceder así, pero antes del momento no lo teníamos tan claro.
Conclusiones
Después de soltar la chapa, esta es la parte más interesante del post. Analizando lo sucedido e intentando aprender de los errores, estas son las conclusiones que hemos sacado:
- Nuestra configuración de auto escalado está bien para el día a día, cuando no sales en prime time en TV pero no es correcta ante grades picos de carga muy agudos.
- En este tipo de casos hubiera sido mucho más correcto escalar de cinco en cinco máquinas.
- Tener un único umbral de auto escalado no es suficiente. Si quieres cubrir picos moderados y grandes sin matar moscas a cañonazos lo mejor es establecer tres umbrales: uno que levante una máquina, el segundo que levante dos máquinas y el último que levante cinco. Los valores de los umbrales podrían ser 60, 75 y 90% de carga de CPU aunque habría que verlo en cada caso.
Otro tema importante es cuándo parar las máquinas que se han levantado una vez que pasa el pico de carga. Nosotros paramos una máquina cada tres minutos siempre que la carga de CPU del grupo esté por debajo del 40%. Esto supone parar tres veces más lento que levantamos. Nos pareció un valor correcto aunque no hay ninguna ciencia detrás de ello y todavía tenemos pendiente optimizarlo.
El tema de la escalabilidad me parece apasionante así que iré escribiendo más sobre cómo afrontamos este tema en etece tanto a nivel de software como de hardware.
Hola Daniel,
Como dices el autoscaling en casos como anuncios de TV es algo bastante complicado simplemente porque es muy complicado predecir cuantos usuarios entrarán a tu site en un momento dado.
Nosotros lo hemos vivido en un par de ocasiones y ha sido prácticamente desastroso ya que nuestra aplicación no estaba preparada para escalar en casi ningún aspecto.
Durante los últimos meses he hablado muchísimo con gente de Amazon y Netflix sobre este tema y la conclusión es que medir el autoscaling por load de CPU no es una #bestpractice por decirlo de alguna forma.
Según recomendación de los Evangelistas de AWS la mejor métrica para esto es nada mas y nada menos que el NetworkOut y hasta ahora nos ha funcionado muy bien no se si la has probado quizás os ayude.
Demás está decir que todos los que tiramos del autoscaling hemos pasado los mismos problemas así que no os frustreis que es parte del día a día 😉
Gracias Rhommel, un comentario muy interesante. Haremos las pruebas a ver si nos funciona mejor.
Pingback: El health check del ELB de AWS no sigue las redirecciones | Blog de Daniel Brandi