Serverless Computing vs. Contenedores

La irrupción y popularización del Cloud Computing y su nuevo paradigma de consumo de recursos IT como un servicio no ha dejado de evolucionar en los últimos años, acuñando nuevos conceptos, arquitecturas y soluciones. Serverless Computing y Contenedores son dos de ellos… En este artículo, comparamos los modelos Serverless Computing y Contenedores y lo que es más importante, plantearemos las  aplicaciones que mejor se pueden beneficiar de cada uno.

Serverless

Serverless se refiere a un modelo de ejecución de Computación en la Nube en el que el proveedor ejecuta el servidor y administra de manera dinámica la asignación de recursos de la máquina. Uno de sus puntos fuertes es que puede simplificar el proceso de despliegue de código en producción.

El Serverless Computing va un paso más allá de lo que se conoce como arquitectura de microservicios. Esta arquitectura es una aproximación que consiste en concebir una aplicación como un conjunto de pequeños servicios independientes. Estos microservicios ejecutan su propio proceso y se comunican entre sí.

La arquitectura de microservicios incrementa el trabajo de gestión y mantenimiento de la infraestructura y, en ese sentido, el Serverless Computing supone un avance, puesto que lo simplifica todo.

Desde el punto de vista del desarrollador, lo único importante es definir cada funcionalidad y lógica de negocio. Para el resto de las cuestiones, se delega en el proveedor de servicios en la Nube.

Estas arquitecturas permiten centrarse enteramente en las aplicaciones y dejar de lado cuestiones de mantenimiento, gestión o configuración de servidores. Las ventajas evidentes son un aumento de la productividad de los programadores y, por supuesto, una sensible reducción de costes de desarrollo. Una de las implementaciones más conocidas de este tipo de arquitectura es FaaS (Functions as a Service).

Ventajas

La premisa fundamental es que, en una configuración serverless, toda la aplicación y su lógica se implementan como funciones y eventos. La aplicación se divide en pequeños servicios que, en su momento, son activados vía eventos.

  • Nula administración.
  • Pago por ejecución.
  • No hay costes ocultos en los tiempos no productivos, cuando no se ejecuta el código.
  • Escala automática.
  • Acelera considerablemente el time-to-market de las aplicaciones.
  • Reducción significativa de la administración y mantenimiento.

Desventajas

  • Falta de estándar.
  • Se trata de entornos «de caja negra» que, aunque puede ser visto como una ventaja en determinadas ocasiones, en otros casos es una clara desventaja.
  • Provocan cierto grado de vendor lock-in.
  • Cold starts. Este es un término utilizado para describir el fenómeno de que las aplicaciones que no se han utilizado durante un tiempo, tardan más en arrancar.
  • Las aplicaciones complejas son difíciles de diseñar.

Contenedores

Cuando hablamos de contenedores software, en realidad estamos hablando de virtualización a nivel de sistema operativo. Es decir, abstraemos el sistema operativo de la ecuación. El resultado es un paquete o contenedor que incluye todos los elementos necesarios para que una aplicación se ejecute, independientemente de lo que haya en el resto de las capas inferiores.

Así, el contenedor dispondrá de los recursos necesarios para que la aplicación que contiene pueda ejecutarse en cualquier sistema, siempre y cuando disponga de las herramientas necesarias. Se trata de una solución muy eficiente porque, en primer lugar, no se virtualiza un SO, sino que se trabaja directamente en el sistema operativo de la máquina en la que se ejecuta la aplicación.

Esta aplicación no necesitará invocar funciones o librerías del sistema operativo de la máquina para poder ejecutarse porque ya las lleva dentro. Al ser unidades autocontenidas, son soluciones más rápidas y eficientes que las máquinas virtuales. Este tema lo desarrollamos en el artículo dedicado a Docker.

Ventajas 

  • Control y flexibilidad
  • No hay vendor lock-in.
  • Son más fáciles de migrar.
  • La portabilidad es, sin duda, la mayor ventaja de los contenedores.

Desventajas 

  • Requieren de cierto trabajo administrativo.
  • El escalado es más lento que la otra solución.
  • Los costes de ejecución son mayores.
  • Necesitan de mayor intervención manual.

Entonces, ¿qué es mejor: Serverless o Contenedores? 

Esta es la pregunta del millón para la que no existe respuesta concreta. Como siempre sucede, todo depende de cada caso concreto, de las necesidades específicas y de muchas otras variables. Sin embargo, es posible definir, a grandes rasgos, qué puede ir mejor para unos casos y qué para otros.

En caso de necesitar una solución para migrar servicios legacy, o si necesitamos de gran flexibilidad, los contenedores son la opción más indicada en la gran mayoría de los casos. Por otro lado, si necesitamos una gran velocidad de desarrollo, escala automática o contamos con un presupuesto ajustado (y, por tanto, queremos reducir los costes de ejecución), la opción es Serverles Computing.