Archivo de la categoría: Windows Azure

Usando Windows Azure Content Delivery Network (CDN)

El Azure Content Delivery Network (CDN) esta diseñado para enviar audio, vídeo, imágenes y otros contenidos rápidamente a los usuarios en función de la proximidad del usuario a un nodo de su red global. Esto aumenta la velocidad y la disponibilidad haciendo su uso indispensable para ofrecer una gran experiencia de usuario dentro de nuestra aplicación web.

cdn

El CDN o Red de entrega de contenidos nos ofrece una red de servidores distribuidos que es fundamental para escalar cualquier aplicación HTTP en Azure. En la actualidad cuándo diseñamos una aplicación web que recibirá mucho trafico generado por miles de usuarios mediante llamadas concurrentes proporcionando diferente tipo de contenidos desde archivos CSS a imágenes, entre otros, sería un error plantear que un único nodo sea el responsable de ofrecer el contenido.

En este tipo  de escenarios y mediante el CDN conseguimos distribuir todos nuestros contenidos en servidores distribuidos de forma geográfica para que cuando un usuario de USA este conectado a nuestra aplicación web, el CDN le proporcione el contenido de nuestras páginas desde el nodo geográficamente más cercano.

Razones para usar un CDN

Una de las razones obvias es la distribución global y la caché de contenidos de cada uno de los nodos de la red global ofreciendo una menor latencia en la carga de la página a los usuarios de nuestra aplicación.

Con el uso de esta red ofreceremos un mejor rendimiento a nuestras aplicaciones y servicios, tendremos una aplicación escalable, reduciremos la posibilidad de failover de nuestra aplicación y además, ofreceremos contenido seguro en todo momento a través de la distribución del contenido mediante HTTPS.

Configurar Windows Azure CDN

Para configurar nuestro CDN en Azure debemos ir al portal y de ahí a Nuevo > Medios + CDN > CDN y configurar el nombre de nuestro CDN, la ubicación principal y el grupo de recursos dónde almacenaremos todo nuestro contenido. Es importante establecer el nodo principal cercano a nuestro mercado principal pues es del que se replicará a los otros nodos del CDN global de Azure.

cdn_azure

Una vez tenemos el CDN creado debemos crear un Endpoint o punto de conexión desde el mismo portal,

cdn_azure_endpoint

Para crear el endpoint necesitaremos especificar un nombre, el tipo de origen, y el host de origen. Si en el tipo de origen seleccionamos un origen personalizado deberemos escribir nosotros el host de origen, cómo por ejemplo, www.francescjaumot.net que será el dominio autorizado a consumir de nuestro CDN.

Una vez configurado nuestro endpoint este tendrá un nombre *.azureedge.net siendo * el nombre de nuestro dominio CDN y empezaremos a cargar contenido en él indicándole la ubicación del contenido mediante una ruta relativa. En mi caso el origen es un sitio web pero este puede ser el almacenamiento, un servicio en la nube, una WebApp o cómo en mi caso un dominio personalizado.

Lo más lógico para un entorno de producción es que tengamos un BLOB de Azure dónde subamos todo el contenido que queremos distribuir a través de un CDN y desde ahí administremos el contenido que cargaremos a nuestro endpoint.

cdn_azure_endpoint_load

Una vez tenemos nuestro contenido cargada podemos acceder a él y hacer referencia de el desde nuestra aplicación web mediante la URL que nos da el CDN, en nuestro caso, http://cdn4demo.azureedge.net/sliderAZURE_1.jpg.

Si nuestra aplicación ya esta desplegada en un entorno de producción y tenemos configurada la misma en un servidor IIS, podemos agregar una norma rewrite en el servidor web para que sobrescriba la URL de un grupo de contenidos directamente a nuestro CDN sin aplicar ningún cambio en nuestro código y con tan solo modificar nuestro web.config,

