jueves, 17 de julio de 2014

Nueva serie de Webcast de arquitectura

Gracias al excelente recibimiento de la serie de webcast de arquitectura producida el año pasado se ha decidido hacer una nueva serie con temas relacionados y que están presentes en los temas a diario que enfrentamos arquitectos y desarrolladores. La nueva serie de webcast será en vivo igual que la anterior y los videos también serán hosteados en Channel9. Esta serie inicia el próximo 6 de agosto y a continuación pueden ver la información y le link de registro para el evento.

image

El link de registro para el evento es el siguiente:

Serie - Arquitectura de Software: Implementando SOA con el Windows Service Bus

Para los que desean información de los links del año anterior los pueden ver en channel 9 en esta dirección.

lunes, 19 de mayo de 2014

Google Charts y Windows Azure 2 - Introducción a los Azure Tables

Continuando con esta serie de posts respecto a la integración de componentes de Azure con el componente Google Charts, vamos a ver de forma rápida que son los objetos Table de Windows Azure. Estos componentes los vamos a utilizar como fuente de datos para pintar nuestros gráficos con Google Charts.

Azure Tables

Las tablas en azure son objetos capaces de almacenar grandes cantidades de datos sin necesidad de definir todos los detalles que se definen cuando se trabaja con una base de datos relacional.

Estas tablas almacenan los datos en colecciones de entidades. Las entidades son como filas de una tabla relacional. Esta entidad tiene una llave primaria y una lista de propiedades. Las propiedades al igual que en .NET y al igual que una columna en una base de datos relacional consiste en un nombre y un valor - es decir un value-pair tipificado. Estas tablas no fuerzan ningún esquema de datos, por lo que pueden existir entidades con formatos diferentes dentro de la misma tabla → similar a MongoDB o RavenDB → si se desea forzar un esquema, debe de hacerse desde el lado del cliente.

Existen una serie de requisitos para ponerle nombre a una tabla, los cuales se detallan a continuación:

  • Los nombres deben de ser únicos dentro de una cuenta
  • Sólo pueden contener caracteres alfanuméricos
  • No pueden iniciar con un número
  • Son “case sensitive”.
  • El tamaño mínimo es de 3 caracteres y el máximo de 63.
  • Algunos nombres están reservados, tales como “tables”.

Las propiedades son también “case sensitive” y pueden tener un máximo de 255 caracteres → siguen las mismas reglas que los identificadores de C#.

Todas las tablas tienen tres propiedades en común con propósitos diferentes:

  • PartitionKey: Las tablas de entidades se organizan por partición. Una partición es un rango de entidades que tienen el mismo valor en esta llave. Esta llave forma la primera parte de la llave primaria de una entidad. Su principal función es soportar “load balancing” entre los nodos de storage.
  • RowKey: Es la segunda parte de la llave primaria. Esta es una llave única para la entidad en una partición dada.
  • Timestamp: Esta propiedad es del tipo DateTime y es mantenida en el servidor para almacenar el momento en que una entidad fue modificada. Se utiliza para permitir concurrencia optimista sobre las tablas.

Node.js y las tablas en Azure

En este post vamos a trabajar con las tablas de Azure utilizando Node.js y Cloud9 como IDE de desarrollo. Inicialmente vamos a crear una tabla y vamos a interactuar con ella ingresando datos, modificándolos y consultándolos. Para iniciar, procedemos creando una tabla.

Para crear una tabla en Azure, necesito una cuenta en Windows Azure para tal propósito → fuera del alcance del post. Una vez creada esta cuenta procedemos a crear la tabla con la que vamos a trabajar utilizando el nombre de la cuenta y la llave generada para dicha cuenta. Esta información se obtiene desde el sitio de Windows Azure tal y como se puede ver en la siguiente figura.

clip_image002

Con esta información ya podemos iniciar con la programación para el acceso al servicio de las tablas de Azure. Como se ve en la siguiente figura, primero cargamos la librería del SDK de Azure, seguidamente en el paso 2 procedemos a ingresar el nombre de la cuenta del storage que vamos a utilizar y el respectivo key para su acceso → recortado en este caso para que quepa en el documento (y cambiado apenas se publique este post :) ). Por último creamos el servicio para acceder las tablas que existen en nuestra cuenta.

clip_image004

El siguiente paso es crear la tabla que vamos a utilizar, la cual en este caso se llamará “IncidentsTable” y en la cual vamos a guardar todos los incidentes generados a través de diferentes dispositivos y los cuales serán graficados utilizando Google Charts.

clip_image006

Creamos la tabla con el método createTableIfNotExists, si la tabla existe o se produce algún error → de nombre por ejemplo → entonces se despliega el error en la consola, en caso contrario se consultan todas las tablas disponibles dentro de la cuenta y las desplegamos.

