Hay 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 ademas de 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 arquitectura 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, tales como :
- 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.