Título: Diseño de aplicaciones SaaS sobre plataformas de Cloud Computing Autores: Emiliano Nieto Director : Mg. Patricia Bazán Carrera: Licenciatura en Sistemas Cloud computing es un modelo de computación que permite demandar a través de internet recursos compartidos como procesamiento en servidores, almacenamiento, aplicaciones y servicios, los cuales pueden ser rápidamente aprovisionados y liberados sin ningún esfuerzo de administración por parte del proveedor de éstos servicios. Los tres servicios esenciales de Cloud Computing son Infraestructura como Servicio (IaaS), Plataforma como Servicio (PaaS) y Software como Servicio (SaaS). El presente trabajo tiene como objetivo investigar el diseño de aplicaciones SaaS sobre Plataformas como Servicio, analizando las características propias de una aplicación SaaS en combinación con los servicios que ofrecen los diferentes proveedores de PaaS, de forma tal de evidenciar la problemática técnica que involucra esta combinación, con el fin de identificar conceptos de diseño y de arquitectura que permitan construir soluciones óptimas. Cloud Computing, Computación en la nube, IaaS, La construcción de una aplicación web para ofrecerla Infraestructura como Servicio, PaaS, Plataforma como como un SaaS implica entender correctamente los Servicio, SaaS, Software como Servicio, Google App conceptos de multi-tenant, configurabilidad y Engine, Windows Azure, Multi-tenant, Escalabilidad, escalabilidad, ya que estas características requieren Configurabilidad, Aprovisionamiento, Monetización. conocimientos avanzados de diseño y programación, que no se presentan en aplicaciones web tradicionales. Además, es necesario conocer a fondo la Plataforma como Servicio donde se alojará la aplicación, ya que estas plataformas tienen particularidades que las diferencian de los servidores web tradicionales. Se analizó un caso de estudio concreto, relacionado El concepto de multi-tenant está en constante debate con un proveedor de software que desea construir un actualmente ya que atraviesa la arquitectura completa sistema de alertas de noticias como un SaaS. de una aplicación. Los trabajos futuros están El caso de estudio muestra alternativas para relacionados en cómo impacta el concepto de multi- implementar la característica de multi-tenant, tenant en una arquitectura SOA, en el uso de identidad configurabilidad y escalabilidad propias de una federada para la seguridad de la aplicación y en el uso solución SaaS, en las Plataformas como Servicio de motores de bases de datos con soporte nativo de Google App Engine y Windows Azure. Además multi-tenant. muestra alternativas de implementación de ciertas características específicas de un sistema de alertas sobre una PaaS. Junio de 2013 Agradecimientos Este trabajo final, representa para mí, no solo un hito académico, sino también un hito personal y emocional. Este trabajo es una bisagra, de una etapa de mi vida, que comenzó hace muchos años, y que después de tantas idas y vuelvas, llega a su fin. A menudo los trabajos intelectuales, desafían la reserva emocional de quien los lleva a cabo, y no haber claudicado y haber sido perseverante, son las mejores lecciones que aprendí. Quiero dedicar este trabajo a Roxana, mi mujer, que con su amor, me enseñó a confiar y a creer, devolviéndome la seguridad que necesitaba, y a Chiche y Fabe, nuestros perros, que siempre estuvieron al lado mío, día y noche, haciéndome una compañía invaluable. A ellos, que son mi familia, por siempre, ¡GRACIAS! Por último, un agradecimiento profundo a la vida, por haberme puesto en el camino de esta profesión, sin la cual no hubiera podido ser lo que hoy soy. Diseño de aplicaciones SaaS sobre plataformas de cloud computing INDICE PRINCIPAL CAPÍTULO 1 CLOUD COMPUTING ....................................................................................................... 7 CLOUD COMPUTING ....................................................................................................................................... 7 Antecedentes tecnológicos ........................................................................................................................ 7 Fundamentos de cloud computing............................................................................................................. 8 Ventajas y desventajas de cloud computing ........................................................................................... 11 CONCLUSIÓN ................................................................................................................................................ 13 CAPÍTULO 2 SOFTWARE COMO SERVICIO ..................................................................................... 14 CARACTERÍSTICAS DE UNA SOLUCIÓN SAAS ............................................................................................................. 14 REQUISITOS TÉCNICOS DE LAS APLICACIONES SAAS .................................................................................. 17 CONCLUSIÓN ................................................................................................................................................ 19 CAPÍTULO 3 REQUISITOS TÉCNICOS DE LAS APLICACIONES SAAS....................................... 20 Multi tenant ............................................................................................................................................. 20 Escalabilidad ............................................................................................................................................ 23 Configurabilidad ...................................................................................................................................... 25 Aprovisionamiento ................................................................................................................................... 25 Suscripción, monetización y facturación .................................................................................................. 26 CONCLUSIÓN ................................................................................................................................................ 26 CAPÍTULO 4 TECNICAS DE DISEÑO Y PROGRAMACION PARA IMPLEMENTAR LA CONFIGURABILIDAD ............................................................................................................................ 27 CONFIGURABILIDAD A NIVEL FUNCIONAL ................................................................................................................ 27 CONFIGURABILIDAD A NIVEL DE USUARIO................................................................................................................ 30 CONCLUSIÓN .................................................................................................................................................... 31 CAPÍTULO 5 IMPLEMENTACION DE LA CONFIGURABILIDAD .................................................... 32 IDENTIFICACIÓN DEL TENANT EN LA APLICACIÓN ......................................................................................... 32 CONFIGURABILIDAD DE LA APLICACIÓN ....................................................................................................... 33 Enfoque basado en Features.................................................................................................................... 33 Enfoque utilizando Context Oriented Programming ................................................................................ 36 DISEÑO DE LA BASE DE DATOS .................................................................................................................... 37 CONCLUSIÓN ................................................................................................................................................ 40 CAPÍTULO 6 DESARROLLO DE APLICACIONES SAAS SOBRE PAAS ....................................... 42 INTRODUCCIÓN ................................................................................................................................................. 42 GOOGLE APP ENGINE .................................................................................................................................. 44 WINDOWS AZURE ............................................................................................................................... 50 CONCLUSIÓN ................................................................................................................................................ 53 CAPÍTULO 7 CASO DE ESTUDIO ........................................................................................................ 54 INTRODUCCIÓN ................................................................................................................................................. 54 LINEAMIENTOS PARA LA ARQUITECTURA DEL SISTEMA ............................................................................... 56 Implementación de la Configurabilidad ................................................................................................... 56 Elección del esquema de base de datos ................................................................................................... 67 2 Diseño de aplicaciones SaaS sobre plataformas de cloud computing Diseño de la escalabilidad ........................................................................................................................ 69 implementación de tareas en background .............................................................................................. 74 LINEAMIENTOS PARA LA FUCIONALIDAD CRÍTICA DEL SISTEMA ..................................................................................... 79 Mecanismos de extracción ...................................................................................................................... 80 Mecanismos de full text search ............................................................................................................... 86 Envio de alertas a través de emails .......................................................................................................... 92 implementación de la Facturación ........................................................................................................... 98 CONCLUSIÓN .................................................................................................................................................. 104 CAPÍTULO 8 CONCLUSIONES .......................................................................................................... 106 APORTES PRINCIPALES DEL TRABAJO .................................................................................................................... 106 LINEAS FUTURAS DE INVESTIGACIÓN .................................................................................................................... 106 CONCLUSIÓN FINAL ......................................................................................................................................... 107 Indice de Tablas Tabla 2-1 - Comparativa entre saas, s+s y asp ............................................................................................... 15 Tabla 2-2 - Comparativa entre SaaS y SaaP .................................................................................................... 16 Tabla 4-1 - Relación de características técnicas de saas y técnicas de programación .................. 31 Tabla 5-1 - Técnicas para particionar la base de datos .............................................................................. 40 Tabla 6-1 - Tipos de FrontEnd con sus diferentes capacidades ............................................................. 45 Tabla 6-2 - Tipos de BackEnd con sus diferentes capacidades ............................................................... 46 Tabla 6-3 - Tamaños de Web Role ...................................................................................................................... 51 Tabla 6-4 - Tamaños de Worker Role ................................................................................................................ 51 Tabla 6-5 - Resumen de requisitos técnicos según la plataforma ......................................................... 53 Tabla 7-1 - Trazabilidad entre las secciones y los requisitos técnicos ................................................ 56 Tabla 7-2 - Trazabilidad entre las secciones y los requisitos técnicos del sistema ........................ 80 Tabla 7-3 - Esquema de facturación del Sistema de Alertas .................................................................... 98 Tabla 7-4 - Trazabilidad entre las secciones y los requisitos técnicos ............................................. 104 Indice de Figuras Figura 1-1 – Modelos de servicio según el público ...................................................................................... 10 Figura 3-1- Relación entre multi y single tenant, multi-usuario y multi-instancia ........................ 21 Figura 5-2 - Modelo de componentes para un framework basado en Features .............................. 34 Figura 7-1 - Configuración de un job en Windows Azure ......................................................................... 76 Figura 7-2 - Configuración del Job de Extracción ......................................................................................... 85 Figura 7-3 - Configuración del job de Facturación .................................................................................... 102 3 Diseño de aplicaciones SaaS sobre plataformas de cloud computing Introducción Cloud computing según el National Institute of Standards and Technology (NIST), es un modelo de computación que permite demandar a través de internet recursos compartidos como procesamiento en servidores, almacenamiento, aplicaciones y servicios, los cuales pueden ser rápidamente aprovisionados y liberados sin ningún esfuerzo de administración por parte del proveedor de éstos servicios. Estos servicios cloud están divididos en tres grandes categorías, las cuales se agrupan en una pila, ya que cada capa superior brinda un mayor nivel de abstracción para el usuario del servicio: Software como servicio (SaaS): las aplicaciones son diseñadas para el usuario final, y son accedidas a través de la web. Plataforma como servicio (PaaS): es un conjunto de herramientas y servicios diseñados para codificar y desplegar aplicaciones de forma fácil y eficiente. Infraestructura como servicio (IaaS): es el conjunto de servicios de más bajo nivel, como hardware, almacenamiento, sistemas operativos. Desarrollar aplicaciones sobre una plataforma como servicio implica un nuevo modelo de programación, ya que las aplicaciones no interactúan con los servicios de un SO tradicional, sino que hay una capa más de abstracción. Actualmente existen muchos proveedores de PaaS, como Google App Engine, Windows Azure, Force.com, Amazon EC2 y muchos más, lo que implica que a la hora de desarrollar una aplicación sobre una plataforma de cloud, es necesario analizarla cuidadosamente para determinar sus ventajas y desventajas, tanto en lo técnico como en lo económico. Además, el diseño de una aplicación SaaS tiene ciertos requerimientos técnicos que una plataforma de cloud debe soportar para poder alojar correctamente una aplicación de este tipo, por ejemplo: Escalabilidad y Escalabilidad Automática Múltiples Clientes o Multi Tenants Múltiples Usuarios por Cliente Transparencia y aislamiento entre clientes Redundancia y balanceo de carga Monitorización y facturación Por lo esbozado anteriormente, se pone en evidencia que desarrollar una aplicación SaaS sobre una plataforma de cloud computing es un gran desafío desde el punto de vista del diseño y la programación de la aplicación, y no habrá una única solución a este problema, sino que será necesario tener en cuenta muchas consideraciones sobre la plataforma de cloud y sobre la naturaleza misma de una aplicación SaaS, por lo que esta tesis se propone echar un claro de luz sobre estas cuestiones. 4 Diseño de aplicaciones SaaS sobre plataformas de cloud computing El presente trabajo tiene como objetivo investigar el diseño de aplicaciones SaaS sobre Plataformas como Servicio, analizando las características propias de una aplicación SaaS en combinación con los servicios que ofrecen los diferentes proveedores de PaaS, de forma tal de evidenciar la problemática técnica que involucra esta combinación, con el fin de identificar conceptos de diseño y de arquitectura que permitan construir soluciones óptimas. El trabajo se encuentra organizado en ocho capítulos en donde se abordan los siguientes temas: Capítulo 1: Introducción al concepto de Cloud Computing y a las características esenciales que lo componen, mención de los modelos de servicio y de despliegue. Capítulo 2: Desarrollo del concepto de Software como Servicio, su implicancia desde el punto de vista técnico y del negocio, se realiza comparaciones con otras formas de entregar software al usuario final. Capítulo 3: Se avanza con los requisitos técnicos de las aplicaciones SaaS que condicionan el diseño y la arquitectura de una aplicación. Capítulo 4: Se detallan técnicas de diseño y programación que son útiles para poder implementar el requisito técnico de configurabilidad de las aplicaciones SaaS. Capitulo 5: Se mencionan implementaciones concretas para llevar a cabo el requisito técnico de configurabilidad de las aplicaciones SaaS. Capítulo 6: Se analizan dos plataformas como servicio, Google App Engine y Windows Azure, comparando las herramientas y servicios esenciales. Capítulo 7: Se plantea un caso de estudio de una aplicación SaaS para verter los conceptos teóricos sobre una plataforma como servicio concreta. Capítulo 8: Se realiza una conclusión final del trabajo y se mencionan posibles líneas futuras de investigación. 5 Diseño de aplicaciones SaaS sobre plataformas de cloud computing 6 Diseño de aplicaciones SaaS sobre plataformas de cloud computing CAPÍTULO 1 CLOUD COMPUTING En este capítulo se introducirán las bases del concepto de Cloud Computing, comenzando con los antecedentes tecnológicos que culminaron en el desarrollo de este nuevo modelo de computación. Luego se mencionan sus características esenciales, los diferentes modelos de servicio y de despliegue, finalizando con las ventajas y desventajas de Cloud Computing. CLOUD COMPUTING Cloud computing según el National Institute of Standards and Technology [18], es un modelo de computación que permite demandar a través de internet recursos compartidos como procesamiento en servidores, almacenamiento, aplicaciones y servicios, los cuales pueden ser rápidamente aprovisionados y liberados sin ningún esfuerzo de administración por parte del proveedor de éstos servicios. Para entender el modelo de computación que ofrece Cloud Computing, es necesario dejar en claro a qué llamamos modelo de computación. Un modelo de computación define dónde está la capacidad de cómputo y de qué forma se accede a ella1. En la siguiente sección se enumeran los diferentes modelos de computación que surgieron a lo largo de la historia. ANTECEDENTES TECNOLÓGICOS Modelo de computación Cliente/Servidor Todo el poder de cómputo, todo el software de aplicación, toda la información y todo el control residía en súper computadoras llamadas mainframe o comúnmente llamados servers. Los clientes eran terminales bobas, ya que no tenían poder de cómputo ni memoria, y solo se remitían enviar órdenes al servidor. Modelo de computación Par a Par El modelo cliente/servidor tenía sus falencias, la principal que se convertía en un cuello de botellas, puesto que toda la comunicación debía realizarse con el server. El modelo P2P define una arquitectura de red en donde la capacidad de cómputo está repartida y cada computador tiene capacidad y responsabilidad equivalente. P2P habilita directamente el intercambio de recursos y servicios, no hay necesidad de un servidor central. 1 A menudo se confunde el modelo de computación con el estilo arquitectónico de la aplicación. Según [17] un estilo de arquitectura, también llamado un patrón de arquitectura, es un conjunto de principios, que dan un marco de trabajo para diseñar una aplicación o sistema. Un estilo arquitectónico se monta sobre un modelo de computación. 7 Diseño de aplicaciones SaaS sobre plataformas de cloud computing Modelo de computación distribuida en grid La computación distribuida en grid es una tecnología que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento y aplicaciones específicas) que no están sujetos a un control centralizado. En este sentido es una nueva forma de computación distribuida, en la cual los recursos pueden ser heterogéneos (diferentes arquitecturas, supercomputadores, clusters...) y se encuentran conectados mediante redes de área extensa (por ejemplo Internet). Modelo de computación Cloud Computing La capacidad de cómputo reside en una red masiva de servidores interconectados entre sí en forma de grilla, corriendo en paralelo y combinando los recursos para ofrecerlos de una forma uniforme. Esta colección de servidores es accesible a través de internet. El hardware típicamente es propietario y puede estar alojado en uno o más datacenters. FUNDAMENTOS DE CLOUD COMPUTING La diferente bibliografía consultada sobre el tema, coinciden en describir a Cloud Computing o Computación en la Nube como un conjunto de características esenciales, que se apoya en ciertos modelos de despliegue y que ofrece diferentes modelos de servicio. Las siguientes tres secciones explayan estos conceptos. CARACTERÍSTICAS ESENCIALES Las características esenciales son aquellas que las distinguen de los modelos de computación que la precedieron, según [5]: Autoservicio a demanda: Un consumidor puede unilateralmente aprovisionarse de recursos computacionales, como tiempo de servidor y almacenamiento, de forma automática y sin la necesidad de interacción humana. Amplio acceso a la red: Los servicios deben ser accesibles mediante internet y utilizando mecanismos de comunicación estándar que permitan el acceso heterogéneo de dispositivos como teléfonos móviles, laptops, PDAs, etc. Poolling de recursos: Los recursos de cómputo del proveedor, como almacenamiento, procesamiento, memoria, ancho de banda y máquinas virtuales deben ofrecerse como un pool capaz de servir a múltiples consumidores, estos 8 Diseño de aplicaciones SaaS sobre plataformas de cloud computing recursos físicos pueden virtualizarse 2 , y ser asignados o reasignados dinámicamente según la demanda. La ubicación física de los recursos asignados (datacenter, estado, país, etc) debe hacerse de un modo transparente. Elasticidad: Los recursos y servicios deben ser aprovisionados rápida y elásticamente, en algunos casos de forma automática, para permitir a las aplicaciones aumentar rápidamente su capacidad de cómputo o disminuirla, según variables que pueden ser desde determinados horarios de ciertos días o cuándo se detecta que la capacidad de cómputo actual está al máximo y se necesita más. Medición: El uso de los recursos debe ser monitoreado, medido, controlado y reportado de una manera conveniente, de forma tal de proveer la transparencia tanto para el proveedor como para el consumidor. MODELOS DE SERVICIO El modelo de servicio de Cloud Computing está relacionado directamente con el modelo de negocio de Cloud Computing, en donde la característica esencial es la forma de pago: “El consumidor solo paga por lo que usa” Debido a esta característica, el consumidor no compra un producto, sino que renta un servicio por un tiempo determinado y solo paga por el uso que le dé al mismo dentro del tiempo estipulado. En concordancia con esta definición, en la diversa literatura sobre Cloud Computing emergió el término “X as a Service”, donde X representa el tipo de servicio que se ofrece. La mayoría de los autores presentan el modelo de servicio como una pila de servicios, como en la Figura 1-1, orientados para diferente público. 2Virtualización es la capacidad de emular uno o más servidores dentro de un único computador físico. Esto permite a una sola computadora, tomar el rol de múltiples computadoras, aprovechando recursos que de otra manera no podrían ser utilizados. 9
Description: