Serverless: ha llegado el momento de reemplazar servidores por código

“Perhaps we no longer have to think about servers”. Estas fueron las palabras de Werner Vogels, CTO de AWS, el 7 de julio de 2016 para resumir el valor de la computación Serverless en su intervención en el Summit de Londres.

La destacaba como la siguiente gran revolución tras los contenedores y comentaba que algunas compañías ya estaban empezando a quitar las grandes piezas de sus aplicaciones y estaban reemplazando sus servidores, sus máquinas virtuales y sus contenedores sólo con código.

Y es que si algo caracteriza a los servicios cloud es la capacidad que nos ofrecen para desarrollar nuestras aplicaciones sin preocuparnos del hardware subyacente. Dentro de los servicios de computación, el nivel básico de abstracción lo obtenemos con un IaaS, en un PaaS conseguimos una abstracción mayor y el nivel máximo lo podemos alcanzar con los servicios Serverless.

En estos, podemos alojar nuestro código o nuestra aplicación que se ejecutará al ocurrir determinados eventos. No tendremos que encargarnos de gestionar ningún servidor. El servicio escalará automáticamente (casi hasta el infinito) para adaptarse a la demanda.

Y sólo pagaremos en función de los recursos consumidos. Además, los principales proveedores cloud incluyen una capa gratuita mediante la que se pueden usar mensualmente una gran cantidad de recursos sin ningún cargo.

Cuando hablamos de Serverless conviene aclarar que este término se utiliza para hacer referencia a varias cosas: una metodología, un framework y una organización.

La arquitectura Serverless es una metodología completamente agnóstica a proveedores. El framework Serverless es una herramienta multiproveedor por línea de comandos que automatiza y nos evita realizar a mano multitud de tareas.

Este stack proporciona un conjunto de utilidades para trabajar sobre los servicios serverless de varios proveedores. Y la empresa que desarrolla y mantiene este framework es Serverless Inc. En este momento  el framework Serverless soporta los siguientes proveedores:

Comúnmente se asocia Serverless a FaaS (Function as a service) una tecnología que nació en 2014 en hook.io y que continuaron, entre otros, AWS Lambda, Google Cloud Functions, Microsoft Azure Functions o IBM/Apache OpenWhisk.

AWS Lambda no fue el primer servicio Serverless que estuvo operativo en el mercado, pero sí el que se ha hecho más popular. Soporta Java, Node.js, C#, Python y Go. Se integra con el resto de servicios del ecosistema Amazon: API Gateway, S3, RDS, Kinesis, DynamoDB, SNS, etc. Se puede monitorizar con CloudWatch y es utilizada en grandes proyectos por empresas como Netflix.

Google Cloud Functions lleva un tiempo en la plataforma de Google y, aunque por el momento sólo admite código Javascript para ejecutar en un entorno Node.js, se integra con el resto de servicios: Storage, Spanner, Pub/Sub, Firebase, etc.  La monitorización se puede realizar a través de Stackdriver.

Azure Functions es la propuesta de Microsoft Azure. Llevan aproximadamente 2 años en el mercado. Permite el uso de C#, F#, Java, Python, PHP, Batch, Bash o Powershell. Se integra con muchos de los servicios de Azure, incluído Cortana.

Pero, además de estos servicios, que son los más conocidos, existen multitud de proyectos opensource como Kubeless, Fission, OpenFaaS o Riff, que nos permiten minimizar el vendor lock-in mientras seguimos utilizando servicios Serverless.  

Estos frameworks están diseñados para desplegarse sobre clusters de Kubernetes, sobre Swarm o sobre Docker. Y ofrecen un entorno Serverless open source donde ejecutar nuestras porciones de código bien sea en una nube pública bien en una privada. Soportan multitud de lenguajes: Java, Python, Node.js, Ruby, PHP y otros.

Además, ofrecen integración con los principales proveedores Cloud y con el framework Serverless citado anteriormente. Soportan diferentes sistemas de mensajería como Kafka y se adaptan a diferentes herramientas de monitorización como Prometheus.

Los casos de uso que puede tener esta tecnología son tantos como se nos ocurran, pero podemos citar,  entre otros, los siguientes:

  • Backends para móviles: las funciones permiten extender el backend de las aplicaciones móviles para atender y emitir los eventos necesarios.
  • Backends de aplicaciones web: de igual modo que en el caso anterior, se puede complementar mediante funciones el procesamiento necesario en el backend de una aplicación web. Por ejemplo, para procesar pedidos obtenidos de una cola e ir almacenando información en una base de datos.
  • Webhooks: para gestionar eventos, en forma de solicitudes HTTP(S) que se generen desde orígenes de terceros como, por ejemplo, GitHub o Slack, y así construir flujos de trabajo.
  • APIs y microservicios: se pueden crear aplicaciones a partir de funciones con un bajo acoplamiento y que se compilan, despliegan y escalan de forma rápida y automática en función de la demanda.
  • Procesamiento de datos /ETL: recopilando datos y procesándolos en tiempo casi real. Se puede aplicar a procesamiento de archivos, datos procedentes de sitios webs o imagen y vídeo.
  • Ejecutar tareas programadas: ejecutar acciones de forma periódica o en un momento concreto.
  • IoT: un ecosistema formado por miles de dispositivos es el ejemplo perfecto de la capacidad para procesar, transformar y almacenar datos que pueden tener los servicios Serverless.

Y a todo esto hay que añadirle otros servicios que conceptualmente también se pueden considerar servicios de computación sin servidores:

Con todo esto podemos construir arquitecturas completas para nuestras aplicaciones basadas en tecnologías Serverless.

Hasta hace bien poco para montar microservicios, buses de eventos o motores de procesamiento streaming se necesitaban grandes clusters con un montón de servidores que tenían que ser mantenidos y que tenían que estar siempre corriendo. Pero ahora ya nada de eso es necesario.

Utilizando una mentalidad Serverless estas arquitecturas eliminan la necesidad de tener los servidores siempre activos. Esto hace que en estos nuevos sistemas se aligere significativamente el coste operacional y la complejidad, a la vez que se reduce el coste de los desarrollos y se consigue que el escalado mediante funciones sea más económico.

Gracias a todas estas ventajas y al gran número de productos que hay en el mercado, el uso de la computación Serverless está aumentando a gran velocidad. Se ha convertido en una herramienta muy poderosa para innovar rápidamente.

Con Serverless estamos construyendo un gran número de productos software y poniéndolos a disposición de los usuarios sin tener que preocuparnos de las máquinas. Tal vez ya no tengamos que pensar más en los servidores, como Vogels y otros pronosticaban hace un par de años.