<rewrite>
  <rules>
    <rule name="Rewrite hacia el CDN">
      <match url="^wp-content/(.+)$" />
      <action type="Rewrite" url="http://cdn4demo.azureedge.net/{R:0}" />
    </rule>
   </rules>
</rewrite>

Tener en cuenta que el endpoint y su contenido no están disponibles de forma inmediata. De hecho puede tardar hasta 90 minutos para que sea registrado y distribuido en la red global de azure. Mientras no esté distribuido recibiremos un fantástico error 404 :) .

Servicios de almacenamiento en Microsoft Azure: Colas

Muchos son los servicios de Microsoft Azure tanto para PAAS, SAAS cómo para IAAS. En este post me voy a centrar en una pequeña parte de PAAS cómo son los servicios de almacenamiento en esta paltaforma.

Este servicio proporciona varias soluciones,

Blobs: Almacenamiento de grandes bloques de texto o ficheros de gran tamaño; texto, vídeos, audio e imágenes accesible fácilmente mediante una API REST.

Tablas: Almacenamiento NOSQL para datos preparado para que se puede escalar automáticamente y dar cabida a una enorme cantidad de datos. Los datos son accesibles mediante cualquier lenguaje de programación .net, java, node.js, python, rest…

Colas: No son mas que un sistema de almacenamiento FIFO (First In First Out) donde podemos guardar mensajes que debe ser procesadas en segundo plano o en un momento concreto y diferente del proceso principal.

Cabe destacar que todos los servicios de almacenamiento de Azure nos permiten tener una redundancia de datos local (varias réplicas en la misma región), redundancia de datos geográfica (varias réplicas en diferentes regiones)  para dar más eficiencia en la trasferencia de datos y su durabilidad.

Cómo toda interacción con Azure, es sencillo su uso aunque debemos tener en cuenta varios aspectos. Lo primero que haremos será conectar y crear un cliente para conectar con nuestra cola de Azure,

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString"));
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
CloudQueue queue = queueClient.GetQueueReference("nombredelacola");

Estas líneas anteriores nos permiten tener conexión con nuestra cuenta de Storage de Azure, tener un cliente para la conexión con ella y un cliente para manejar la cola. Para manejar la inserción de datos en ella debemos tener en cuenta algunos campos,

Dequeue Count: Número de veces que el mensaje ha sido leído de la cola.
Expiration Time: Momento en el que el mensaje expirará y será eliminado automáticamente por Azure.
Next Visible Time: Momento en el que el mensaje dejará de ser invisible y volverá a poder ser leído al obtener el siguiente mensaje de la cola.
Message: El mensaje con su contenido dentro de la cola.

CloudQueueMessage msg = new CloudQueueMessage("RowKey: 1, RowValue: 55, Action: Send");
queue.AddMessage(msg);

El mensaje es totalmente personalizado, es decir, el Message que hemos creado con “RowKey: 1, RowValue: 55, Action: Send” es porqué el lector de la cola sabrá interpretar este mensaje y podría ser totalmente otro formato y de mayor tamaño, por ejemplo, “PK:1#Value:55#Accion:S” u cualquier otro. Además el Message puede ser texto o byte[] por lo que podréis decidir que almacenar en él.

Si no se especifica parámetros en el Expritation Time ni en el Next Visible Time estos son el de 60 minutos para el primero y un DateTime.Now para el segundo.

Para obtener los mensajes de la cola únicamente es necesario hacer un GetMessage,

CloudQueueMessage msg = queue.GetMessage();

El GetMessage permite pasar cómo parámetro un TimeStamp que es el tiempo que va aparecer oculto el mensaje en la cola y nadie podrá leerlo, si no se especifica ningún tiempo el mensaje leído permanece 3 segundos oculto de la cola.

Tenemos que gestionar un aspecto muy importante, la visibilidad del mensaje.  La lectura de un mensaje no destruye el mensaje y puede ser leído desde diferentes sitios u otra vez por el mismo desencolado y puede ser un problema. Esto es debido a que un mensaje al ser leído es ocultado pero no eliminado por si sucede algún error en la lectura de ese mensaje, en caso de error, el mensaje volvería aparecer en la cola para ser procesado otra vez.

