MSDN Blogs
  • WarNov Developer Evangelist

    Convención Internacional de Interoperabilidad

    • 2 Comments

     

    image001[8]

     

    Los invito a participar este miércoles 9 de junio, en la 1ª Convención Virtual Internacional de Interoperabilidad “Tecnologías Integradas”. Es un evento que tiene como objetivo mostrar escenarios de la vida real que les permitirán ver la manera más efectiva de integrar diversas tecnologías del mundo de hoy. Durante el mismo, tendrán la oportunidad de compartir las experiencias de cada uno de los expositores internacionales desarrolladores de soluciones en diferentes plataformas, dentro del marco de integración tecnológica. Contaremos con la participación de tecnólogos, desarrolladores y profesionales de interoperabilidad de Venezuela, Ecuador, México, Perú, Brasil y otros países de Latinoamérica.

    image002[13]

    Integrando Tecnologías 

    Eduardo Nuñez

    Cloud Computing - La Nueva Era 

    Luis Daniel Soto

    Interoperando con Productividad en ambientes de colaboración

    Luis Du Solier Grinda

    Virtualizar es la clave de la interoperabilidad 

    Argenis Avendaño

    Caso de éxito de interoperabilidad: Port.25 

    Peter Galli

    Desarrollando aplicaciones PHP con Eclipse para Windows Azure 

    Eduardo Sojo

    Cómo sacarle provecho a las aplicaciones PHP sobre Windows

    Antonio Ognio

    Servicios de Federación de Active Directory

    Felix Gonzalez

    Framework Interoperable?

    Carlos Figueroa

    Integrando aplicaciones de manera extensible

    Interoperabilidad con COM en aplicaciones de Silverlight 4

    Rodrigo Diaz Concha

    Colaboración entre Samba y Sharepoint 

    Yonathan Arrivillaga

    Conectividad de portales con Web Services for remote portlets   

    Virtualizar aplicaciones para ambientes heterogéneos

    Julio Martus

    Interoperando con SUSE Linux: Proyecto Moonlight 

    Alessandro Binhara

    Open Source y Software Propietario 

    Cesar Brod

    Integración y colaboración entre Sistemas Operativos

    Everaldo Canuto

    image003[8]

     

    image004[7]

  • WarNov Developer Evangelist

    Qué tiene y qué no tiene SQL Azure?

    • 1 Comments

    Esta es una de las dudas que se presenta frecuentemente con respecto a las tecnologías de Windows Azure.

    Aquí va rápidamente la respuesta:

    Transact-SQL es un lenguaje que contiene comandos que se utilizan para administrar instancias de SQL Server, incluyendo la creación y administración de todos los objetos de una instancia de SQL Server e insertar, recuperar, modificar y eliminar todos los datos en tablas. Las aplicaciones pueden comunicarse con una instancia de SQL Server mediante el envío de instrucciones Transact-SQL al servidor.

    Microsoft SQL Azure admite un subconjunto de Transact-SQL para SQL Server.

    El soporte para Transact-SQL en SQL Azure puede ser descrito en tres categorías principales:

    • Elementos de lenguaje Transact-SQL que se admiten tal cual.
    • Elementos de lenguaje Transact-SQL que no son compatibles.
    • Elementos de lenguaje Transact-SQL que proporcionan un subconjunto de los argumentos y las opciones en sus correspondientes elementos de Transact-SQL en SQL Server 2008.

    Las siguientes características de Transact-SQL son compatibles o parcialmente soportadas por Sql Azure:

    • Constantes
    • Constraints
    • Cursores
    • Administración y reconstrucción de Índices
    • Tablas Temporales Locales
    • Palabras Reservadas
    • Procedimientos almacenados
    • Administración de Estadísticas
    • Transacciones
    • Triggers
    • Tablas, join y variables de tablas
    • Funciones definidas por Usuarios
    • Vistas

    Las siguientes características de Transact-SQL no son soportadas por SQL Azure:

    • Common Language Runtime (CLR)
    • Ubicación de archivos de base de datos
    • Creación de Mirrors
    • Consultas distribuidas
    • Transacciones distribuidas
    • Administración de grupos
    • Tablas temporales globales
    • Índices y datos espaciales  Ya lo tiene! Open-mouthed smile
    • Opciones de configuración de SQL Server
    • SQL Server Service Broker
    • Tablas del sistema Ya las tiene!
    • Indicadores de traza

     

    Para información detallada, visiten MSDN



  • WarNov Developer Evangelist

    Detalles de Instancias de Cómputo y Cobro en Windows Azure

    • 1 Comments

    Para comprender el detalle de cómo se cobra Windows Azure, primero observemos los detalles de las instancias que lo conforman.

    Las instancias son las unidades operativas de Azure. Cada una de ellas es completamente dedicada (no compartida) para nosotros. La mínima instancia en Azure es la instancia pequeña, que se muestra en el slide. Sin embargo, uno puede armar instancias más grandes: hasta de 8 procesadores de 1.6GHz cada uno. Obviamente esta instancia aparece como una sola con el cuádruple de poder de una pequeña:

    clip_image002

    Cada instancia corre Windows Server 2008 R2 de 64 bits en modo core (sin interfaz gráfica) por lo cual la única manera de acceder a esas instancias es a través del API de Windows Azure. Sobre esta API está por ejemplo construido el Portal del Desarrollador de Windows Azure que es el que nos permite crear cuentas, instancias, configuraciones y despliegues vía web. Esta API está disponible gratuitamente y a través de ella podemos programar fácilmente clientes que se ajusten a nuestras necesidades.

    Cualquier aplicación que corra bien sobre Windows Server 2008 R2 x64 puede correr en Windows Azure siempre y cuando no requiera permisos de administrador para correr correctamente. Además teniendo en cuenta que tenemos los servicios de IIS7, también podremos ejecutar aplicaciones PHP, Fast CGI, etc.

    Además, teniendo en cuenta el modelo de deployment sobre Azure, será necesario que cualquier aplicación que queramos correr en sus instancias pueda empaquetarse dentro del bin de una aplicación .net, para luego ser desplegada. Así pues, podría subirse cualquier .exe y .dll construidos aún en forma nativa (no .net ni C++ de Visual Studio)

    Ya con el concepto de instancia de cómputo claro, observemos las generalidades de los costos en dólares:

    clip_image004

    Aquí se nos indica que cada instancia (pequeña) funcionando por una hora nos cuesta 12 centavos de dólar.

    El cobro de las instancias tiene ciertas particularidades. Se cobran las instancias qque hayan sido desplegadas (deploy). Así estén en Staging o Production, se cobran. Si tenemos una en production y otra en staging, las dos serán cobradas. Si tenemos alguna instancia en modo suspendido, ésta también se cobrará, porque sus recursos están separados para que nadie más la pueda usar. Así que lo más recomendable cuando se sepa que una instancia no se usará, es eliminarla.

    Las fracciones de hora son cobradas como horas completas. Por ejemplo, si encendemos una instancia desde las 10:50 hasta las 11:10, se nos cobrarán dos horas: la primera de 10:50 a 11:00 y la segunda de 11:00 a 11:10. Sin embargo cualquier instancia desplegada por menos de 5 minutos, no será cobrada.

    En cuanto a SQL Azure no hay detalles especiales acerca del cobro. Sólo es necesario saber que se nos cobra US$9.99 por cada gigabyte de base de datos usado al mes. Podemos comprar bases de datos de 1 a 5GB en la versión web y de 10 a 50GB en la versión Business:

    image

  • WarNov Developer Evangelist

    IE9 PP3: Osom, babe!

    • 1 Comments

    Han mantenido su promesa.

    Hablo del equipo de desarrollo de Internet Explorer 9 (IE9).
    En qué consistía?
    1.    Mantener progresos constantes en la estandarización del markup (html/css3), performance y aceleración por hardware.
    2.    Escuchar y responder a las sugerencias de los desarrolladores.
    3.    Liberar nuevos previews cada 8 semanas.

    Lo mejor es que según he experimentado, esta promesa cumplida se refleja en beneficios para todos los desarrolladores y usuarios que tenemos que ver con el desarrollo para browsers.

    Me siento orgulloso de anunciar nuestro tercer platform preview de IE9 (PP3). Un preview enfocado específicamente en permitirnos usar TODA nuestra PC en la Web.

    image[23]

    Al decir TODA, me refiero a que aunque muy bien sabido es que la mayoría del tiempo que estamos pegados al computador nos la pasamos navegando, sucede que los browsers hasta ahora solo usan un pequeño porcentaje del poder de cómputo de la PC, aun cuando en los últimos meses el poder de cómputo ha llegado a cuadruplicarse con el mismo precio! Por ejemplo, como experiencia personal, les comento que comprarme una tarjeta de video en el 2010 con el doble de rendimiento que la que había comprado en el 2007, me costó 4 veces menos!

    Así que hoy en día, la Web solo está tomando ventaja del hardware que existía años atrás. Esto no solo aplica para PC sino para cualquier plataforma de cómputo.

    Hablemos sin embargo del mundo PC: En los últimos dos años, el ecosistema de Windows ha alcanzado grandes avances, pero los browsers hoy no están tomando ventaja de todos esos avances. Pero esto ha cambiado con IE9. Un browser donde un markup aún más estándar conoce la aceleración por hardware para hacer pedazos el techo de cristal en el performance gráfico de la web.
    Esto obviamente crea un sinfín de posibilidades para nuevas aplicaciones Web que ahora se pueden arriesgar a ser más gráficas y funcionalmente ricas, dado que el hardware está ya disponible para soportarlo.
    IE9 a través de Windows y hardware moderno especialmente concebido para trabajar con Windows libera toda una nueva clase de experiencias para la Web. Una muestra de ello, son los siguientes tags disponibles ya en IE9:

    •    canvas potenciado por la GPU… sí! CANVAS! No qué no? HTML5 Canvas!
    •    <audio> y <video> también potenciados por la GPU!

    Así que las operaciones más exigentes para IE9 dejarán de ejecutarse en la ocupada CPU, para ir a ser devoradas por la veloz hambrienta GPU. Esto se ha logrado trabajando estrechamente con partners como NVIDIA y AMD/ATI para asegurar la más fuerte de las compatibilidades.
    Veamos este video para darnos cuenta de la abrumante ventaja en rendimiento gráfico contra Chrome:

    Tan abrumante es la ventaja, que por allí he oído algunos comentarios graciosos acerca de que: Eso no puede ser! Es un fake contra! Es un demo amañado! Es solo un video!
    Si usted también cree que es un complot, puede comprobarlo por sí mismo descargando la plataforma aquí.
    No tema bajar e instalar la PP3. No afectará su actual IE ni mucho menos cualquiera de sus otros preciados browsers. Son solo 16Mb. Al ser un preview, funciona perfectamente standalone. Instálelo y visite este demo (el mismo del video). Haga la prueba del demo y luego si no es muy susceptible, haga la prueba en cualquier otro browser que “soporte” HTML 5. Winking smile

    A medida que los desarrolladores construyen Webs más asombrosas, un performance adecuado se hace obligatorio. Estamos a punto de llegar a un punto en el tiempo en que si no accedemos a un buen performance, la nueva Web dejará de ser una experiencia y comenzará a ser un fastidio.

    Para nosotros como desarrolladores, el hecho de que nuestros sitios carguen rápidamente y corran correctamente significa una mejora en la experiencia de nuestros clientes y esto es lo que mueve nuestro trabajo. Por eso es que IE9 ha trabajado mucho en las mejoras en performance.

    Es así como para esta liberación, hemos aumentado la velocidad de ejecución de JavaScript en un 25% respecto al PP2 para estar por debajo de los 400ms en la prueba del SunSpider. (Todas estas pruebas se pueden acceder desde el portal de la plataforma y replicar en sus browsers preferidos. Son pruebas independientes de terceros.)


     image
    Agreguemos a esto el hecho de que hoy podemos ejecutar estos JavaScript aprovechando a las CPU multi-core en su totalidad. De esta manera, una aplicación por ejemplo de mapas que se podía desplazar a 5 frames por segundo, ahora alcanzan hasta 60 frames por segundo (una tasa que cualquier juego envidiaría). Al final tendríamos una Web que se siente como si fuera parte nativa del PC en el que se ejecuta… Imaginen entonces la diferencia para aplicaciones JavaScript más complejas como Excel Web App!!!

    y esto me lleva a pensar… “Uy, se sentirá como Silverlight” Entonces para donde me voy? Para Silverlight? O para HTML5…. Desaparecerá alguno de los dos?

    Personalmente creo que ninguno desaparecerá… se trata más bien del poder de elección que da Microsoft. Si queremos un aplicativo totalmente estándar por defecto, lo haremos usando HTML5; y estaremos confiados de que con IE9 estas aplicaciones brillarán por su performance y respuesta a estándares… obviamente renunciando a todo el poder de desarrollo rápido que se puede lograr con Silverlight, donde podemos emplear todos los conocimientos y estructura definidas por el Framework .NET. Pero si el que el usuario final instale un plugin de Silverlight no es problema, entonces qué mejor que usar todo lo que ya sabemos y herramientas tan poderosas como Visual Studio y la suite de Expression!

    Los desarrolladores hemos pedido mejor interoperabilidad de manera que el mismo markup (tags, script, language, css) funcione en todos los browsers. PP3 incluye soporte a ES5 el estándar por excelencia de JavaScript.
    Por si fuera poco, el marcador en ACID 3 subió enormemente desde el PP1, cuando posteé al respecto:


     image


    Y eso que venimos de un muy humilde 12 en IE8. Pues ahora en PP3 tenemos:


     image


    83!!! Me preocupa en que se basarán las futuras críticas de IE que siempre usaban el ACID como derrotero. Esto, sin tener en cuenta que el test ACID 3 no es tan imparcial como pareciese. De hecho fue creado por un empleado de Google.
    Por si fuera poco, miren lo que obtuve al probar los Selectores de CSS3!


    “From the 43 selectors 43 have passed, 0 are buggy and 0 are unsupported (Passed 578 out of 578 tests)”
    That’s Right! Full Support!

     

    image
    IE9 + Windows + aceleración por hardware es como el vino...  se pone mejor con el tiempo… Es hora de aprovechar todo el poder de nuestra PC y reinventar la Web! Ingrese a http://ietestdrive.com Descargue la plataforma, vea las demos, ejecute las pruebas de estandarización y rendimiento y prepárese para lo que viene!
     

  • WarNov Developer Evangelist

    Windows Azure Tech-Day Bogotá y Medellín

    • 0 Comments

    Siguiendo con el impulso que le estamos dando a Windows Azure desde nuestra subsidiaria colombiana, me permito invitarlos a nuestro Windows Azure Tech Day. Que se realizará en Bogotá el día 17 de Junio y en Medellín el día 22 de Junio.

    Para registrarse gratuitamente en sus respectivas ciudades hagan click en la imagen correspondiente!

    Bogotá

    image

    Medellín

    image

  • WarNov Developer Evangelist

    Addin de Proyectos de Web Deployment disponibles para Visual Studio 2010

    • 0 Comments

    Desde el lanzamiento de Visual Studio 2010, ésta era una de las principales características que estaba esperando. Ya venía desde VS2005 también como un Addin y permite básicamente crear en un directorio el conjunto de recursos necesarios para copiar en el Web Server de manera que la instalación de un  sitio Web se automatiza y facilita enormemente. Sin embargo ésta es solo una de las formas que tenemos para publicar sitios Web desde Visual Studio. de hecho, hasta hoy estaba usando el Publish tradicional que tienen los proyectos web, desde el explorador de soluciones.

    Con el fin de proporcionar funcionalidad adicional para crear e implementar sitios Web y aplicaciones Web en Visual Studio 2010, este complemento proporciona una interfaz de usuario completa para administrar configuraciones de generación, de merging y el uso de tareas predefinidas y generación posterior con MSBuild.

    Además hay compatibilidad con proyectos de implementación Web de Visual Studio 2008 y Visual Studio 2005 y opciones de compilación avanzada. Este Addin lo que genera es un script de MSBuild extensible, que permite a los desarrolladores web crear acciones pre-build y post-build.

    Obviamente, este addin no cambia la forma en que hacemos los sitios o proyectos Web en Visual Studio 2010. En su lugar, toma un proyecto Web de Visual Studio existente como entrada y genera una web pre compilada como salida. Así que no se cambian los archivos en el proyecto origen de ninguna manera..

    Pueden descargarlo de MSDN

  • WarNov Developer Evangelist

    Ultima Hora en SQL Azure

    • 0 Comments

    Importantes anuncios acerca de SQL Azure fueron emitidos durante el Tech Ed 2010 en Nueva Orleans. Evento organizado por Microsoft en el cual se tratan los últimos temas de nuestras tecnologías tanto de IT como de Desarrollo.

    Recién salidos del horno, aquí están para ustedes los últimos acontecimientos al respecto:

    1. SQL Azure aumenta el tamaño por base de datos!
      • Si! Pasa de 10GB a 50GB
      • Esta oferta estará disponible a partir de Junio 28

        image
    2. Preview de Data Sync Service
      • Un servicio que le ofrece a sus clientes flexibilidad y control sobre sus datos, permitiéndoles tomar decisiones discretas y granulares acerca de cómo sus datos son distribuidos a través de múltiples datacenters en regiones geográficas distintas. En http://www.sqlazurelabs.com pueden inscribirse para recibir una invitación de prueba del servicio.
    3. SQL Server Web Manager para SQL Azure (SSWM)
      • El CTP de esta herramienta será lanzado en este verano. Es una herramienta ligera para administración de Bases de Datos SQL Azure via Web (en varias conferencias ya me habían preguntado si no iba a haber una herramienta de este tipo). Está diseñada especialmente para desarrolladores Web y otros profesionales que buscan una solución directa para poder desarrollar y distribuir y administrar rápidamente sus aplicaciones orientadas a datos en la nube. Las funcionalidades aunque básicas, permitirán las operaciones más frecuentes del día a día: Creación y ejecución de consultas, diseño y edición de esquemas de DB, edición de datos de tablas.
    4. Acceso a bases de datos de SQL Azure a través de Microsoft Access 2010:
      • Access soporta la conexión a SQL Azure a través de ODBC (tablas linkeadas o consultas pass-through). Con esto se abren oportunidades para los usuarios de Access y proveedores de tecnología para crear experiencias enriquecidas usando el cloud computing. Para los Information Workers, esto les da una forma sencilla para conectarse directamente desde Access a Bases de Datos relacionales en la nube, ofreciendo facilidad de uso y flexibilidad de IT. Ahora hay más posibilidades para escoger cómo integrar aplicaciones de cliente enriquecido que se pueden conectar directamente tanto a la nube como a bases de datos on-premise creando soluciones únicas y ágiles.
      • Se necesitará usar el cliente “SQL Server Native Client 10.0” que viene con la instalación de SQL Server 2008 R2 (con un Express es suficiente para quedar con el driver. Posteriormente estaré publicando un video post que nos muestra cómo hacer esta conexión. 
        image 
    5. Soporte a Datos Espaciales!
      • También se prevé que para este verano tengamos disponible esta gran característica que nos permitirá almacenar el tipo de dato Spatial para guardar información basada en la locación (como coordenadas geográficas). Esto es muy necesario para operaciones espaciales como el mapeo, el cálculo de distancia entre puntos, saber si una locación está en una región dada, etc.

    6. Tablas del Sistema: Ya es posible acceder a la metadata de las bases de datos a través de las tablas del sistema. Es así como una consulta como esta:
    SELECT COUNT(*) from information_schema.tables 
    WHERE table_type = 'base table'

    Puede ejecutarse sin problemas en SQL Azure!

     

    Como ven, la evolución de SQL Azure, como de toda la plataforma de Azure en general, es vertiginosa. Y en este momento tenemos la oportunidad de ser pioneros y aprovechar toda esta tecnología para desarrollar software como nunca antes, obteniendo los mejores resultados, con los costos más bajos.

    Por cierto… qué soluciones se les ocurre cuando piensan en una base de datos en la nube? Comenten y déjenoslo saber!

     




  • WarNov Developer Evangelist

    Precisión con tipos de Datos .NET

    • 0 Comments

    Por qué en el Framework .NET puede pasar que:
    0.2 + 0.1 = 0.3000000000000000000004 ?

    Algunas veces, escoger el tipo de datos apropiado para nuestra aplicación puede no ser trivial. Aquí muestro un caso en el que se marca la diferencia entre una aplicación errónea y una correcta, solo mediante un cambio de tipo desde double a decimal.
    También hablo de errores de precisión y cómo evitarlos con el uso de deltas de error. Finalmente muestro un tip de Visual Studio 2010 para escribir código más claro.

     

    En el video menciono las Visual Studio 2010 Pro Power Tools. Un conjunto de extensiones para Visual Studio Professional (y superiores) que mejoran la productividad del desarrollador. Estas tools, las pueden descargar de MSDN de manera gratuita.

    Este post fue originado por una pregunta de Juan David

  • WarNov Developer Evangelist

    Extension Methods enriquecidos con Generic Methods

    • 0 Comments

    Un par de cosas que hoy en día me hacen feliz de estar en este momento de la historia de la tecnología de desarrollo.

    Recuerdo mis comienzos de programación con C++; aprendía a programar estructuras y bases de datos… hacía mi propio motor. Trasnocho incesante; la entrega del proyecto estaba encima… mucha repetición de código solo para cambiar tipos; cantidad de métodos estáticos y archivos de Utilidades para “reusar”. Lo pongo entre comillas, porque cada vez que necesitaba trabajar con nuevos tipos, tenía que copiar y pegar la funcionalidad… sí… traté de trabajar con templates, pero no eran del todo estándar; además el manejo de memoria… todo un pain. Además cuando quería utilidades sobre un tipo de datos dado, tenía que crear una biblioteca de métodos estáticos que recibían como parámetro a instancias de eso tipos, en vez de poder “extender” las funcionalidades de esos tipos de una manera sencilla que no me implecara tener que heredar (si es que se podía). Precisamente de la solución a esas incomodidades, les hablaré en esta ocasión.

    .NET no es dos clicks y la aplicación está lista. Mejor dicho; no es solo eso.

    La velocidad y productividad de desarrollo no solo es a nivel de Wizards o Asistentes, es algo más de fondo; la misma filosofía del framework nos permite tener características tan poderosas como las que les mostraré en el siguiente video: Métodos Genéricos y Métodos de Extensión.

    Observaremos cómo los métodos de extensión nos permiten precisamente extender la funcionalidad de tipos ya definidos sean nativos o creados por algún desarrollador, sin necesidad de crear jerarquías de herencia o tipos anidados. Alguna vez quiso un método para convertir la inicial de una palabra a mayúscula, bien, con los métodos extendidos podrá lograr algo como:

    var nombre="pedro";
    var nombreInicialMayuscula=nombre.CapitalizeFirstLetter();
    
    // nombreInicialMayuscula="Pedro";

    Por si fuera poco, observaremos como mezclar estas capacidades con métodos genéricos para lograr una flexibilidad total.

    Separe media hora de su tiempo y observe además algunos otros tips mientras desarrollamos el ejemplo que nos ayudará un poco a mejorar la fineza del código que escribimos:

     

     

  • WarNov Developer Evangelist

    Stairway to Azure 6: Storage de Azure a Fondo: Escalabilidad y Límites

    • 0 Comments

    Como vimos en este post (qué es recomendable leer primero), Windows Azure ofrece tres tipos básicos de almacenamiento. En este post profundizaremos en ellos y mostraremos un nuevo tipo de almacenamiento ofrecido por Azure. Los Drives.

    Los tipos de almacenamiento convencionales:

    Blobs:

    Almacenamiento de archivos nombrados, junto con metadata.

    Tables:

    Almacenamiento escalable, masivo y estructurado. Una tabla es un conjunto de entidades. Cada una con un conjunto de propiedades. Las aplicaciones pueden manipular las entidades y consultar sus entidades.

    Queues:

    Proveen un robusto almacenamiento y distribución de mensajes para permitir la construcción de aplicaciones no acopladas y flujos de trabajo escalables entre las diferentes partes (roles) de las aplicaciones de Azure.

    Drives:

    Siendo este un tipo nuevo de almacenamiento, provee volúmenes de almacenamiento NTFS para ser usados por las aplicaciones de Windows Azure. De esta manera con los apis convencionales existentes de sistemas de archivos se puede acceder a drives de red mapeados. Cada drive está mapeado a una página de un Blob. Así que la escalabilidad de los drives, es la misma de los Blobs. De manera que sólo en mi siguiente post me estaré enfocando en los drives.

    Veamos la jerarquía de almacenamiento en Azure:

    clip_image002

    Cómo se pueden acceder los datos?

    Esencialmente*, los datos se acceden a través de REST. Cuando adquirimos una cuenta de storage, automáticamente tenemos tres servicios REST para poder ejecutar operaciones CRUD sobre cada uno de los tipos de almacenamiento (blob, table, queues).

    Cada uno de estos servicios se accede con una URL de acuerdo a la siguiente estructura:

    clip_image004

    Observen que el nombre de la cuenta <account> se extrae del nombre que se registra cuando se adquiere la misma en el Developer Portal. Así que un DNS direcciona todos los requerimientos a la cuenta adecuada. Observemos también en los hostnames las palabras clave “blob”, “table” y “queue”: esto nos indica que podríamos tener en la misma cuenta un blob, una tabla y una cola llamadas por ejemplo “music”.

    Una cuenta de almacenamiento de Windows Azure puede tener hasta 100TBs de almacenamiento. De resto, no hay limitaciones en la cantidad de contenedores, ni de blobs dentro de esos contenedores, ni de tablas ni entidades dentro de ellas, ni de colas ni mensajes dentro de ellas. Lo único, es que todo eso no debe sumar más de 100TBs.

    Blobs

    clip_image006

    En este ejemplo, tengo una cuenta de storage llamada “warnov”. A la cual le he creado dos contenedores. Estos contenedores podrían equipararse con las carpetas del sistema de archivos. Los contenedores tienen una política de sharing pública o privada. La segunda requiere siempre autenticación mientras la primera puede ser accedida por todo el mundo. Los contenedores también tienen metadata asociada a ellos en la forma <nombre, valor> y puede tener hasta 8kb de tamaño por contenedor. Los blobs pertenecientes a un contenedor también tienen este tipo de metadata, con el mismo tamaño disponible.

    Entonces para acceder a un blob determinado, usaríamos:

    http://<account>.blob.core.windows.net/<container>/<blobname>

    Básicamente tenemos dos tipos de blobs soportados:

    • Blobs de Bloque:
      • Son orientados a tareas de streaming
      • Cada blob es una lista secuencial de bloques
      • Cada bloque puede tener un tamaño máximo de 200GB
      • Las actualizaciones sobre los bloques requieren de una confirmación: Primero se suben todos los bloques a ser modificados, y luego se aceptan los cambios en una operación atómica.
    • Blobs de Página:
      • Son orientados a tareas de escritura aleatoria (manejo de archivos convencional)
      • El tamaño máximo de página es de 1TB
      • Cada blob contienen un índice no secuencial de páginas
      • No hay proceso de confirmación (al estilo sistema de archivos convencional y a diferencia de los bloques)
      • Precisamente sobre este tipo de blobs es que se montan los drives que mencioné al principio
      • También permiten ejecutar escriturar basadas en rango de un blob; o sea; tratar un blob como un archivo al cual solo se le modificarán ciertos bytes y no todo el archivo, lo que obviamente agiliza la operación. Además se puede obtener un permiso de acceso exclusivo en escenarios de concurrencia (por ejemplo cuando dos usuarios distintos tratan de modificar un mismo archivo)

    Tablas:

    clip_image008

    Las entidades son comparables a filas en una tabla de base de datos. Contienen una serie de propiedades. Todas las tablas tienen dos propiedades. Una llave de partición y una llave de fila. Estas dos propiedades conforman la llave única de la entidad. Las llaves de partición (PartitionKey) son usadas por el sistema para distribuir automáticamente y balancear las cargas de las entidades de las tablas a través de varios servidores. Esto es, una tabla se divide físicamente en particiones que se distribuyen entre varios servidores. Ejemplos de particiones por ejemplo pueden ser las fechas en las que ocurren los registros.

    Las llaves de fila (RowKey) identifican a cada registro dentro de una partición dada.

    Estas dos llaves además representan un índice de búsqueda sobre las entidades. Así que si buscamos sobre estas dos propiedades, obtendremos resultados de una manera más eficiente. Los resultados además son emitidos ordenados primero por a PartitionKey y luego en RowKey.

    Estas dos llaves siempre tienen que ser de tipo String. El resto de propiedades pueden ser: Binary, Bool, DateTime, Double, GUID, Int, Int64, String.

    Las tablas no tienen esquema fijo. Lo único que almacenan son propiedades y cada propiedad se compone de un nombre y un valor. De esta manera, puede darse que en una misma tabla, puedan haber entidades muy diferentes en estructura. O que Dos entidades tengan propiedades llamadas igual pero con distinto tipo de valor. La única restricción es que en una sola entidad no se puede repetir el nombre de las propiedades.

    Una entidad puede tener hasta 255 propiedades. Cada entidad puede ser máximo de 1MB de tamaño. Estas propiedades son Case Sensitive y se pueden equiparar con columnas en una DB.

    Para manejar una concurrencia optimista cada entidad es marcada un una versión mantenida por el sistema a través de un TimeStamp interno (que en últimas es otra propiedad).

    Colas:

    clip_image010

    En las colas generalmente guardamos mensajes que representan los requerimientos de nuestros clientes. Este sistema nos permite almacenar todos los requerimientos para que de manera escalable, los podamos atender sin que se pierdan.

    Las colas pueden tener metadata asociada a ellas en la forma de <llave, valor> con un tamaño máximo de 8KB. Las colas almacenan los mensajes.-

    Un mensaje se almacena máximo por una semana. Los mensajes más viejos de una semana son eliminados por un garbage collector del sistema.

    Los mensajes pueden ser hasta de 8KB de tamaño. Para almacenar dartos más grandes, recurriremos pues al blob storage o table storage y en el mensaje almacenamos la referencia al lugar en que hemos guardado el resto de la información.

    Finalmente, a pesar de que podemos poner mensajes en la cola de manera binaria, cuando los traemos nuevamente, la respuesta se da en formato XML y codificado con base64.

    Particiones

    No solo las tablas usan particiones.

    Todos los objetos de almacenamiento de Azure lo hacen. Las particiones son usadas para localizar los elementos requeridos y para hacer balanceo de carga y partición de objetos a través de los servidores para satisfacer las necesidades de tráfico.

    Todos los objetos de una misma partición se agrupan en el mismo grupo físico. Esto permite básicamente:

    • Ejecutar operaciones atómicas fácilmente en la misma partición
    • Ejecutar un cacheo local para mejorar el performance

    Cuál es la partición para los distintos objetos?

    • Blobs: ContainerName + BlobName
    • Entities: TableName + PartitionKey
    • Messages: QueueName

    Más de límites

    Como lo mencioné anteriormente, cada cuenta de Almacenamiento en Windows Azure tiene hasta 100TB de espacio.

    Una suscripción de Windows Azure, brinda hasta 5 cuentas de almacenamiento.

    Si en nuestra aplicación llegáramos a necesitar Petabytes de información, se puede contactar al soporte al cliente para solicitar más cuentas aparte de las 5 obtenidas.

    Entonces es bueno tener en mente que no vamos a crear una cuenta por cada cliente que tengamos, sino por ejemplo representar cada cliente en un container.

    En cuanto a transacciones, en una sola cuenta se pueden tener hasta 5000 requests por segundo y en ocupación de ancho de banda hasta 500Mbps.

    Ahora, hablando de límites por partición tenemos:

    Transacciones por segundo permitidas para una partición: 500. Esto quiere decir, por ejemplo que una cola puede ser solicitada 500 veces en un segundo (recordemos que cada cola ocupa su propia partición).

    Pero en una tabla, donde podemos tener varias particiones, esos 500 requests por segundo podrían escalarse a varios miles!

    En cuanto a blobs, dado que cada blob tiene su propia partición, tenemos que el único límite sería el ancho de banda para cada blob que en este caso es de 60Mbps

    Qué pasa si se superan los límites de trabajo para una partición en particular? Se empezaran a producir errores “503 Server Busy”. Cuando se detectan estos errores, una buena práctica es comenzar a usar un algoritmo de “exponential backoff” para disminuir la carga de la partición. Pero si esto continúa muy frecuentemente, la aplicación debería tratar de mejorar su partición de datos y tasa de transferencia de la siguiente manera:

    Blobs: Considerar usar mejor el Windows Azure Content Delivery Network (CDN) para permitir acceso anónimo a blobs que tienen mucho acceso. Una solución de Windows Azure que provee a los desarrolladores una solución global para distribuir contenido de alto ancho de banda. Esperen un post al respecto.

    Tablas: Usar una PartitionKey más granular que permita a Azure distribuir las particiones entre más servidores.

    Colas: Hacer batch de varios work ítems en un solo mensaje, para aumentar la cantidad de trabajo resuleto en cada uno de ellos, o usar múltiples colas.

    Para finalizar, en este post de Brad Calder (basado en el cual está este mío), encontré un comentario donde una persona decía que 500 transacciones por segundo para una cola era algo muy pequeño. Y que en realidad esperaba que fuera al menos 100 veces mejor, para justificar el cuento de la nube y poder desarrollar algo como twitter.

    Esto tiene mucho sentido desde cierto punto de vista. Pero si tenemos en cuenta que Windows Azure no nos impone límite sobre el número de colas que puedo crear y si además mandamos varias requisiciones para un solo mensaje, si yo empaquetase 10 requerimientos por mensaje y tuviera 10 colas, fácilmente lograría 100 veces más rendimiento que un solo mensaje y una sola cola. Con esta misma metodología podría lograr rendimientos aún mayores!

Page 1 of 1 (10 items)