Cloud Computing - ¿Qué es?

En los últimos años la computación ha estado envuelta en un gran cambio, pasando a un modelo se servicios de consumo masivo, ofreciendo una tecnología bajo el esquema de pago-bajo-demanda. En este nuevo esquema, se están desarrollando millones de aplicaciones a las cuales los usuarios pueden acceder a través de internet y no aplicaciones para correr en máquinas de manera individual. Cloud Computing es una extensión del paradigma en donde las aplicaciones son expuestas en internet como servicios a los cuales cualquier persona con autorización puede consumirlos.

El termino Cloud, o en la nube, ha sido usado metafóricamente en la historia para connotar una infraestructura por la cual los usuarios tienen acceso a aplicaciones desde cualquier lugar del mundo bajo demanda, lo que conocemos más comúnmente como Internet. Muchos diagramas de ingeniería muestran la nube como una infraestructura abstracta en donde la información fluye de un lado a otro sin importar lo que existe en medio. Aún cuando existe una estrecha relación entre esta metáfora bien conocida por todos y el verdadero significado del término computación en la nube, es importante hacer énfasis en una definición precisa.

El término Cloud implica dos conceptos claves: Abstracción y virtualización. La abstracción corresponde a olvidar los detalles de la implementación por parte de los usuarios y los desarrolladores, tomando este concepto desde un enfoque en donde las aplicaciones se ejecutan sobre una maquina física que no está especificada, los datos son almacenados en ubicaciones desconocidas, la administración de los sistemas está bajo responsabilidad de un tercero y finalmente los usuarios tienen exceso a esta infraestructura desde cualquier lugar con acceso la red. En cuanto a la virtualización se refiere a la habilidad del sistema para crear sistemas que parezcan independientes ante los usuarios a través de mecanismos de compartir y asignar periodos de uso a los recursos que cada unidad necesita.

Cloud Computing es la abstracción de la noción de compartir recursos físicos y presentarlos ante el usuario final como recursos independientes a través de la virtualización. Cuando hablamos de Cloud Computing haceos referencia a todas las aplicaciones y servicios que se ejecutan en una red distribuida usando recursos virtualizados y que pueden ser accedidos a través de protocolos comunes de internet y estándares de comunicación en redes. Lo importante es que como usuarios nos olvidamos de la infraestructura física que hay detrás y suponemos que los recursos con los que podemos contar en la nube son ilimitados.

Para entrar en una descripción más detallada tenemos dos modelos que definen Cloud Computing: a partir del lugar donde está ubicada y la manera en cómo se administra la infraestructura (Modelo de Despliegue) y a partir del tipo de servicios a los que se puede acceder en la plataforma (Modelo de Servicio). A partir de estos dos modelos es que NIST (National Institute of Standars and Technology) da una definición formal y que puede ser resumida en la siguiente figura, teniendo en cuenta que esta definición se está moviendo hacia una interacción de componentes basados en estándares como SOA (Service Oriented Architecture) por lo que en un futuro incluirá nuevos componentes.

Modelo de Despliegue

Según NIST el modelo de despliegue hace diferencia y define el propósito de la nube y en donde se encuentra ubicada. Una nube pública hace referencia a una infraestructura que está disponible para uso público, a diferencia de las nubes privadas, en donde la infraestructura es operada para uso exclusivo de una organización. También existen las nubes comunitarias que han sido creadas y organizadas para servir un propósito específico o una función común. Finalmente, las nubes híbridas combinan varias nubes, privadas, públicas y comunitarias, en donde cada una mantiene sus características propias pero trabajan en cnjunto como una sola unidad.

Modelo de Servicios

Existen diferentes modelos de servicios que se describen como XaaS ( as Services o como servicio). Lo más comunes son:

INFRAESTRUCTURA COMO SERVICIO (IaaS)

Dentro de este modelo de servicio, el proveedor de servicios le ofrece a cada cliente una infraestructura computacional virtual con características estándares que pueden ser escogidas de una gran variedad de opciones ofrecidas y que el cliente selecciona de acuerdo a sus necesidades. El proveedor está encargado de todas las operaciones del hosting de los ambientes virtuales de los usuarios y de las operaciones propias del mantenimiento de la infraestructura real, mientras que los usuarios mantienen el control absoluto y son responsables de todas operaciones de despliegue de sus aplicaciones y configuraciones.

Dentro de lo que consideramos como infraestructura encontramos plataformas de virtualización de máquinas virtuales que incluyen el hardware de un computador, típicamente configurado en grid para escalabilidad horizontal masiva; acceso a redes de alta velocidad, incluyendo routers, firewalls, balanceadores de carga y dispositivos relacionados; conexión a Internet, típicamente sobre backbones OC 192; y ambientes de almacenamiento virtual. Todos estos servicios son cobrados bajo demanda y están sometidos a unos acuerdos de niveles de prestación de servicio que garantizan un mínimo de disponibilidad y confiabilidad para todo el servicio obtenido.

PLATAFORMA COMO SERVICIO (PaaS)

Cloud computing ha encapsulado plataformas para la creación y ejecución de aplicaciones web, lo que se conoce como Plataforma como Servicio. De esta manera, los desarrolladores tienen todas las herramientas para concentrarse en el diseño de nuevas aplicaciones que pueden ser accedidas desde cualquier lugar con acceso a Internet, dejando a un lado las operaciones relacionadas con la configuración y mantenimiento de la infraestructura en la cual estará soportada la aplicación, el sistema operativo e incluso la instalación y configuración de las herramientas de desarrollo. El desarrollador o la empresa sólo están encargados de su propia aplicación.