clip_image008

En este caso yo tengo varias tablas en la cuenta, por lo que se reflejan en la consulta; sin embargo, en el objeto señalado por la flecha, se puede ver la tabla que creamos.

El siguiente paso es agregarle entidades a la tabla. Para esto vamos a usar el código que se muestra en la siguiente figura.

clip_image010

Vamos a insertar la entidad en la tabla ‘IncidentsTable’ utilizando el método insertEntity. En este método definimos el ‘PartitionKey’ y el ‘RowKey’ específico para la entidad → en este caso no vamos a agregar datos referentes al demo porque el registro lo vamos a borrar para demostrar esta funcionalidad. En el paso dos hemos creado una consulta para utilizarla en el paso tres del código, este query consulta todos los elementos que existen en la tabla definida por la variable ‘tableName’ .En el paso tres de la figura anterior también hacemos una consulta para obtener las entidades que existen dentro de la base de datos.

clip_image012

Si queremos borrar la entidad anterior procedemos con el siguiente código; el resultado de la consulta al borrar la entidad debe de ser []; es decir, un arreglo vacío de entidades.

clip_image014

Ahora procedemos a guardar los registros de incidentes que vamos a graficar desde Google Charts. El código final para ingresar las entidades es el siguiente:

clip_image016

Como se ve en la figura anterior, se agregan dos propiedades más a la entidad: IncidentType y Description, ambos del tipo String. Cuanto ejecutamos el código anterior, se despliegan los registros en la tabla hasta ahora insertados.

clip_image018

En el próximo post vamos a “ligar” los registros en nuestras tablas de Azure con una página que contiene el componente de Google Charts.

Etiquetas de Technorati: ,,,

lunes, 12 de mayo de 2014

Google Charts y Windows Azure 1 - Introducción a Google Charts

En el proceso de desarrollo de aplicaciones, los que nos dedicamos a esto pasamos constantemente por proyectos o escenarios donde debemos seleccionar cual es la tecnología que mejor aplica para el problema que queremos desarrollar. En un proyecto en donde me tocó trabajar recientemente, tuve que integrar Azure con Google Charts y luego de la experiencia - muy positiva por cierto - decidí crear una serie de post para mostrar cómo interactuar con los componentes de creación de gráficos de Google. Para iniciar, primero voy a hacer un post relacionado con el tema de Google Charts, después de lo cual voy a crear otros posts para integrarlos con componentes de Windows Azure.  

Qué es Google Charts?

Google Charts es un conjunto de módulos escritos en Javascript que nos permiten graficar de forma sencilla y rápida → y con un excelente desempeño. La librería soporta más de 20 tipos de gráficos y crece día con día. El link donde se encuentra toda la información de esta librería se puede localizar acá.

La librería es muy sencilla de usar solamente hay que manera los conceptos típicos de cualquier suite para creación de gráficos y entender muy bien como se usan las fuentes de datos. Básicamente existen tres componentes que interactúan para que los gráficos se puedan presentar en una página Web. En primer lugar la fuente de datos, seguidamente procedemos con la carga de los datos a una clase js DataTable, desde la cual pintamos los datos en los diferentes charts que vamos a presentar en nuestra página.  La siguiente figura nos resume cómo interactúan estos componentes.

Demostración

Para iniciar vamos a crear un ejemplo muy simple utilizando solamente una pagina web y la librería de charts de google, todo programado en javascript. Como lo hemos hecho en los ejemplos donde usamos javascript, vamos a usar el IDE llamado cloud9 para programar el demo. El primer paso es incluir la librería donde esta contenido el acceso al GoogleChart, este paso se ve en la siguiente figura.

jsHeaderGoogleCharts.png

Ahora, procedemos a crear el código necesario para poder desplegar el gráfico en nuestra página web.

DrawChart GoogleChart post 1.png Como vemos en el código anterior, primero creamos el conjunto de datos que queremos desplegar en el chart. En este caso estamos creando un DataTable estático pero en próximos post lo vamos a integrar a componentes de Windows Azure. El paso dos es mas bien estético, como queremos que se vea el Chart; en este caso vamos a poner un fondo Gris, un título con fuente 18, con tooltip cuando movemos el cursor por el chart, y lo queremos ver en 3D. Por último creamos el gráfico → un pieChart →  y lo pintamos ( en un div llamado ‘chart’).

La siguiente función que debemos crear es la que carga los componentes de la librería para que se puedan utilizar en el código anterior. Es importante destacar que aquí es donde se asocia nuestra función drawChart con el chart que vamos a crear.

LoadGoogleChart.png

Por último creamos el div en la página HTML donde se va a pintar el chart. Nótese que el nombre del div es el del elemento que se obtiene a la hora de instanciar el chart que vamos a apuntar.

DivGoogleChartDemo1.png

