Windows Azure Caching (Preview) I: Introducción y análisis de la caché “Co-located”

imageAzureCachingPreview_Shared

Desde hace ya un tiempo Windows Azure cuenta con un sistema de Cache (o Caching) denominado “Windows Shared Azure Cache”, sin embargo junto a las nuevas carácterísticas, ahora es posible conseguir hacer uso de Caché en nuestras arquitecturas de una manera mucho más fácil e intuitiva.  Eso si, antes de continuar, es conveniente saber que, “Windows Azure Caching (Preview)” no esta soportado aún en entornos de Producción, no obstante, lo estará en breve !

Windows Azure Caching puede reducir el coste e incrementar la escalabilidad de otros almacenes tales como SQL Azure o Azure Storage.

Pero, ¿Cúal es la diferecia entre Windows Shared Azure Cache y Windows Azure Caching (Preview)? Pues bien, la diferencia principal radique en que el primero se trata de un Servicio de Cloud dedicado mientras que el segundo, es configurado dentro de una máquina específica (asignando un porcentaje de recursos de la misma) o configurado dedicando una máquina virtual explicitamente para este propósito. A estos dos tipos se le denomintan Cache “Co-located” y “Dedicated” respectivamente.

Para el primer tipo (Windows Shared Azure Cache) existen laboriatorios On-Line que ejemplifican claramente su uso:

Vemos ahora un poco más en detalle, cuales son los dos tipos de topologías de Azure Caching Preview y las diferencias entre ellas:

  • Modo Co-located. La caché comparte los recursos de la VM de Azure: CPU, Memoria,  y ancho de banda junto a la aplicación hosteada.
    • Caché basada en Memoria.
    • No soporta Notificaciones. Eventos asíncronos producidos por operaciones que ocurren en el cluster de caché.
    • No permite evitar la política de desalojo o “Eviction” en caso de “llenado” de la caché, y por tanto, siempre tendrá el valor LRU: “Least recently used”
  • Modo Dedicado.  Instancias de un role dedicado explicitamente para caché.
    • Orientado a Caché Distribuido y basado en Microsoft AppFabric 1.1
    • Soporta Notificaciones
    • Permite deshabilitar la política de “Eviction
    • Alta disponibilidad
    • Soporta Regiones (subgrupos de items de cache) y Tags (anotaciones descriptivas sobre los items de cache), muy utilies para búsquedas dentro de una region.

En este enlace podemos encontrar más detalle sobre las diferencias en cuanto al uso del API  de Caching (Co-located Caching VS Role-based Caching (Preview)).

A continuación, como configurar el tipo de Caché “Co-Located”:

Creamos un proyecto de tipo “Windows Azure Cloud Service” desde Visual Studio con el nombre “WindowsAzureSharedCache” y elegimos un Role de tipo “Asp.Net MVC 4 Web Role” (Razor) manteniendo el nombre, “MvcWebRole1”:

image

Creamos un Controller y las vistas adecuadas para el tratamiento de la Caché además de incluir una nueva opción de menú “Caching” en “_Layout.cshtml

image

Incluimos en el controller el siguiente código:

   1: [HttpPost]

   2: public ActionResult Save(CacheModels model, string returnUrl)

   3: {

   4:     if (ModelState.IsValid)

   5:     {

   6:         DataCacheFactory cacheFactory = new DataCacheFactory();

   7:         DataCache cache = cacheFactory.GetDefaultCache();

   8:  

   9:         // Save data in Azure Caching

  10:         cache.Put(cacheKey1, model.DataToCache);

  11:  

  12:         if (Url.IsLocalUrl(returnUrl))                

  13:             return Redirect(returnUrl);                

  14:         else                

  15:             return RedirectToAction("Load", "Caching");                

  16:     }            

  17:     return View(model);

  18: }

  19:  

  20: public ActionResult Load()

  21: {

  22:     DataCacheFactory cacheFactory = new DataCacheFactory();

  23:     DataCache cache = cacheFactory.GetDefaultCache();

  24:  

  25:     var result = cache.Get(cacheKey1) as string;

  26:  

  27:     ViewBag.CacheValue = result;

  28:  

  29:     return View();

  30: }

