Siguiendo con la dinámica el último post, hoy intentaré aclarar otra de las preguntas con las que habitualmente me encuentro, el auto escalado dinámico.
Otra de las grandes características que hace de Windows Azure una plataforma de indudable interés es la elasticidad y flexibilidad que nos ofrece a la hora de desplegar nuestra aplicación en múltiples instancias.
Desplegar una aplicación en 1 o 100 máquinas es simplemente cambiar un fichero de configuración, cosa que se puede establecer en el momento del despliegue o a posteriori. Lógicamente, recordad que la facturación va en función del número de instancias, pago por uso.
De esta manera, un usuario de Azure puede modificar fácilmente el número de instancias de la aplicación en función de las necesidades de ésta, ya sea añadiendo o eliminando instancias.
Aumentar una instancia en un rol ya desplegado podría ser tan sencillo como estos comandos de powershell.
$cert = Get-Item cert:CurrentUserMy<Certificate ThumbPrint> $sub = <Azure Subcription Id> $servicename = <Service Name> Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub | Get-Deployment -Slot Production | Set-DeploymentConfiguration {$_.RolesConfiguration["WebSample"].InstanceCount += 1}
Cuando necesita más potencia la pone y cuando necesita menos la quita, consiguiendo entre otras cosas dos objetivos; pagar por aquello que realmente está usando y sobre todo, poder conseguir que la aplicación se pueda adaptar a la demanda y evitar que ésta pueda dejar de dar servicio. (eso sí, recordad que Windows Azure no hace milagros!)
Es en este momento dónde casi siempre sale la misma pregunta; ¿Se puede hacer que el añadir o eliminar instancia sea un proceso automático? Que no tenga que ser una persona la encargada de detectar las necesidades de la aplicación para aumentar o disminuir instancias, sino poder disponer de un sistema automático que detecte cuando es necesario modificar el número de instancias.
Generalmente esta necesidad viene de situaciones de picos impredecibles; tienes desplegada tu aplicación con N instancias y por cualquier motivo existe un punto en el tiempo, inesperado lógicamente, dónde debe aumentarse la capacidad de proceso. Si es un proceso manual, puede ocurrir que cuando el administrador se entere ya sea demasiado tarde.
A día de hoy no existe ninguna herramienta Microsoft que permita realizar auto escalado dinámico de instancias; No existe una herramienta que disponga de un sistema de reglas en las cuáles nosotros podamos configurar la lógica de escalado. Eso sí, tenemos alternativas.
La primera alternativa es la de siempre; Hacernos nosotros mismos una herramienta que disponga de la funcionalidad que necesitamos.
Windows Azure permite obtener diferente y muy variada información de diagnóstico y monitorización de las instancias desplegadas en Windows Azure. A partir de esta información, podemos construirnos una aplicación capaz de interpretar dicha información e implementar la lógica que consideremos adecuada para detectar cuando es necesario añadir o eliminar instancias de un determinado rol; Si el procesador está el 80% entonces añadir una instancia más.
Si esta solución os puede ser de interés podéis descargaros un ejemplo completo con código y documentación sobre cómo podría implementarse esta opción. Lógicamente es simplemente un ejemplo, pero puede serviros como punto de inicio.
La aplicación consiste en un cliente WPF que se conecta a una capa de servicios WCF que introduce mensajes en una cola para que worker rol los procese.
Pero si esta solución no os gusta, siempre se puede optar por usar herramientas de terceros que contengan la funcionalidad que necesitamos.
Una de las herramientas que disponen de la funcionalidad de auto escalado es AzureWatch. Es una herramientas comercial (pago por uso), que ofrece al usuario la posibilidad de configurar un sistema de reglas tan complejo como desee, para poder modificar el número de instancias desplegadas de un rol. Como es esperar, hace uso de la información que Windows Azure ofrece sobre diagnóstico y monitorización, lo mismo que comentábamos en el caso anterior.
Además de la funcionalidad de auto escalado, esta herramienta ofrece funcionalidad muy útil para monitorizar el estado de las aplicaciones Windows Azure, como podéis ver en los pantallazos que aquí os pongo y que podéis encontrar también en su portal web.
Espero que os sea de utilidad!