Por eso, es muy importante gestionar el tiempo de ejecución de las tareas y tener en cuenta el tiempo en que es invisible una tarea (un mensaje). Un mensaje debe ser eliminado de la cola únicamente cuando esta se ha procesado correctamente o cuando su Dequeue Count sea de un valor especificado, es decir, lo hemos leído demasiadas veces.

Si procesamos un mensaje y este no se ha podido procesar o no es su momento; imaginar una cola que debe ejecutar el mensaje en un momento determinado y al procesar su verificación determina que precisa un minuto más. Lo que debemos hacer es actualizar el mensaje,

queue.UpdateMessage(msg, TimeSpan.FromSeconds(60), MessageUpdateFields.Visibility);

Esta actualización lo que hace es realizar una actualización en el mensaje y le indicamos que queremos que durante un minuto más ese mensaje no sea visible y por lo tanto, hasta pasado ese tiempo no se podrá obtener y su Dequeue Count augmentará en una unidad. Esta también lo hara por cada GetMessage.

Como veis el último parámetro es una enumeración que es Visbility o bien Content dónde indicamos si estamos cambiando el contenido del mensaje o bien la visibilidad. En este caso la visibilidad.

Cuando el mensaje sea procesado y la tarea ejecutada correctamente, debemos eliminar ese mensaje de la cola para que no vuelva a ser procesado,

queue.DeleteMessage(msg);

Bien, con esta explicación, podemos gestionar de forma muy fácil, sencilla y rápida nuestra cola mediante un WebRol con una tarea en segundo plano que gestione la cola en de Microsoft Azure.

Este sistema es altamente recomendable en sistemas con muchas usuarios dónde necesitamos procesar tareas en segundo plano, que tengan una complejidad de procesamiento alta o bien necesitemos que esas sean procesadas y escalables rápidamente y de forma seguro.

Happy enqueue & dequeue! :)

Smooth Streaming desde Windows Azure en Windows Phone

En mi anterior entrada explique cómo publicar contenido multimedia en Windows Azure. En este post, explico cómo consumir la URI generada por Azure desde un dispositivo Windows Phone. Voy a detallar cómo hacer lo mismo en sistemas de Windows Phone 7 y 8 pues es ligeramente diferente por el SDK que debemos utilizar.

Lo primero que debemos hacer es instalar Microsoft Media PlatformUna vez instalado este SDK debemos instalar el Development Kit Smooth Client de IIS pues Azure sirve sus contenidos multimedia mediante IIS Smooth Srtreaming.

Una vez tenemos esto nos vamos al Visual Studio 2010 y creamos un nuevo proyecto para Windows Phone 7.8 añadiendo las siguientes librerías,

  • Microsoft.SilverlightMediaFramework.Compatibility.Phone
  • Microsoft.SilverlightMediaFramework.Core.Phone
  • Microsoft.SilverlightMediaFramework.Plugins.Phone
  • Microsoft.SilverlightMediaFramework.Plugins.Progressive.Phone
  • Microsoft.SilverlightMediaFramework.Plugins.SmoothStreaming.Phone
  • Microsoft.SilverlightMediaFramework.Utilities.Phone
  • Microsoft.Web.Media.SmoothStreaming

Todas ellas ubicadas en las carpetas de C:\Program Files (x86)\Microsoft SDKs\Microsoft Silverlight Media Framework\v2.7\Silverlight For Phone\Bin a excepción de la librería del IIS que se encuentra en C:\Program Files (x86)\Microsoft SDKs\IIS Smooth Streaming Client\v2.0\Windows Phone.

Con estas librerías añadidas, podemos añadir estas dos referencias en el código XAML de nuestra página,