Configuramos las opciones de caché desde las propiedades del proyecto :

image

Para el proyecto ASP.NET MVC, añadir las referencias  a “Windows Azure Caching Preview” usando “Manager NuGet Packages…”.

image

El paso anterior, nos facilitará el camino evitanto tener que añadir manualmente las referencias siguiente:

image

Además de la siguiente configuración del “web.config”:

   1: <configSections>

   2:    <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere" />   

   3:  </configSections>

   4:  <connectionStrings>

   5:  

   6: <dataCacheClients>

   7:    <tracing sinkType="DiagnosticSink" traceLevel="Error" />

   8:    <dataCacheClient name="default">

   9:      <autoDiscover isEnabled="true" identifier="MvcNewAzureStore" />     

  10:      <!--<localCache isEnabled="true" sync="TimeoutBased" objectCount="100000" ttlValue="300" />-->

  11:    </dataCacheClient>

  12:  </dataCacheClients>

Llegado este punto, unicamente es nesario tener en cuenta el parámetro “identifier” de la sección <autoDiscover> anterior, que coincidirá con el nombre del Role de Azure (“MvcWebRole1” según nuestro ejemplo):

image

Para comprobar que estamos haciendo uso de Cache de tipo “Co-located”, hacemos un deploy en Azure habilitando la conexión remota.

image

Una vez hemos realizado el despligue en Azure, podemos observar que el tiempo de despligue es un poco superior, puesto que se lanzan una serie de tareas “Startp tasks”. Puede observarse este mensaje en el ya, “casi” antiguo portal: “System startup tasks are runing…

image

Realizado el despligue, navegamos a la opción de menu “Caching” que ofrece dos páginas: “Save” y “Load”. En la primera, se almacena el dato en cache y en la segunda, se obtiene el dato almacenado se muestra:

image

Como hemos habilitado la conexión remota durante el despliegue, accedemos mediante terminal server a la instancia de nuestro role “MvcWebRole1” y desde allí: Realizamos un restart del site, o un reciclado del pool, o un “IISReset” o, incluso, un reinicio del servicio “World Wide Web Publishing Service”. Tras esta acción, el valor de cache permanece y si navegamos a la página “Load” podemos comprobar que el valor permanece.

image

Adcicionalmente, podemos comprobar la memoria dedicada a la Caché Co-located, cuyo valor ronda los 530MB  iniciales aproximadamente, valor indicado por el proceso “CacheService.exe” y que se corresponde con el 30% establecido en las propiedades del proyecto de tipo Cloud.

image

Hasta aquí el uso de Caché  “Co-Located” con Windows Azure Caching (Preview).  Veremos más adelante, en posts sucesivos el uso de la Caché Dedicada, diferentes opciones y configuración con Azure Caching Preview, uso de cache para Session y  Output Cache, capacity planning y  tamaños de cache según tamaños de VMs y mucho más.

Otras referencias:

¡Ahora no hay motivos para no sacarle partido a nuestra/s instancia/s de Azure. Haz lo mismo con mejor performance y menor coste!

Saludos “and, happy Azure Caching
Juanlu

Tip: ¡ Actualiza “Azure Storage Explorer 5 Preview” !

Windows Azure Big

Ya tenemos disponible la actualización de “Azure Storage Explorer 5 Preview”,

image

Con las novedades:

  • Nueva interfaz de usuario, similar a la del nuevo portal HTML 5 de Windows Azure
  • Soporte para configuración y visualización logging

image

  • Soporte para configuración y visualización de monitoring

image

  • Uso de las dlls de “Windows Azure SDK 1.7”
  • Solución de fixes