PaaS ofrece un nuevo modelo para el desarrollo de aplicaciones mucho más económico, rápido y con mayores garantías de éxito que al antiguo modelo de desarrollo de aplicaciones específicas para cada organización. Las empresas que prestan estos servicios cuentan facilidades para el diseño de las aplicaciones a través de workflows y herramientas para el ciclo de desarrollo, pruebas, despliegue y hosting, así como oficinas virtuales, equipos de colaboración, integración de bases de datos, seguridad, escalabilidad, manejos de estados, paneles de control y muchas otras facilidades que una infraestructura propia difícilmente puede llegar a tener.

Entre las principales características de PaaS encontramos que está basado completamente en estándares web como lo son HTML y JavaScript y está diseñado con una arquitectura que soporta multitenant que garantiza la utilización de una aplicación por muchos usuarios independientes e incluyendo funcionalidades que soportan el manejo de concurrencia, escalabilidad y tolerancia a fallos. Otra de las características esenciales es su integración con servicios web y bases de datos a través de protocolos SOAP (Simple Object Access Protocol) que permite la creación de combinaciones de servicios web, reutilización de funcionalidades y acceso a servicios privados.

SOFTWARE COMO SERVICIO (SaaS)

Software como servicio es un modelo de distribución de aplicaciones que son alojadas por el vendedor y distribuidas a los clientes a través de una red como Internet y por lo general utilizando navegadores web, a diferencia del modelo tradicional donde cada usuario compraba la aplicación y se encargaba de su instalación en cada una de las máquinas en donde se iba a utilizar. Muchas de las aplicaciones del modelo SaaS están enfocadas en proveer funcionalidades a clientes empresariales a bajos precios, ofreciendo los mismos beneficios del software tradicional sin la complejidad asociada a la instalación, administración, soporte y costo inicial que este representa. De esta manera, el cliente SaaS sólo tiene la responsabilidad del uso del software contratado mediante prepago, de ahí hacia abajo es responsabilidad del vendedor.

La arquitectura de estas aplicaciones está basada también en el compartir una misma aplicación con varios clientes, repartiendo así el precio de la licencia entre todos de manera equitativa a su uso. De esta manera, una sola aplicación es usada por varios clientes, cada uno separado de los otros a través de contextos lógicos. Las aplicaciones más comunes son los ERP, CRM, SCM y otra amplia gama de paquetes para verticales de negocio. Esto ha hecho que tanto grandes corporaciones como pequeños negocios obtengan acceso a esta clase de herramientas, haciéndolas más competitivas al centrar sus esfuerzos en el dominio principal del negocio.

Características del Cloud Computing

El modelo de la computación en la nube fue caracterizado por la NIST por tener tres niveles de servicios conocidos como SPI (SaaS, IaaD y IaaS) y cuatro tipos de nubes (pública, privada, comunitaria e híbrida), como se describió en la anterior sección. Adicionalmente, la NIST le otorgó cinco características esenciales que cualquier servicio de computación en la nube debe ofrecer a sus usuarios (Sosinsky, 2011):

  1. Autoservicio bajo demanda (On-demand self-service): Cualquier usuario de la nube puede ter acceso a los recursos computacionales cuando éste los necesite y sin ningún tipo de interacción con el personal encargado de la nube, de manera automática y unilateral.
  2. Acceso completo a la red (Broad network acces): Todos los recursos que se ofrecen en la nube, así como las aplicaciones que el usuario está implementando deben tener completo acceso a través de la red usando métodos estándares, de manera que se permita un acceso independiente de la plataforma de los clientes del usuario. Esto garantiza que cualquier usuario, con cualquier sistema operativo o dispositivo (computadores, teléfonos móviles, PDAs, etc.) tengan acceso a los servicios.
  3. Agrupación y distribución de recursos (Resource pooling): El proveedor de la nube debe crear recursos que se encuentran agrupados pero que pueden ser distribuidos entre muchos usuarios, lo que se conoce como el soporte de uso multiusuario. De esta manera, los sistemas tanto físicos como virtuales deben ser distribuidos dinámicamente según las necesidades actuales de los usuarios y dando, por hecho, la abstracción de la ubicación real de los recursos consumidos por cada cliente.
  4. Elasticidad rápida (Rapid elasticity): Esta característica indica que los recursos deben ser otorgados de manera rápida y elástica, según las necesidades del cliente en el momento en que este los solicite. El adicionar recursos se puede dar de dos maneras: horizontalmente (Ampliando el número de recursos físicos, es decir, agregando más computadores) o verticalmente (Cambiando los actuales recursos por otros con mayores capacidades). Sin embargo, es importante notar que los recursos a los que puede tener acceso el cliente, desde su punto de vista, son ilimitados.
  5. Medición del servicio (Measured service): La última característica indica que el uso de cualquier recursos debe ser medido, auditado y reportado al cliente en base a un sistema de medición acordado previamente entre el proveedor y el usuario. De esta manera al usuario se le generan cargos económicos según el espacio de disco que usa, el número de transacciones, unidades de procesamiento, tiempo de uso, etc.

Videos

Aquí les dejo dos videos donde explican el concepto de Cloud Computing. El primero es mucho más gráfico y el segundo es mucho más técnico.

Algunos enlaces de interés

Bibliografía

Rittinghouse, J. W., & Ransome, J. F. (2011). Cloud Computing. Implementation, Managment and Security. CRC Press. Taylor and Francis Group.

Sosinsky, B. (2011). Cloud Computing Bible. Indianápolis, IN, Estados Unidos: Wiley Pubblishing, Inc.