xmlns:Core="clr-namespace:Microsoft.SilverlightMediaFramework.Core;assembly=Microsoft.SilverlightMediaFramework.Core.Phone"
xmlns:Media="clr-namespace:Microsoft.SilverlightMediaFramework.Core.Media;assembly=Microsoft.SilverlightMediaFramework.Core.Phone"

Y posteriormente, poner la propiedad SupportedOrientations y Orientation de la página en Landscape. Finalmente, en dónde deseemos poner nuestro vídeo, insertaremos este código con la URI de Azure y pulsaremos F5 para ver los resultados,

<Core:SMFPlayer>
<Core:SMFPlayer.Playlist>
<Media:PlaylistItem DeliveryMethod=”AdaptiveStreaming” MediaSource=”http://clibbdev.origin.mediaservices.windows.net/143c0bc2-24e5-40c8-ab69-b28f27eca237/Jaguar_Attacks_Crocodile_EXCLUSIVE_VIDEO.ism/Manifest”/>
</Core:SMFPlayer.Playlist>
</Core:SMFPlayer>

Y aquí van los resultados :)

Por cierto, mi vídeo no es de mucha cualidad pues está bajado de YouTube y transformado a MP4,y además, codificado. Decir que los vídeos, una vez tratados en Windows Azure, conservan la misma cualidad que tenían originalmente y que van muy rápidos.

En Windows Phone 8, prácticamente, es lo mismo pero usando Visual Studio 2012. A diferencia de lo mostrado deberemos instalar otra versión del Player Framework y de Smooth Client.

En este caso solo necesitaremos las librerías siguientes,

Microsoft.Web.Media.SmoothStreaming.dll
Microsoft.PlayerFramework.dll
Microsoft.PlayerFramework.Adaptive.dll

Posteriormente deberemos añadir las dos referencias en el código XAML y usar estas en nuestra MediaPlayer,

xmlns:mmppf="clr-namespace:Microsoft.PlayerFramework;assembly=Microsoft.PlayerFramework"
xmlns:adaptive="clr-namespace:Microsoft.PlayerFramework.Adaptive;assembly=Microsoft.PlayerFramework.Adaptive"
<Gridx:Name="MainGrid"Background="Transparent" <mmppf:MediaPlayerSource="http://clibbdev.origin.mediaservices.windows.net/143c0bc2-24e5-40c8-ab69-b28f27eca237/Jaguar_Attacks_Crocodile_EXCLUSIVE_VIDEO.ism/Manifest" <mmppf:MediaPlayer.Plugins>  <adaptive:AdaptivePlugin/>  </mmppf:MediaPlayer.Plugins>  </mmppf:MediaPlayer> </Grid>

Y ya estamos listos para hacer una APP para Windows Phone con Smooth Streaming usando nuestra infrastructura multimedia en Windows Azure.
Happy media :)

Hospedar contenido Multimedia en Windows Azure

En varias aplicaciones o escenarios de nuestras aplicaciones móviles, web u otras, nos podemos encontrar con la necesidad de usar contenido multimedia.

Windows Azure es la plataforma de servicios en la nube de Microsoft y la primera del mercado en incorporar este tipo de servicios. Con ellos puedes crear soluciones de distribución de multimedia escalables y capaces de transmitir vía streaming contenido multimedia a Adobe Flash, Android, iOS, XBOX, Windows… y casi en todos los dispositivos y plataformas existentes.

El secreto de este servicio es conocer la codificación de vídeos necesaria para poder trabajar con las diferentes plataformas pues en si, el resto de pasos, es muy sencillo.
Lo primero que debemos tener es una cuenta de Azure y acceder a nuestro portal.

Una vez estamos en nuestro portal debemos ir a la sección de Servicios Multimedia y crear una cuenta de servicios multimedia.

Windows Azure creación del servicio multimedia

Le damos a crear el servicio multimedia y en pocos minutos tendremos nuestro servicio multimedia preparado. Cómo siguiente punto, debemos subir contenido. Para ello nos vamos a la sección de contenido y le damos a cargar y nos esperamos unos minutos más, todo dependiendo de nuestra línea.

