¿Qué modelo Cloud es el mejor para los desarrolladores?

By 11/12/2017

Ana López Mancisidor

Ana López Mancisidor
Cloud & Cognitive Technical
Leader SPGI

José Miguel Ordax - Cloud

José Miguel Ordax
IBM Certified IT Specialist
IBM Cloud CTP

La cloud ha cambiado la manera en que las empresas acceden rápidamente a una infraestructura de pago por uso (IaaS), así como la forma en que los desarrolladores tienen de crear, desplegar y ejecutar de manera más ágil aplicaciones en la nube (PaaS).

En los últimos años ha habido una importante evolución en los diferentes modelos de computación ofrecidos por diferentes proveedores Cloud para los desarrolladores:

Modelos Cloud - IaaS, PaaS, FaaS y CaaS

  • Servidores dedicados: es el modelo on-premise tradicional en el que adquirimos hardware y aprovisionamos, gestionamos y configuramos desde la infraestructura, sistema operativo y middleware donde se ejecutarán aplicaciones y datos.
  • IaaS (Infraestructura como Servicio): la infraestructura off-premise es gestionada por el proveedor del servicio, que ofrecerá servidores virtuales, o servidores baremetal dedicados para el cliente.
  • CaaS (Contenedores como Servicio): Plataforma basada en contenedores que permiten ejecutar y orquestar contenedores en la nube. Los contenedores facilitan la virtualización de diferentes runtimes y middleware de una manera más eficiente y portable sin tener que considerar la capa del sistema operativo.
  • PaaS (Plataforma como Servicio): Plataforma basada en estándares PaaS abiertos como CloudFoundry, que permiten una mayor abstracción y agilidad al desarrollador, que sólo se tiene que preocupar de desarrollar el código, y la plataforma automáticamente gestiona desde la infraestructura hasta el middleware y su configuración y monitorización.
  • FaaS (Función como Servicio): Plataforma “sin servidor” que habilita la programación orientada a eventos y en la que sólo se pagará por el tiempo en que se ejecute el código. Sin servidor no significa que no se requieran servidores; lo que implica es que el proveedor de cloud gestiona dinámicamente el aprovisionamiento de los recursos según se necesiten, con lo que la gestión y planificación de capacidad del servidor son totalmente transparentes para el desarrollador.
  • SaaS (Software como Servicio): modelo de distribución de software en el que el proveedor gestiona la infraestructura, aplicación y datos en una cloud off-premise, en un modelo de pago por uso. El proveedor se encarga de proporcionar la operación diaria y mantenimiento del software usado por el cliente. Frente a la agilidad que ofrecen este tipo de soluciones, en su contra está la dificultad de realizar personalizaciones a medida de cada cliente y la integración con sistemas on-premise que requerirán una conexión segura en caso de ser necesarias.

Además de los diferentes modelos de computación, pueden existir modelos híbridos de despliegue, según el servicio se ofrezca off-premise (en modalidad pública –multitenant- o dedicada –single tenant-) o de manera local on-premise en los datacenters del cliente.

¿Cuál es el mejor modelo? La respuesta no es única. Según las características de la aplicación que vayamos a desarrollar, los skills de los desarrolladores, uso que se va a hacer, requisitos de seguridad…  deberemos optar por un modelo u otro, o la mayoría de las veces nos interesará seguir un modelo mixto. Todos pueden ser válidos y proporcionan importantes ventajas a los desarrolladores.

Para un desarrollador que se enfrenta por ejemplo al desarrollo de una nueva aplicación ¿cuáles serían las ventajas e inconvenientes de utilizar un modelo u otro?

  • Modelo Plataforma como Servicio, PaaS: su principal ventaja es la facilidad de uso por parte del desarrollador, al que se le abstrae de la instalación y configuración del middleware, y sólo se tienen que preocupar de desarrollar el código. Sólo tendrán que hacer un push de su aplicación y la plataforma PaaS se encargará automáticamente de aprovisionar los runtimes necesarios y hacer el binding y configuración con otros servicios asociados. Una plataforma PaaS además gestionará de manera transparente para el desarrollador la escalabilidad y auto-recovery de la aplicación.

En la plataforma PaaS tendremos un catálogo de runtimes y servicios a utilizar. Este catálogo estándar se podrá extender y podremos crear un nuevo “Build pack” que implemente una nueva versión de un servicio.

  • Modelo Contenedores como Servicio, CaaS: la utilización de un modelo basado en contenedores nos proporciona un modelo más flexible y mayores opciones de configuración a medida en caso de que lo necesitemos, o de construir nuevas imágenes para nuevas tecnologías que vayamos necesitando. Tendremos la flexibilidad que nos ofrece por ejemplo una máquina virtual, pero con la ventaja que son mucho más ligeras. Los contenedores además nos ofrecen portabilidad, ya que el mismo contenedor, si está construido siguiendo estándares como Docker, se podrá ejecutar en entornos on-premise, off-premise sin necesidad de modificarlos.