Ahora solo nos queda ejecutar la página Web. El resultado de dicha ejecución se puede ver en la siguiente figura.

PrimerChartResultadoFinal.png

En nuestro próximo post, vamos a usar componentes de Windows Azure para obtener los datos de forma dinámica y para poder graficarlos con Google Charts.

 

Etiquetas de Technorati: ,,

lunes, 21 de abril de 2014

Azure Service Bus y node.js–parte 2

En el post anterior nos conectamos al Windows Service Bus utilizando node.js y obtuvimos la lista de queues que están creadas en el namespace. En este post vamos a enviar un mensaje desde node.js y lo vamos a recibir utilizando también node.js.

Envío del mensaje

Para enviar un mensaje, simplemente invocamos el método sendQueueMessage del ServiceBusService y le indicamos hacia que cola poner el mensaje, el mensaje que queremos enviar y ponemos un callback para manejar el error en caso que se de cuando intentamos poner en el mensaje en la cola. la siguiente figura nos muestra como codificar la invocación a este método.

image

Si ejecutamos el código anterior desde el IDE Cloud9 vamos a darnos cuenta que en el output del terminal se nos indica que el mensaje fue enviado de forma exitosa.

image

Si vamos al portal de Azure, podemos darnos cuenta que el mensaje esta recibido en la cola queuereportes tal y como se lo indicamos en el código anterior.

image

Recibir el mensaje

Para recibir el mensaje desde el bus de servicios de Azure, procedemos con la invocación al método receiveQueueMessage de la clase ServiceBusService. Cuando invocamos este método, le enviamos como parámetro la cola desde donde vamos a recibir el mensaje y un callback para recibir y procesar el mensaje – en este caso solo vamos a desplegar el mensaje en la consola de la terminal.

image

El resultado a la hora de ejecutar el código anterior se ve en la siguiente figura, en donde podemos ver que el mensaje fue recibido – además, se imprimen las propiedades del mensaje que por defecto se imprimen en el toString del objeto.

image

Si vamos al portal de Azure, podemos ver que el mensaje ya fue consumido.

image

Etiquetas de Technorati: ,,

domingo, 20 de abril de 2014

Azure Service Bus y node.js – parte 1

Como hemos venido escribiendo en post anteriores, el bus de servicios de azure no solamente soporta el acceso a través de librerías .NET, si no también se puede acceder con otros lenguajes tales como Java, python y node.js –> si se utiliza AMQP también se puede acceder utilizando otros lenguajes como iremos viendo en post posteriores. En esta serie de post vamos a trabajar con el Azure Service Bus utilizando node.js.

Herramienta de desarrollo

Para este ejemplo vamos a variar un poco  de herramienta de desarrollo y vamos a trabajar con cloud9. Este IDE esta en la nube y es muy popular entre los desarrolladores de node, ya que es un ambiente muy versátil desde donde se pueden hacer prueba, deployment a nubes como Azure, etc.

Instalando el SDK de Azure para node

Para instalar la librería de Azure y tener acceso a los métodos para acceder el Azure Service Bus, vamos a utilizar la consola de Cloud9 y desde ahí vamos a ejecutar el comando npm install azure tal y como se ve en la siguiente figura.

image

Este comando descargara el SDK para Azure y nos permitirá acceder el Azure Service Bus desde nuestro código. Una vez finalizada esta tarea procedemos a cargar la librería de Azure desde nuestro código javascript.

 image

Accediendo el Azure Service Bus con node.js

Seguidamente procedemos a acceder el service bus para verificar que que podemos conectarnos al mismo utilizando las credenciales asignadas en el portal de Azure. Para esto, necesitamos que nuestras credenciales estén incorporadas en las variables de ambiente para que a la hora de ejecutar nuestro código, se pueda conectar al bus de Azure.

image

Estas variables son parseadas por la librería de Azure y busca en las mismas estos valores para iniciar la conexión al bus de servicios. Ahora procedemos a crear un objeto ServiceBusService, el cual nos permite acceder a bus de servicios de Azure.

image

Para este ejemplo vamos a listar la lista de queues que tengo creadas a este momento, lo cual se logra con el siguiente código.

image

Como se puede ver en el listado, utilizamos el método listQueues y procedemos a escribir en la consola el contenido de cada queue, esto porque por defecto el console.dir invoca al toString del objeto. El resultado de ejecutar el código anterior se ve en la terminal del IDE Cloud9, en el cual se pueden ver todos los objetos que existen en la actualidad con sus respectivas propiedades en formato JSON.

image

Etiquetas de Technorati: ,,

sábado, 5 de abril de 2014

Que es AMQP?

