Serverless y FaaS como alternativa real a la infraestructura tradicional

serverless.png

El término Serverless se podría traducir al castellano como “sin servidores”. La realidad es que simplemente es un término de marketing que busca enfatizar la principal ventaja de esta tecnología: “olvidarse de la gestión de servidores” para el despliegue de aplicaciones y servicios.

¿Qué es Serverless? 

Serverless es un concepto que define el foco en el desarrollo de funciones de negocio puras y la ausencia de tareas operativas para la gestión de infraestructura como pueden ser: el aprovisonamiento, la administración y el escalado, debido a que estas tareas son gestionadas por el proveedor de la plataforma. 

En el mundo del Serverless existen 2 opciones: 

  • Backend como servicio (BaaS): Consiste en una solución “todo incluido” que permite autogestionar el backend. Una solución BaaS típica incluye bases de datos, gestión de usuarios, generación de APIs, etc.
  • Función como servicio (FaaS): A diferencia del BaaS, una solución FaaS se encarga del despliegue y escalado automático de funciones de código como unidades aisladas de ejecución que realizan una tarea específica, de una forma muy similar al funcionamiento de los microservicios. 

En este post hablaré de Serverless visto desde la perspectiva de FaaS. La principal característica es que las funciones se almacenan en el servidor pero no son ejecutadas hasta su invocación, es decir, funcionan bajo demanda y el proveedor del servicio factura solo en función del tiempo de ejecución. Esto permite optimizar los costos de operación de la infraestructura de una forma muy atractiva.

¿Dé donde surge esta tecnología?

Serverless es posible gracias a la llegada del cloud, la virtualización de la infraestructura y la creación de la tecnología de contenedores. Gracias a esta última, ha sido posible demostrar que rutinas de código con dependencias aisladas pueden ser ejecutadas en tiempo real y bajo demanda, sin necesidad de mantenerlas en ejecución de forma continuada.

Esto ha permitido encontrar una alternativa para optimizar el uso de la infraestructura a fin de usar de forma más eficiente los recursos y, al mismo tiempo, reducir los costes de mantenimiento.

Ventajas 

Serverless proporciona una serie de ventajas interesantes: 

  • Ahorro de tiempo: Reduce la cantidad de tiempo necesario para operar la infraestructura. Por otra parte, el desarrollador solo debe enfocarse en desplegar su código (puede ser de forma automática) sin necesidad de esperar a tener la infraestructura preparada, ya que está es provisionada bajo demanda.
  • Reducción de costes: El uso es por utilización y tiempo de ejecución de las funciones. Solo se paga por el consumo real de la infraestructura, no por tener encedidos los servidores todo el tiempo.
  • Escalado óptimo: Es posible incrementar la capacidad de escalado horizontal de forma dinámica y automática por la plataforma en función de la demanda.
  • Elimina la administración de servidores: La infraestructura es gestionada y escalada automáticamente por la plataforma (es el proveedor quien se encarga) con lo cual, los costes asociados a la administración de la infraestructura prácticamente se eliminan.

Inconvenientes

Por supuesto el modelo Serverless (FaaS) tiene también ciertas desventajas: 

  • Dependencia del proveedor: Al ser un servicio gestionado, las ventajas de la tecnología están atadas a los elementos de la plataforma del proveedor. 
  • Multitenencia: Para alcanzar los beneficios de economías de escala que proporciona el modelo Serverless, es necesario que el código se ejecute en infraestructura compartida. Esto puede implicar que aquellas empresas con requerimientos estrictos de seguridad tengan opciones limitadas para utilizar el modelo FaaS de un proveedor de cloud público.
  • Madurez de la tecnología: Es una tecnología relativamente nueva que esta en evolución y que puede sufrir cambios.

Casos de Uso

De la misma forma que sucede con otras arquitecturas y tecnologías, Serverless no es la solución a todos los problemas. Estos son algunos casos de usos en donde Serverless y FaaS pueden ser una buena alternativa:

  • Aplicaciones web o backend móvil que requieran un procesamiento no intensivo. La idea detrás de FaaS es tener funciones específicas con un tiempo de ejecución pequeña que se lancen de forma puntual al momento de ser necesario. 
  • Bots y Skills, podemos usar Serverless o FaaS para desarrollar aplicaciones conversacionales como Bots o para interactuar con APIs de terceros que nos proporcionen habilidades (skills) cognitivas basadas en Inteligencia Artificial.
  • Microservicios, es una alternativa y/o complemento a los microservicios ya que nos permite que cada función en FaaS se despliegue como un microservicio sin necesidad de gestionar contenedores. 
  • APIs, podemos diseñar nuevas APIs usando FaaS de forma rápida y dinámica o crear un envoltorio (wrapper) de APIs existentes que pueden ser consumidas via Serverless.
  • Aplicaciones reactivas, podemos usar Serverless para programar funciones que reaccionen a eventos o acciones específicas. Por ejemplo: enviar un email cuando el usuario se registra, actualizar un registro en base de datos, procesar un fichero después de ser almacenado, etc.

Por supuesto, éstos solo son unos cuantos casos de uso en donde Serverless puede o está siendo utilizado de forma útil, sin embargo, cualquier aplicación o servicio que requiera de una ejecución corta y basada en eventos puede ser susceptible de ser realizada usando FaaS.

Proveedores

Actualmente, la mayoría de las grandes empresas proveedoras de soluciones cloud ofrecen una solución serverless (FaaS): 

Conclusión

Serverless puede ser una solución interesante para la reducción y optimización de costos de infraestructura. El concepto de "pago por lo que consumo" (pay as you go) se refuerza con la aparición de soluciones basadas en FaaS.

De cara a una implementación, lo ideal es comenzar con un pequeño proyecto para validar que la tecnología se adapta a nuestras necesidades. Incluso es posible abordar parte de un proyecto existente y desarrollar una nueva funcionalidad adicional con esta tecnología a través de una arquitectura híbrida.

Gracias a la tecnología Serverless el costo total de propiedad (TCO) de una aplicación puede ser muy atractivo, pero no todas las aplicaciones son candidatas a ser migradas a Serverless, al menos de forma directa, antes se requiere el realizar una evaluación pertinente para adaptar la arquitectura de la aplicación a los requerimientos que impone la tecnología Serverless. 

Otro elemento importante a considerar, es el tema de la dependencia del proveedor de FaaS (lock-in) en caso de requerir migrar a otro proveedor, caso poco frecuente pero posible. Sin embargo, es posible minimizar esta dependencia si se planifica desde el inicio para asegurar que el código pueda ser migrado a otro proveedor o incluso de forma interna con un menor esfuerzo.