software architects

¿Qué es y para qué me sirve el "Cloud Computing"?

Dada su creciente popularidad, el término "Cloud computing" parece el nuevo paradigma al que estar atento, pero, ¿qué implicación tiene sobre los consumidores de aplicaciones? ¿Hay algo que deban saber?

Cloud computingHay tres conceptos que se asocian a Cloud Computing, en relación a distintas abstracciones de los bloques o dominios que permiten dar servicio a una aplicación:

  • Infraestructura: la parte más física: el hardware con sus características y el sistema operativo. Ejemplo: un servidor x86 de 64bits con Linux.
  • Plataforma: un entorno software en el que poder desplegar aplicaciones, habitualmente un servidor, y que se implanta sobre una Infraestructura concreta. Ejemplo: un servidor Apache/PHP y una base de datos MySQL.
  • Software: el aplicativo del que harán uso los usuarios, y que se despliega sobre una Plataforma. Ejemplo: un gestor de contenidos CMS escrito en PHP para gestionar un blog.

Imaginemos que quisiéramos proporcionar una solución basada en web a una serie de usuarios en la oficina de una empresa. Una posible decisión podría ser la de encargarnos de absolutamente todo: comprar el hardware, instalar el sistema operativo, instalar un servidor de aplicaciones y finalmente añadir nuestra aplicación al servidor, que podemos haber desarrollado nosotros mismos o bien una empresa externa.

En el modelo clásico (in-house), esto comportaría una serie de gastos: la compra del hardware, la licencia (si aplica) del sistema operativo, licencias asociadas a los servidores de aplicaciones y bases de datos, y finalmente costes asociados al aplicativo: desarrollo, licencias, mantenimiento, etc.

"Cloud Computing" propugna la provisión de todos estos requisitos como servicios, y utiliza los siguientes términos para cada uno de los dominios previamente enumerados: IaaS (Infrastructure as a Service), PaaS (Platform as a Service) y SaaS (Software as a Service).

Las principales ventajas que se ofrecen son:

  • aislar la complejidad de cada uno de los dominios a los actores implicados en cada fase del proyecto;
  • flexibilizar y agilizar la gestión de recursos;
  • proporcionar un modelo de costes más racional.

Veamos cómo se aplicaría este concepto en función del dominio sobre el que se actúa.

Infraestructura como un Servicio (IaaS)

La infraestructura como Servicio se ofrece habitualmente en entornos virtualizados. Esto permite seleccionar dinámicamente los recursos que se requieren para el proyecto, y racionalizar el coste.

Adicionalmente, el uso de estos entornos suele llevar asociado consigo niveles de fialibilidad superiores, si el entorno virtualizado está basado en arquitecturas de alta disponibilidad, (CPU y Datos) y que se proporcionan de forma transparente para los actores.

El modelo clásico más próximo sería el de alquiler de servidores dedicados. Las desventajas de este modelo son obvias: se paga por un servidor completo, independientemente del uso que se haga, y no es posible escalar de forma ágil si se superan los recursos contratados.

Actualmente ya existe una oferta de este tipo de servicio entre los proveedores de hosting clásico. Otro ejemplo sería Amazon EC2.

Plataforma como un Servicio (PaaS)

En este dominio, se proporciona una plataforma de desarrollo basada en un entorno conocido (Java EE, .NET, PHP...), junto a una base de datos. También se proporciona habitualmente un API que permite acceder a la gestión del servicio.

Podríamos decir que el clásico servicio de hosting PHP de los proveedores es una aproximación a PaaS. Para poder denominarla así propiamente, habría que añadir algunos conceptos adicionales:

  • acceso a configuración dinámica de los recursos disponibles: en el hosting clásico, sabemos que estamos compartiendo la máquina con otros clientes pero no tenemos una reserva de CPU, por lo que dependemos de cómo de cargado esté el servidor.
  • pago por uso: las cuotas de hosting son fijas. La nueva visión permitiría asociar costes a los recursos: CPU's reservadas u horas de CPU, tráfico, etc.

Ejemplos de este servicio: Windows Azure Platform, Google App Engine.

Software como un Servicio (SaaS)

El cliente de este tipo de servicio es habitualmente el que hace uso del mismo, es decir, el usuario final.

Este dominio ya está implantado en muchos servicios de la red, aplicando el concepto de "multi-tenancy", o sea: una instancia de la solución que sirve a múltiples usuarios.

Dentro de "Cloud Computing" se podrían añadir algunos nuevos conceptos, que tendrían que ver con el hecho de implantar la solución sobre PaaS o IaaS, y que hicieran su gestión ágil y escalable.

Los ejemplos de este tipo de servicios serían múltiples. Los más conocidos podrían ser los de correo, como GMail.

Conclusiones

"Cloud computing" es un paradigma que trae consigo nuevas ideas para la implementación de soluciones. Se podría caer en la tentación de pensar que tener aplicaciones basadas en web es el aspecto distintivo, pero como hemos visto la interfaz web tan solo sería la parte visible de una posible solución. Por ejemplo, el modelo propuesto podría perfectamente tener una solución nativa en la parte del cliente.

Tampoco se propugna convertir todas las aplicaciones al entorno web. Un primer paso podría ser considerar si el desarrollo web que ya se hace fuera de este paradigma pueden ser objeto de reconsideración en su arquitectura y modelo de costes.

Estas nuevas ideas pueden simplificar las tareas de los departamentos de desarrollo e IT, y ofrecer a sus clientes (internos o externos) modelos de costes más racionales en ciertas condiciones. Un caso interesante es el de los entornos de desarrollo de departamentos de IT, que podrían agilizarse y abaratarse mediante infraestructuras virtuales.

En ningún modo es una bala de plata, pero es conveniente tenerlo en mente como una herramienta más de diseño, porque ya está aquí para quedarse.