Hasta aquí todo bastante fácil.
Supongamos que en nuestro escenario de aplicación es una aplicación móvil que tenemos que desarrollar en diferentes plataformas; Windows Phone, Android y iOS. Estas tres plataformas, de fabricantes diferentes tienen diferentes codificaciones de vídeo. Nuestro fantástico servicio de Azure nos permite, una vez el contenido está subido, codificar el mismo para las diferentes plataformas.

 Cómo veis en la imagen anterior, he subido un vídeo en formato mp4. Ahora, si nos vamos en la sección de Codificar nos aparecerá una ventana con un desplegable con diferentes opciones para poder codificar el vídeo y reproducir el mismo en diferentes formatos para diferentes destinos.

La primera vez que vi tal listado me quedé anonadado y luego, gracias a @borisarm, aprendí a usar las diferentes opciones y espero que ahora podáis usar la mas adecuada según vuestro escenario,

  • Reproducir en PC/Mac (a través de Flash/Silverlight). Es un formato específico para que la reproducción del vídeo en un ordenador sobremesa con Windows o Mac reproduzcan el mismo en Flash o Silverlght dependiendo del plugin que tengan instalado.
  • Reproducir a través de HTML5 (IE/Chrome/Safari). Es un formato específico para reproducir el vídeo en navegadores sin necesidad de plugin.
  • Reproducir en dispositivos iOS y PC/Mac. Es la suma de la primera opción con un formato específico para reproducción en dispositivos iOS.

Estos son los valores preestablecidos y seguramente los mas usados, pero en aplicaciones complejas, debemos ir a los avanzados. En estos veremos que todos usan el formato H264 que es el estándar de codificación de vídeo aceptado por todos los dispositivos. Para saber más de cada una de ellas se detalla más específicamente aquí. Resumiendo el enlace,el cual os recomiendo, básicamente nos ofrece un conjunto de formatos resultantes con un CBR (Codificación constante de bits) mediante H265 (Estándar de codificación) en un formato de archivo re-producible con más o menos cualidad y una capacidad de adaptación a la pantalla en función del destino y necesidad.

En nuestro escenario para Windows Phone 7.8 deberemos usar H264 Smooth Streaming Windows Pohne 7 Series, para Android usaremos H264 Broadband con la resolución que necesitemos (En un móvil una 4/3 es correcta y en un tablet una 720p también. El 1080p es de FullHD y debemos tener cuidado si vamos por 3G) pues Android no soporta HLS (HTTP Live Streaming) o Smooth Sreaming y para iOS usaremos H264 Adaptative Bitare MP4 Set SD 4×3 para terminales iOS. Supongo que os preguntaréis porqué iOS tiene un servicio especifico. Bien, el tema está en que para certificar una aplicación que se suba al App Store de Apple, debe estar el audio codificado a baja velocidad con 56kbps.

Una vez situados con los formatos, vamos a seleccionar el nuestro y a crear un trabajo de codificación. En nuestro escenario, vamos a usar Windows Phone 7 por lo que seleccionaremos la última opción. Si os habeís fijado he nombrado el hecho de crear un trabajo de codificación.

Windows Azure tiene una cola de trabajo en background que se encarga de realizar la codificación del vídeo y la cual podemos consultar en todo momento.

Una vez termine, deberemos ir otra vez a la pestaña de contenidos, seleccionar el vídeo con la codificación correcta y publicar en la nube para que sea accesible.
Esta publicación nos dará una URL para que podamos usarla en nuestra aplicación móvil.

Y ahora… ¿Cómo reproduzco este vídeo en Windows Phone? En el siguiente articulo.

 Tener en cuenta que este artículo se basa en la versión 2.2.0.0 de Windows Azure Media Econder y que, a futuro, puede variar.
Happy encoder! 😉