Saludos noticieros
Juanlu

Windows Azure Web Sites: Integración continua con TFS Preview

WindowsAzurePreview

En esta ocasión, y continuando el post anterior,  veamos como tener el código del “Azure Web Site” en “TFS Service” y poder  acceder desde Visual Studio 2012 RC y lo mejor, veamos como funciona la integración continua tras cada “Check In” de código.

Una vez creado nuestro “Azure Web Site”, realizado o no el despligue desde Visual Studio:

  • Accede al nuevo portal de Azure y haz clic en la opción “Set Up TFS publishing” de la sección “quick glance”

image

  • Introduce el nombre del TFS “Service Preview”.   Nota: Para crear tu “TFS Service”, sigue estos pasos.

image

  • Acepta la petición de permisos

image

  • Selecciona el proyecto de TFS a asociar al “Azure Web Site”

image

  • Valida la operación y, todo listo.

image

  • Lanza el Visual Studio dese la opción “VISUAL STUDIO” de la barra de comandos, conectando así directamente el VS con el TFS Service.
  • Si lo prefieres, abre el Visual Studio y conectate al TFS normalmente intruduciendo como servidor: “<myTFSService>.tfspreview.com”.
  • Ahora que estas conectado, añade la solucion a TFS como lo haces normalmente.

image

  • Realiza el despliegue según comenté en el post anterior si aún no lo has hecho, para que “Azure Web Site”  vincule el proyecto Web.
  • Haz el Check-In correspondiente.
  • Ahora, cada vez que hagas un cambio en el código y realizes el nuevo “Check-In”, se realizará el despliegue automático.

image

  • La “Integración Continua” está lista.

image

Hasta aquí, una vez más, Windows Azure haciéndonos más fácil el desarrollo en la nube.

Por el momento tenemos uso gratuito de  “TFS Service Preview”, ¡Aprovechemos para sacarle jugo y hacer pruebas!

Saludos
Juanlu, ElGuerre

Windows Azure Web Sites: “Web Deploy” en unos cuantos clicks !!!

visual_studio_logo

&  WindowsAzurePreview

 

Windows Azure incluye muchas nuevas características como ya comenté en un post anterior. Una de ellas es el “Web Sites”, objeto de este post. Con ella, es posible, con varios click de ratón, desplegar en Azure cualquiera de nuestras aplicaciones web, tanto nuevas como ya existentes. ¡Esto abre un nuevo camino a la migración de aplicaciones hacia la nube!. 

Con esos pocos click conseguiremos:

  1. Alta escalabilidad en entornos cloud.
  2. Despliegue instántaneo, y muy sencillo
  3. Integración continua con “TFS Service Preview”

Y todo ello, desde Visual Studio 2012 RC.

Veamos un step by step práctico:

  •  
    • Crear un nuevo “Web Site”  directamente desde el portal de Azure accediendo a la url  “https://manage.windowsazure.com
    • Click en  “+ NEW
    • Introducir la url que va a tener la nueva aplicación web, “MyAzureWebSite”.
    • Click en “CREATE WEB SITE” y …

