lunes, 23 de marzo de 2009

Aplicaciones para Cloud Computing: El nuevo reto para los desarrolladores

Hola!

En esta ocasión les comparto este interesante analisis sobre las consideraciones que debemos tener en cuenta si deseamos desarrollar para la "nube", independientemente del proveedor que se escoga, aqui les presento un resumen del articulo.

Primero que nada definamos que es Cloud Computing (computación en la nube), basicamente es un concepto general que incorpora el software como servicio y que engloba a todas aquellas aplicaciones de la Web 2.0.

Esta es la tendencia acerca del desarrollo de software y uno de las empresas que mejor representan esta nueva forma de hacer software y negocios es SalesForce.com, una empresa que ofrece sus servicios de CRM (Customer Relationship Management por sus siglas en inglés) a través de Internet. Otros ejemplos son Google Apps y por supuesto mas recientemente Windows Azure del cual les platicare mas a detalle en otra ocasión.

La mayoria de nosotros hemos desarrollado aplicaciones para la web o desktop y cada una tiene su propios retos y problematicas incluso puede ser que se requiera de ambos tipos de ambientes. Al desarrollar para la nube, los problemas de infraestructura ahora son responsabilidad del proveedor (rendimiento de servidores, bases de datos,etc) lo cual nos quita un peso de encima, pero se presentan nuevos retos que les comento a continuación:

  • Fallas en el servidor son dados en la nube
El diseño de las aplicaciones debe considerar que no hay un disco duro local o un registry y que si el servidor falla nuestra aplicación debe ser tolerante a la redundancia. Para esto se sugiere que la aplicación no debe tener estado (en inglés deber ser statelessness) y que si algo falla se debe destruir y volver a crear (algo asi como el Ave Fenix no?)

  • Una Arquitectura diferente en la nube
En este punto hay que considerar que la aplicación tendrá una arquitectura distribuida.
Por ejemplo, el front-end pudiera estar en Facebook, el almacenamiento de datos en Amazon.com' S3 y la lógica de la aplicación en otro lugar, asi que se deben diseñar y aplicar buenas prácticas de ingenieria de software para ontener una aplicación escalable dentro de la nube.

  • Las bases de datos no son las mismas en la nube
El acceso a la base de datos es crucial para cualquier aplicación y en este caso la problematica con la que nos topamos es que el modelo relacional quiza no es el mas adecuado para el almacenamiento de datos. En el caso de Microsoft con Windows Azure el motor de acceso a los datos no usa el modelo estandard relacional, asi que por ejemplo el concepto de store procedure ya no es aplicable. Por otro lado el motor de datos de Google App utiliza como almacenamiento lo que llaman BigTable, el cual no es una base de datos SQL, sino un modelo que permite guardar la información en diferentes maquinas, que con un modelo relacional seria mucho mas dificil de manejar.

  • Los trabajos de "plomeria" son delegados a la nube
Con esto se refiere a que los desarrolladores pueden enfocarse mas hacia las reglas de negocio e inovación, mientras que el proveedor de los servicos se encarga de cuestiones como el sistema operativo y el hardware. Por ejemplo salesforce.com, cuenta con servicios de seguridad, balanceo de cargas y flujo de trabajo entre otros. Este tipo de servicios pre-contruidos juegan un papel crucial entre desarrollar una apliación con un proveedor u otro, ya que ahorran costos.

  • Otras consideraciones al desarrollar para la nube
Para finalizar hay que tomar en cuenta tambien los esquemas de precios de cada proveedor ya que no funcionan como el esquema tradicional de licencias. Y por otro lado un punto muy importante es desarrollar desde el principio las apliaciones de forma que puedan ser independientes del proveedor, es decir que puedan moverse de una plataforma hacia otra sin mayor cambio. En el caso de Google soporta esta movilidad apoyandose en lenguajes como Python y el framework de desarrollo web Django; y tambien esta trabajando con la comunidad open source para desarrollar herramientras para carga y descarga de datos desde y hacia el App Engine.

Como pueden ver, el cloud computing ya es una realidad y cada vez se va consolidando mas como la nueva plataforma de desarrollo, asi que no debemos quedarnos atras y sigamos preparandonos para este nuevo reto.

Espero encuentre interesante este articulo y continuen documentandose al respecto.

Saludos!





No hay comentarios: