Qué es eso de serverless?


Serverless es un concepto tan abstracto como la nube y con un nombre igual de perverso, pero en la práctica es bastante útil. Este post consiste en una introducción muy simplificada al tema: qué es, para qué se puede usar, ventajas y desventajas.

Serverless significa, literalmente, -sin servidor-, y es allí donde mi problema con el nombre empieza, “servidor” puede hacer referencia a:

  • El backend de una aplicación, de acuerdo con los conceptos de la arquitectura cliente-servidor.
  • El computador, la máquina física, donde corren las aplicaciones, donde están instaladas las bases de datos, etc.

Entonces a qué definición se refiere? Pues bueno, a la segunda.

Serverless es un tipo de arquitectura donde los servidores (físicos o en la nube) dejan de existir para el desarrollador y en cambio el código corre en “ambientes de ejecución” que administran proveedores como Amazon, Google, IBM, etc.

Imagine el ambiente de ejecución como un REPL con esteroides. El proveedor define que lenguajes y versiones soporta y usted se encarga de escribir el código en dichos lenguajes. Su código deberá tener un único punto de entrada que ejecuta una única acción, es decir una sola función pública.

Cuando su función es invocada, ya sea por un request HTTP u otro evento, el ambiente de ejecución es iniciado, el código se ejecuta e inmediatamente el ambiente desaparece. Si la función es invocada mil veces, el proveedor se encarga de escalar y generar el número de ambientes necesarios para responder a las mil invocaciones.

Los proveedores cobran por el tiempo de ejecución del código. Mientras más rápido termine su función, menor es el costo que paga. Por lo tanto, se busca que la función sea pequeña y con un único propósito. Por este motivo serverless es relacionada frecuentemente con micro-servicios.

Un término más claro que he visto a otros usar en vez de serverless es FaaS (function as a service). Sí, otro “as a Service”. #YaaaS - Yet another as a Service. =)

Cuándo usar arquitectura serverless?

Las funciones serverless son sencillas de usar cuando no se require guardar estado en memoria. Debido a que no se tiene control acerca de cuando los ambientes de ejecución son creados o destruidos, no se puede asumir que al guardar un dato en la memoria de la función, este se mantenga allí cuando la función sea nuevamente invocada.

Los siguientes son algunos ejemplos de cuando se está usando tecnologías serverless (por supuesto hay muchos más):

  • API Gateway

Imagine una aplicación móvil que lista las noticias de todos los portales de información colombianos. La aplicación móvil puede usar una API Gateway serverless que consulta las noticias de todos los portales y las agrupa en una misma lista y en un único formato que su teléfono consume.

  • Creación de thumbnails para imágenes

Puede implementar un servicio que cuando sube una foto a un lugar en la nube, una función serverless se ejecuta automáticamente y crea varias versiones de la misma foto en diferentes tamaños.

  • Una tarea programada

O puede tener una tarea programada que cada 30 minutos se ejecuta, lee y procesa un archivo csv y guarda el resultado en una base de datos relacional.

Ventajas y Desventajas

Como toda tecnología tiene aspectos positivas y negativos, aunque es difícil sacar conclusiones extensas cuando poco se ha hablado de los detalles técnicos, algunas ventajas y desventajas son evidentes:

Ventajas

  • Ya no se tiene que preocupar por mantener los servidores donde corre su código. Adiós a instalar software, abrir o cerrar puertos, correr actualizaciones, ssh, etc.
  • Es horizontalmente escalable, no tiene que preocuparse por clusters, balanceo de cargas, etc.
  • Se paga solamente por el tiempo en ejecución, contrario a pagar un computador incluso por el tiempo en que está hibernando.
  • Las funciones se puede integrar fácilmente con otros servicios del mismo proveedor, lo que facilita crear endpoints HTTPS, logging, monitoreo, lo necesario para tener un servicio listo para producción.

Desventajas

  • Si no se desarrolla con cuidado, su código puede terminar bastante acoplado al proveedor.
  • Al ser un servicio tan reciente, los lenguajes que se pueden usar para implementar las funciones están limitados por lo que esté soportado por el proveedor.
  • Desplegar y monitorear el comportamiento de multiples funciones es mucho más complicado que monitorear un monolito.
  • Se requiere esfuerzo extra para poder desarrollar localmente sin necesidad de desplegar el código a los ambientes de ejecución cada que se realice un cambio, ya que puede ser demorado y tedioso.
  • Las herramientas alrededor de la automatización del despliegue de funciones serverless son aún muy inmaduras.

En otro post hablaré acerca de aspectos técnicos y más detallados que aprendí al desarrollar, probar, desplegar y mantener un proyecto serverless.

Proveedores

El más popular, sin duda, es Amazon quien fue el primero (2014) en ofrecer su servicio AWS Lambdas. Sin embargo, otros proveedores ya están ofreciendo soluciones muy similares. Lo más conocidos son:

Conclusión

Serverless o FaaS es una nueva herramienta que permite desplegar funcionalidad lista para producción sin invertir esfuerzo en infraestructura y pagar tan solo cuando sea ejecutada. Es diferente de IaaS (infraestructura as a service) donde usted paga por servidores vacíos y se encarga de configurarlos, administrarlos y mantenerlos, y también es diferente de PaaS (platform as a service) donde usted, no administra los servidores pero, asume el costo de tener su código corriendo así no esté siendo usado.

Serverless es aún una tecnología nueva e incluso experimental (Google Cloud Functions está en estado beta), sin embargo creo que tiene mucho potencial, sobretodo para desplegar funcionalidad pequeña o aislada o para aquellas personas que no tienen conocimiento en infraestructura pero quieren tener aplicaciones en producción.

Si le gustó el artículo y cree que puede ser interesante para alguien más, por favor compártalo. =)

Pam Rucinque

Read more posts by this author.

Melbourne, Australia