Auto-escalado en Windows Azure con WASABi
En todas las presentaciones que hago de Windows Azure hay una pregunta que surge con frecuencia. ¿Qué ventaja me aporta Azure respecto a un hosting tradicional? Hay varios puntos que distinguen el cloud computing de un entorno de hosting pero una de los más evidentes es la “elasticidad”. Esto significa que en un entorno cloud puedo aumentar o disminuir los recursos de forma dinámica para adaptarme a la demanda que tengo en cada momento y reducir costes. ¿Y cómo hago esto en Windows Azure?
El Windows Azure Autoscaling Application Block (WASABi) permite añadir reglas de auto-escalado a cualquier aplicación que tenga alojada en Azure. Es un proyecto .NET de fuentes abiertas desarrollado por el grupo de Patterns & Practices de Microsoft. A pesar de ser un proyecto open source está pensado para que no sea necesario modificar su código fuente ya que toda la configuración y parametrización se puede hacer mediante ficheros XML de configuración. El bloque es independiente de las soluciones que quieras monitorizar pudiendo estar éstas desarrolladas con .NET, Java, PHP o cualquier otro lenguaje de programación. WASABi se puede desplegar en un Worker Role en Windows Azure pero también en un servidor local con conexión a Internet. WASABi forma parte del Enterprise Library 5.0 Integration Pack for Windows Azure y se puede descargar y acceder a toda la documentación desde este enlace.
A pesar de existir mucha documentación sobre el uso de WASABi, la primera que se despliega puede ser algo complejo ya que es necesario tener en cuenta muchos aspectos: certificados de seguridad, logging, gestión de errores, etc. Para hacer un poco más sencilla esta tarea, he creado un sencillo ejemplo que os podéis descargar al final de este post.
El esquema de alto nivel de la arquitectura del ejemplo es el siguiente:
En el fichero encontraréis 2 soluciones:
- AutoScalerDemoWeb: Simula la web de un restaurante online en la que se van creando pedidos (mensajes que se ponen en una cola de Azure Storage). En la vida real tendríamos probablemente un Worker Role procesando estos pedidos tal y como aparece en el esquema anterior. Sin embargo, por simplificar, en este ejemplo la propia web tiene un botón que permite ir procesando y eliminado los mensajes de la cola simulando las entregas de pedidos y omitiendo así la necesidad de tener un Worker Role externo y complicar más el ejemplo.
- AutoScalerDemo: En esta solución contamos con el código de WASABi. La inicialización del proceso en el fichero WorkerRole.cs son realmente 2 líneas como veréis:
this.autoscaler = EnterpriseLibraryContainer.Current.GetInstance<Autoscaler>();
this.autoscaler.Start();
Esto es así porque realmente donde configuro WASABi e indico las reglas de auto-escalado, la seguridad, los servicios a monitorizar, etc. es en los siguientes ficheros:
- ServiceConfiguration.Cloud.csfg
- Service Configuration.Local.csfg
- service-information-store.xml (este fichero deberé luego subirlo a una cuenta de BLOB storage)
- rules-store.xml (este fichero deberé luego subirlo a una cuenta de BLOB storage)
En esto ejemplo, básicamente WASABi lo que hace es monitorizar el número de mensajes que hay en la cola. Si éstos crecen por encima del número que defino en el fichero de reglas, WASABi da la orden de aumentar el número de instancias del Web Role simulando así un aumento de la capacidad. Es un ejemplo sólo ilustrativo ya que vemos que en este caso el aumentar el número de instancias del Web Role no serviría para nada realmente sino que habría que aumentar las instancias del Worker Role que procesa los pedidos (esto no forma parte del ejemplo). El ejemplo completo se puede descargar desde este enlace:
Para poder ejecutar y desplegar correctamente este ejemplo es necesario configurar certificados de seguridad, cuentas de almacenamiento, contenedores, colas, etc. Una vez descomprimido el fichero ZIP, en la carpeta raíz de cada proyecto hay un fichero leeme.txt con más información detallada al respecto. Se recomienda también haberse leído la documentación de configuración de WASABi para entender mejor cómo utilizar este componente. En un primer momento, recomiendo también desplegar el ejemplo con el Web Role en Windows Azure pero ejecutar WASABi desde el emulador local de Windows Azure. Funciona perfectamente y nos permitirá detectar y resolver más rápidamente cualquier error que hayamos podido cometer.
Ártículos adicionales que hablan sobre WASABi y que recomiendo leer:
- Auto-scaling Azure with WASABi–From the Ground Up
- Sencillez de autoescalado en Windows Azure con “WASABi”
ACTUALIZACIÓN (25/7/2012): Añadidos enlaces a artículos adicionales sobre el tema.