Por contra, un desarrollo basado en contenedores implicará un trabajo adicional al desarrollador, ya que este deberá encargarse de la construcción de la imagen a partir de la cual se ejecutarán contenedores. Para simplificar la gestión y orquestación de contenedores, autodescubrimiento de servicios, etc… el proveedor cloud deberá proporcionar una plataforma de gestión y autoescalado basada en estándares como por ejemplo Kubernetes, Swarm o Amalgam.

  • Modelo Sin Servidor (serverless) FaaS: nos aportará ventajas en aplicaciones con un tiempo de ejecución corto y basadas en eventos, como por ejemplo aplicaciones de IoT, notificaciones push móviles…, para así beneficiarnos de un modelo de pago por uso en que el que sólo pagaremos cuando se produzca un evento que llame a la ejecución de la(s) función(es) programada(s). Este modelo escala para ajustarse a su demanda exacta, desde una vez al día hasta miles de solicitudes en paralelo por segundo (no necesitamos preocuparnos de clusters, alta disponibilidad, balanceo de cargas…). Para rentabilizar un modelo de este tipo se busca que la acción que se ejecute sea pequeña, por lo que normalmente están muy estrechamente ligados con micro-servicios

Por contra, este modelo de computación no es válido cuando nuestra aplicación requiere guardar estado en memoria cuando se vuelva a invocar la acción, ya que no se tiene control de cuándo el proveedor crea o destruye cada ejecución. Dependiendo del proveedor soportará unos lenguajes de programación, pero normalmente suele estar limitado a un subconjunto (Javascript, Phyton, Swift….)  dependiendo del proveedor.

Es muy importante utilizar un estándar abierto para evitar vendor lock-in. Apache OpenWhisk (http://openwhisk.org/) es un software libre serveless que permite centrarse en la escritura de código y en la creación de grandes soluciones, sin la molestia de configurar o mantener servidores.

La siguiente tabla resume los pros y contras de cada modelo de computación desde la perspectiva de un desarrollador:


¿Cuál sería la mejor opción si nos dieran a elegir? Lo mejor sería contar con la posibilidad de poder elegir indistintamente cada uno de los modelos y utilizar en cada caso el que más nos interese para cada aplicación, o incluso poder integrarlos, i.e, desde una aplicación desplegada en un PaaS podríamos invocar microservicios desplegados como contenedores, o viceversa, o una aplicación sin servidor que pudiera invocar acciones implementadas como contenedores.

Muchas veces además tendremos que ir a un modelo híbrido, en el que por motivos de cumplimiento de estándares de seguridad y confidencialidad de información habrá aplicaciones o servicios a los que accedemos que deberán residir on-premise, pero que podrán invocar a servicios cloud off-premise (cognitivos, IoT….). Existirán también casos de uso, como por ejemplo entornos de desarrollo y pruebas o prototipado de aplicaciones, en los que la nube o entornos PaaS darán más agilidad al desarrollador, sin necesidad de tener que residir en los servidores on-premise.

IBM Cloud es la plataforma abierta en la nube de IBM que permite a los desarrolladores utilizar todos los modelos de computación basados en estándares que hemos comentado anteriormente, y que además proporciona la flexibilidad de tres modelos de despliegue: público, dedicado (en la nube de IBM) o local on-premise.

Si quieres empezar a probar las ventajas de IBM Cloud y todos los modelos de computación que ofrece, te puedes crear una cuenta IBM Cloud Lite en http://console.bluemix.net  y tendrás acceso a probar todo lo que hemos hablado en este artículo de forma gratuita.

Como ejemplo de portabilidad te aconsejo realizar el siguiente tutorial, en el que podrás probar la experiencia de despliegue de cada uno de los modelos de despliegue en IBM Cloud: PaaS con CloudFoundry, CaaS con Kubernetes y FaaS con OpenWhisk: https://github.com/IBM/Microservices-deployment-with-PaaS-Containers-and-Serverless-Platforms/tree/master

Modelos Cloud - IaaS, PaaS, FaaS y CaaS

¿Quieres saber más? ¡Echa un vistazo a la web para desarrolladores!

Crea tu cuenta IBM Cloud Lite sin tarjeta de crédito y por tiempo ilimitado

[autopilot_shortcode]