image

  •  
    • Tras unos pocos segudos el “Web Site” de Azure ha sido creado.
    • Al clicar sobre el, accederemos al detalle del mismo con las siguientes opciones:
      • “DASHBOARD”. Además de como su propio nombre indica, tambien nos permite hacer algunas operaciones tals como, obtener información para el despliegue, configuración de TFS, etc.
      • “MONITOR”: Aquí no voy a dar detalle, ella misma habla por si sóla.
      • CONFIGURE: Configuración del framework (v2.0 ó v4.0), diagnosticos, claves de “app settings”, “connections strings”,  y “default documents”.
      • SCALE: Esta es la opción más importante, donde podremos optar a hacer que nuestro Web Site sea “Shared” o “Reservado” (Multitenant o no), de manera que nuestro site compartirá recursos con otros o no respectivamente. Al cambiar esta opción, tenemos que tener cuidado de no sobrepasar los límites de nuestra subscripción, principalmente si estamos probando y no queremos pagar más de lo necesario. En cualquier caso, siempe serémos avisados con el pertinente mensaje  “SPENDING LIMIT WARNING”. Al sobrepasar dicho límite podremos optar por dotar a nuestra aplicación de un escalado vertical (“Scale UP”) y en cualquier caso, tanto sobrepasando este límite como si no, siempre podremos optar, adiconalmente, por un escalado horizontal (“Scale Out”) hasta un máximo de tres instancias. ¡Parecen pocas por el momento, supongo que tendremos la opción de poder incrementar más este número en un futúro no muy lejano!

      image

  •  
    •  
      • LINKED RESOURDES: Conexión y uso de un SQL Azure. En un futuro optaremos a una conexión con Azure Storage.

Hasta aquí, simplemente hemos creado y configurado nuestro “Web Site”, ahora vemos como hacer el despliegue:

  •  
    • Acceder a la opción  “DASHBOARD” antes comentada y, concretamente a la opción “Download publish profile” de la sección “quick glace”. Al hacer click obtendremos un fichero de configuración que descargaremos nuestro disco duro. ¡Lo dejamos ahí, por el momento!
    • Crear un proyecto Web (ASP.NET, MVC 3, MVC 4, et )  desde visual studio.
    • Click con el botón derecho del raton sobre el proyecto y “Publish…
    • En la pestaña de “Profile”, seleccionar el fichero antes descargado y seguidamente obtendremos una ventana con la configuración necesaria para nuestro despliegue:

image

  • “Next >”, “Next >” y, en la pestaña de “Preview” podremos ver que es lo que se va a desplegar exactamente:

image

  • “Publish” y todo listo. Tras un par de minutos nuestra aplicación estar ejectuandose en Azure.

Para no hacer más largo el post, lo dejo aquí y, en un siguiente post veremos como integrar este desarrollo con “TFS Service Preview” en pocos clicks y con la misma sencilled que este depliegue despliegue.

Saludos
Juanlu, ElGuerre

El camino de Windows Azure continua. Integración con Visual Studio 2012 RC y Windows 8 Release, Nuevo portal y más “features”

 

WindowsAzurePreview

 

 

Después de unos cuantos días con problemas con el PC, al final he podido conseguir tener todo listo, Windows 8 Release Preview, Visual Studio 2012 RC y Windows Azure Tools June 2012. Todo parece que está muy estable y funciona bastante bien y rápido. El equeipo de Azure se ha dado prisa en con las Tools adecuadas para VS2012, pero creo que el equipo de Windows Phone no ha podido llegar a tiempo, ¡ahora que quería comenzar a pegarme con Windows Phone en el nuevo entorno!, En fin, cómo VS2010 y VS2012 pueden convivir,  habrá que esperar a esas Tools para tener un único entorno de trabajo.   Existen algunas otras imcompatibilidad que pueden verse aquí.

Por cierto, si alguien intenta instalar Windows 8 Release Preview, que lo haga desde cero. La “actualización”/instalación desde la versión Preview, puede causar algún problema con el reconocimiento de Drivers !!! Confused smile

Veamos ahora que nos trae de nuevo Windows Azure. Y lo mejor, como comentaba antes, al fin incluido en Visual Studio 2012 RC:

  • Nuevo proyecto, para .NET Framework 3.5 y .NET Framework 4.0.

image

    • Nuevos tipos de roles: “Cache Worker Role” y “Worker Role with Service Bus Queue”

image

  • Actualización/conversión de un proyecto existente

image

  • Configuración para “Windows Azure Caching

image

  • Requerimiento de certificado “.pfx” en la carpeta “certificates” de cada “Hosted Services”. ¡Aquí ha habido un cambio, creo que debido al nuevo portal basado en HTML 5! Eso sí, bastante más intuitivo, aunque en el día a día, prueba tras prueba puede suponer un poco más trabajo.