“Advanced Message Queuing Protocol ” es un estándar abierto para enviar mensajes entre aplicaciones y/o organizaciones. Este estándar nos permite eliminar el “vendor lock” en lo que respecta a la creación de arquitecturas distribuidas ya que podemos utilizar cualquier intermediario y cambiarlo cuando así lo queramos sin tener necesidad de cambiar el código que escribimos para enviar o recibir los mensajes. Como es un estándar abierto, nos permite conectar aplicaciones que están en distintas plataformas sin necesidad de utilizar un intermediario que le ponga mucho overead a la transacción tal como un bus de servicios de integración en donde normalmente se tiene que enviar para ser procesado en XML y en el peor de los casos usando HTTP.

AMQP en la vida real

Aun sin existir el estándar para manejo de mensajes vías un servidor de colas, este tipo de servidores nos permiten crear aplicaciones distribuidas que nos ayudan a manejar altos volúmenes transaccionales donde no necesariamente alguna de las partes debe de estar disponible para que el envío del mensaje sea exitoso. Este tipo de modelos de operación se aplican de forma común sobre todo en sistemas que procesan transacciones tales como pagos, solicitudes de autorización, manejo de auditorias, etc.

Esta capa intermedia nos permite conectar aplicaciones entre si, dándonos la oportunidad de crear verdaderas aplicaciones distribuidas –> concepto que difiere mucho de tener librerías en un directorio virtual que aunque se podrían utilizar en otras aplicaciones no se hace, porque en realidad al estar en un directorio virtual, están siendo utilizadas de forma local.

Para conectarnos a un servidor AMQP utilizamos diversas librerías disponibles en el mercado, siendo una de las mas comunes Apache Qpid. Esta librería nos permite enviar y recibir mensajes utilizando el estándar AMQP desde cualquier lenguaje soportado y desde el cual se puedan utilizar las librerías; entre los lenguajes incluidos están Java –> JMS, javascript, C++, .NET –> WCF, phyton, Ruby, Perl y una seria de lenguajes que se van agregando a la misma. Igualmente existen otras librerías que nos permiten interactuar con servidores AMQP con otros lenguajes de programación. Es importante destacar que AMQP nos permite interactuar entre diversas plataformas mientras la plataforma se adapte al estándar.

Existen varios servidores que soportan el estándar AMQP, tales como Windows Service Bus, RabbitMQ, Oracle Open Queue, ZeroMQ, etc. Una ventaja con este estándar es que podemos cambiar el servidor sin necesidad de cambiar el código con el cual interactuamos con el servidor, esto nos permite tener una infraestructura distribuida sin estar “amarrado” a una marca en especifico.

Básicamente la forma en que AMQP funciona se puede visualizar en la siguiente figura. Un cliente A tiene una librería en su lenguaje de preferencia que le permite interactuar con un servidor utilizando AMQP; por lo tanto puede enviar mensajes al servidor AMQP. Desde el otro extremo hay otro cliente B que también soporta el estándar AMQP pero no necesariamente utilizan el mismo lenguaje de programación para consumir los mensajes y que puede interactuar con el cliente A sin importar desde que plataforma fue enviado el mensaje.

image

En próximos post vamos a ver como interactúan clientes en plataformas diferentes utilizando AMQP – .NET y Java.

Etiquetas de Technorati:

miércoles, 12 de marzo de 2014

Conectar BizTalk Server a una cola en el Azure Service Bus – Parte 2

En el post anterior, conectamos un servidor BizTalk Server con una cola de servicios del Azure Service Bus. En este escenario movimos un mensaje que contiene un documento XML desde un folder hasta una cola llamada reportqueue en el bus de Azure . En este post vamos a completar el ciclo y vamos a obtener el mensaje directamente desde esta cola utilizando otra aplicación del servidor BizTalk.

Demo

En esta ocasión vamos a iniciar creando un receive location en donde configuramos el adaptador para que se conecte al bus de servicios para obtener los mensajes respectivos.

image

La configuración del adaptador es exactamente igual a la configuración del adaptador de envió configurado en el post anterior, tanto a nivel general como a nivel de autenticación.

image

Ahora asociamos la locación de recibo recién creada con el puerto de recibo.

image

El siguiente paso es configurar un send port para que estos mensajes que vienen de la cola del bus de servicios de Azure sean depositados en un folder de recibo en un archivo con un documento XML. Para esto procedemos a crear un puerto de una vía y configuramos la ruta en donde se va a guardar el archivo que contiene el mensaje obtenido.

image

Luego creamos un filtro en el puerto de envío para que recepcione los mensajes que ingresan a través del puerto que tiene configurado la locación de recibo que apunta al bus de servicios de Windows Azure.

image

Ahora cuando iniciamos la aplicación de BizTalk se consumen los mensajes de la cola y se guardan en el folder designado

image

El mensaje retornado contiene los datos tal y como fueron enviados en el post anterior.

image