image

  • Nuevo portal basado en HTML 5.  Ahora la administración desde el Portal de Windows Azure no es un impedimiento para algunos. Ahora es posible desde IPad, Windows Phone, etc.

image

  • Despliegue directo desde Visual Studio 2012 RC para aplicaciones web con “Web Deploy” sin necesidad de hacer despligues típicos de Windows Azure. ¡Ahora no es necesario conocer nada de Windows Azure para hacer este tipo de despliegues Web y además en tan solo varios clicks !
  • Integración continua con Azure TFS Preview.

image

Hasta aquí unas cuantas pinceladas de lo que tenemos encima de la mesa, a partir de aquí, a profundizar en sucesivos posts.

Saludos @Nuvedosos
Juanlu, ElGuerre

Sencillez de autoescalado en Windows Azure con “WASABi”

 

Windows Azure Big Muy buenas,

Desde hace algún tiempo quería realizar algunas pruebas en profundidad con  “WASABi” (MICROSOFT ENTERPRISE LIBRARY 5.0 INTEGRATION PACK FOR WINDOWS AZURE  AUTOSCALING APPLICATION BLOC).

La semana pasada, nuestro compañero, Luis Panzano indico en en este post los pasos más importantes para llevar a cabo una prueba/demo muy fácil y rápida, así que aprovecho la misma para profundizar y resolver algunas dudas que se plantean por los foros de Azure.

Antes de nada, me gustaría aclarar, que para el autoscalado, se utilizará un WorkerRole, quien será el encargado de analizar en todo momento la configuración y reglas de escalado a partir de ficheros de los configuración.

Detalle de los pasos para trabajar con WASABi:

  1. Acceder y descargar los prerrequisitos necesarios desde aquí.
  2. Role o nodo a escalar (ej.: Aplicación web):
    • Indicar en los ficheros de configuración de los proyectos  “ServiceDefinitios.csdef” y “ServiceConfiguration.*.cscfg”, el AccountName y AccountKey del “Azure Storage Account”.
    • Añadir una nueva cadena de conexión (“ConfigurationSettings”) en esta demo, para hacer uso de una cola de Azure, que será monitorizada por el “AutoScaler” en función de su número de elementos de la misma. Si no se utilizará el número de elemento de la cola, no sería necesario.
    • Desplegar la aplicación en Azure.
  3. Worker Role, AutoScaler (El autoescalador):
    • Indicar en los ficheros de configuración de los proyectos  “ServiceDefinitios.csdef” y “ServiceConfiguration.*.cscfg”, el AccountName y AccountKey del “Azure Storage Account”.
    • Incluir el thumbprint de un certificado en los fichero “*.cscfg” en la sección <certificates>, teniendo como “Store Location”, LocalMachine o CurrentUser independientemente.
    • Configurar el “app.config” con la información necesaria para WASABi. Puede hacerse desde la consola de EntLib que permite la configuración del autoscalado mas gráficamente:

image

    • Rules-store.xml: Es el nombre del fichero donde se configuran las reglas de autoescalado. Aquí puede obtenerse más detalle sobre todos sus atributos. Una de las cosas curiosas de este fichero es que el valor del “timespan” del  operando “queueLength” no puede ser inferior a “00:05:00”, en cuyo caso se producirán las excepciones:
      • A first chance exception of type ‘System.ArgumentOutOfRangeException’ occurred in Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.dll
      • A first chance exception of type ‘System.InvalidOperationException’ occurred in Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.dll
<operands>

    <queueLength alias="QueueLengthAvg" queue="cola-wasabi" aggregate="Last" timespan="00:05:00"/>

</operands>

    • Services-information-store.xml: Es el nombre del fichero donde se indica toda la información necesaria para que el AutoScaler pueda acceder a la subscripción de Azure y poder realizar el incremento o disminución de instancias: SubscriptionId, información del certificado local y subido a Azure, y muy importante, para cada servicio, el “DNS Prefix” y el nombre del Role.
    • Al ejecutar el AutoScaler desde el Emulador de Azure, se podrán producir errores, que pueden verse en en el output:
      • A first chance exception of type ‘Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Security.CertificateException’ occurred in Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.dll
      • A first chance exception of type ‘Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.Security.CertificateException’ occurred in Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.dll
      • A first chance exception of type ‘Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.ServiceManagement.ServiceManagementClientException’ occurred in Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.dll
    • Indicar el valor “CurrentUser”  para el attributo “certificateStoreLocation” además de corroborar en la consola de certificados que este existe y se corresponde con el valor del  “certificateThumbprint”. Esto es debido en muchos de los casos a Windows 8, que como ya he comentado alguna vez, es bastante más exhaustivo con los permisos
    • Ambos ficheros de configuración (XML) tienen sus esquemas “AutoscalingRules.xsd” y “AutoscalingServiceModel.xsd” que se encuentran junto a la descarga de WASABi y que será recomendable incluir en el proyecto “AutoScaler” a fin de que la edición de la configuración sea más sencilla.
    • WasabiStorageAccount: Es el nombre del Connection String referente al “Storage Account de Azure” donde se encuentran los ficheros antes indicados. Es decir, los ficheros anteriores deberán almacenarse en dicha cuenta bajo el container “autoscaling” que deberá generarse manualmente y que tendrá que coincidir con el valor de atributo “Blob Container Name” (según puede verse indicado por la flecha en la figura anterior).
    • Si no se quiere hacer uso del Storage de Azure para almacenar los ficheros de recursos, bien, porque se está trabajando en una solución híbrida, bien porque se está probando en local, etc, puede optarse por cambiar el “Rules Store” y el “Service Information Store”, e indicar una ruta física. Adicionalmente siempre puede establecerse un almacenamiento “Custom”.

image

Finalizada la fase de configuración, y sin necesidad de desplegar en Azure, el AutoScaler esta listo. Siguiendo con la Demo, cuando la cola tiene tres elementos, y una vez hayan transcurridos 5 minutos desde la inserción del último elementos, la nueva instancia comenzará a ponerse en marcha:


image

IMPORTANTE: Si el “AutoScaler”, necesita ser ejecutado en más de una instancia, debido al la gran carga de reglas de autoescalado o al alto número de roles que pueda tener la aplicación, es posible, que más de una de estas instancies evalué las reglas de autoescalado, lo que implicaría “un doble autoscalado” no deseado. Para evitar esto, el “AutoScaling Application Block” permite indicar un valor “true”, para la propiedad “Use Blob Execution Lease” como puede verse en la siguiene figura.  No obstante, si este no es el caso, es recomendable dejar este valor a “false” para  evitar “overhead”.

image

El “Service Management Request Tracker”, permitirá habilitar mensajes de log durante el escalado, tanto de éxito como de fallo. Para ello, el “AutoScaling Application Block” utiliza automáticamente una cola de Windows Azure “requesttracker” donde recoge dichos mensajes.

image

Es importante conocer, que el “AutoScaling Application Block”, utiliza el valor “utcOffset” para convertir información de configuración de tiempo al formato UTC que es el que utiliza utiliza Windows Azure. “Michael S. Collier” comenta este tema y otros más en su blog.

Y por último comentar que tras algunos intentos, y tras el error “‘Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.DataPointsCollection.DataPointsCollectionException’ occurred in Microsoft.Practices.EnterpriseLibrary.WindowsAzure.Autoscaling.dll”, el AutoScalado de una aplicación en local parece que por el momento no es posible, así que tendremos que “hilar fino” con las reglas.

Y, como dirían en mi pueblo, ¡que ustedes lo escalen bien!

Juanlu, ElGuerre

Si necesitas más detalle, siempre puedes echar un vistazo al “How to”.