¿Qué es Serverless?
Para poder tener un concepto bien definido sobre Serverless primero debemos tener un contexto adecuado y describir los pasos a lo largo de su camino evolutivo. Así que a continuación se describirán todas las etapas que se han tenido que pasar hasta llegar a lo que hoy se conoce como Serverless.
El nacimiento de la nube
En el año 2006 nadie tenía un iPhone todavía, Ruby en Rails era un framework de moda, y muchas personas alojaban sus server-side applications en servidores físicos de su propiedad. Pero en Agosto de 2006 sucedió algo que cambiaría para siempre la manera de alojar aplicaciones. La nueva división de IT de Amazon, Amazon Web Services (AWS), anunció el lanzamiento de Elastic Compute Cloud (EC2).
EC2 fue uno de los primeros productos de Infrastructure as a Service (IaaS). IaaS permite a las empresas y personas alquilar capacidad informática, es decir, un host para ejecutar sus aplicaciones, en lugar de comprar sus propias máquinas.
Outsourcing de Infraestructura
El uso de IaaS es una técnica que podemos definir como outsourcing (externalización) de infraestructura. Cuando desarrollamos software, podemos separar los requisitos de nuestro trabajo de dos maneras: los que son específicos a nuestras necesidades y los que son iguales para otros equipos y organizaciones que trabajan de manera similar.
Este segundo grupo de requisitos lo podemos definir como infraestructura, y abarca desde productos físicos, como la energía eléctrica para hacer funcionar nuestras máquinas, hasta funciones comunes en aplicaciones, como la autenticación de usuarios.
Entonces el outsourcing de infraestructura normalmente puede ser proporcionada por un proveedor, de manera rentable a través de dos tipos de estrategias: económica y técnica.
Economía de escala
Casi todas las formas de outsourcing de infraestructura están habilitadas, al menos en parte, por la idea de economía de escala: hacer lo mismo muchas veces en conjunto es más barato que la suma de hacer esas cosas de forma independiente debido a las eficiencias que se pueden explotar. Y por ende los servicios de infraestructura de terceros es mucho más barato y costeable que tener nuestros propios servidores.
Por ejemplo, AWS puede comprar un servidor con las mismas especificaciones por un precio más bajo que una empresa pequeña porque AWS compra servidores por miles en lugar de hacerlo individualmente. De manera similar, el costo de soporte de hardware por servidor es mucho más bajo para AWS que para una empresa que posee pocos servidores.
Mejoras tecnológicas
El outsourcing de infraestructuras también se debe en parte a una innovación técnica. En el caso de EC2, ese cambio fue la virtualización de hardware. Antes de que apareciera IaaS, algunos proveedores de IT habían comenzado a permitir que las empresas pudieran alquilar servidores físicos como hosts, generalmente por mes o por horas. Sin embargo, esto solo fue rentable una vez que los servidores físicos pudieran subdividirse en muchas máquinas virtuales (VM) pequeñas que se activan y desactivan rápidamente. Una vez que eso fue posible, nació IaaS.
Beneficios comunes del outsourcing de infraestructura generalmente se hace eco de los cinco beneficios de IaaS:
- Costo laboral reducido: menos personas y menos tiempo requerido para realizar trabajos de infraestructura.
- Riesgo reducido: se requieren menos expertos y más capacidad de soporte operativo en tiempo real.
- Menor costo de recursos: menor costo por la misma capacidad.
- Mayor flexibilidad de escalamiento: se puede acceder a más recursos y luego eliminarlos, sin cargos adicionales.
- Menor tiempo de entrega: menor tiempo de lanzamiento al mercado desde el concepto de una idea hasta la puesta en producción.
El crecimiento de la nube
IaaS fue uno de los primeros elementos clave de la nube, junto con el almacenamiento, por ejemplo, AWS Simple Storage Service (S3). AWS fue uno de los primeros en moverse y sigue siendo un proveedor líder en la nube, pero hay muchos otros proveedores, desde los grandes, como Microsoft y Google, hasta los que no muy grandes, como DigitalOcean.
Cuando hablamos de la nube, normalmente nos referimos a la nube pública, es decir, una colección de servicios de infraestructura proporcionados por un proveedor. Sin embargo, también hemos visto un crecimiento relacionado de los productos en la nube que las empresas pueden usar en sus propios data centers mediante herramientas como OpenStack.
La siguiente evolución de la nube pública fue Platform as a Service (PaaS). Uno de los proveedores de PaaS más populares es Heroku. Con PaaS solo se realizan deploys de aplicaciones, y la plataforma es responsable de la instalación del sistema operativo, las actualizaciones de parches, el monitoreo a nivel del sistema etc.
Una alternativa al uso de PaaS es usar contenedores. Docker se ha vuelto increíblemente popular en los últimos años como una forma de definir más claramente los requisitos del sistema para una aplicación a partir de bloques dentro del sistema operativo en sí. Existen servicios basados en la nube para alojar y administrar contenedores, a menudo denominados Containers as a Service (CaaS). Un ejemplo es Container Engine de Google y algunos CaaS self-hosted son Kubernetes y Mesos, que se pueden ejecutar de forma privada o como PaaS.
Tanto PaaS como CaaS son formas adicionales de outsourcing de infraestructura, al igual que IaaS. Se diferencian principalmente de IaaS al elevar aún más el nivel de abstracción, lo que permite entregar más facilidades y tecnología a terceros. Como tal, los beneficios de PaaS y CaaS son los mismos que los cinco que enumeramos anteriormente.
Un poco más específicamente, podemos agrupar los tres (IaaS, PaaS, CaaS) como Compute as a Service, en otras palabras, diferentes tipos de entornos genéricos en los que podemos ejecutar nuestro propio software.
Definición de Serverless
Serverless se define como una forma de describir los servicios, prácticas y estrategias que permiten crear aplicaciones más ágiles para que se pueda innovar y responder a los cambios más rápidamente. Es simplemente la siguiente evolución de la computación en la nube, y otra forma de outsourcing de infraestructura. Tiene los mismos cinco beneficios generales que ya hemos visto, y es capaz de proporcionarlos a través de la economía de la escala y los avances tecnológicos.
💡 Serverless no significa que los servidores hayan desaparecido, significa que ya no tienes que preocuparte por ellos.
Arquitectura Serverless
Serverless en realidad cubre un rango de técnicas y tecnologías. Agrupamos estas tecnologías en dos áreas: Backend as a Service (BaaS) y Functions as a Service (FaaS). BaaS y FaaS son bastante diferentes, el primero se trata de outsourcing por completo de elementos individuales de una aplicación, y el segundo es un nuevo entorno de hosting para ejecutar código bajo demanda.
Agrupamos estas dos tecnologías dentro de Serverless porque la clave es que ninguno de los dos requiere que administre sus propios hosts o procesos del servidor. Con una aplicación completamente Serverless, ya no se piensa en ninguna parte de su arquitectura como un recurso que se ejecuta en un host. Toda su lógica, ya sea que la haya codificado usted mismo o que esté integrado con un servicio de terceros, se ejecuta dentro de un entorno operativo completamente elástico.
Arquitectura No-Serverless tradicional
En esta arquitectura, la aplicación móvil es responsable de renderizar la interfaz del juego y manejar la entrada del usuario, pero delega la mayor parte de la lógica real al backend. Desde la perspectiva del código, la aplicación móvil es simple y liviana.
La gestión de usuarios, la autenticación y las diversas operaciones del juego están encapsuladas con el código de la aplicación Java. El Backend también interactúa con una única base de datos relacional para mantener el estado de los juegos en curso y almacenar los resultados de los juegos completados.
Arquitectura Serverless
La interfaz de usuario sigue siendo parte de la aplicación móvil pero la autenticación y la administración de usuarios pueden ser manejadas por un servicio BaaS. Esos servicios se pueden llamar directamente desde la aplicación móvil para manejar tareas del usuario, como el registro y la autenticación, y otros componentes del backend pueden utilizar el mismo BaaS para recuperar información del usuario.
Con la administración y autenticación de usuarios ahora manejada por un BaaS, la lógica previamente manejada por nuestra aplicación backend en Java se simplifica. Podemos usar un API Gateway, para manejar el enrutamiento de solicitudes HTTP entre la aplicación móvil y el backend de una manera segura y escalable. Luego, cada operación distinta se puede encapsular en una función FaaS. Las funciones FaaS pueden interactuar con una base de datos NoSQL un gran cambio es que ya no almacenamos ningún estado de sesión dentro de nuestro backend, sino que lo conservamos todo en el store NoSQL.
Si bien esta arquitectura puede parecer algo pesada, en realidad ayuda significativamente con la escalabilidad. La aplicación móvil puede acceder sin problemas a esa misma base de datos para recuperar resultados anteriores y datos de cualquier tabla. Esto nos permite trasladar parte de la lógica del negocio al cliente en lugar de incorporar al backend.
Plataformas Serverless
AWS Lambda
AWS Lambda es un servicio serverless que permite ejecutar código sin aprovisionar ni administrar servidores, mantener integraciones de eventos o administrar tiempos de ejecución. Con Lambda, se puede ejecutar código para prácticamente cualquier tipo de aplicación o servicio de backend, todo sin necesidad de administración. Lambda admite lenguajes como Node.js, Python, Go, Java.
Cloudflare Workers
Cloudflare no es solo una empresa de CDN y seguridad, hace poco ha introducido Cloudflare Workers a su catálogo el cual es un servicio serverless que permite ejecutar código JavaScript en sus más de 175 data centers en todo el mundo utilizando el motor V8 de Google. Con solo unas pocas líneas de código, puede enrutar solicitudes HTTP, modificar respuestas o incluso crear nuevas respuestas sin un servidor de origen.
Google Cloud Functions
Google Cloud Functions es una plataforma serverless que permite ejecutar código de distintos lenguajes como Node.js, Python, Go y más sin la necesidad de administrar servidores. Se puede utilizar Cloud Functions para crear backends de IoT, procesamiento de API, chatbots, procesamiento de transmisiones y más.
Comparación de precios Serverless vs hosting tradicional
A continuación se presenta una tabla de comparación por una hora de funcionamiento (en servicios de AWS, Heroku y Google Cloud), asumiendo 200 ms de tiempo de ejecución, ejecutándose cada cinco minutos.
Dado que los diferentes servicios de AWS se facturan de acuerdo con diferentes métricas de utilización, es posible optimizar significativamente los costos al permitir que las aplicaciones se conecten directamente a los recursos.
Por ejemplo, el servicio Amazon Mobile Analytics cobra $1 por millón de eventos registrados (los primeros 100 millones de eventos son gratuitos cada mes). En el flujo de trabajo web cliente/servidor típico, donde un evento se envía a un servicio gateway y luego se ejecutan eventos, la arquitectura de implementación requeriría pagar tanto por el procesamiento como por el almacenamiento. El enfoque serverless sería utilizar una función Lambda solo para autorizar el acceso de escritura al servicio de análisis, una vez por sesión, y luego permitir que los clientes se conecten directamente a los eventos. Esto reduciría significativamente los costos de procesamiento.
Los costos de Lambda aumentan en proporción a la memoria reservada máxima y al tiempo de procesamiento, por lo que cualquier servicio que no cobre por el tiempo de procesamiento es un buen candidato para tal cambio de costos. Por ejemplo, el servicio de almacenamiento S3 cobra solo por la transferencia de datos. Cargar un archivo grande desde una aplicación cliente directamente a Lambda requeriría establecer un límite de memoria alto para que Lambda pudiera recibir archivos grandes.
Un enfoque alternativo sería utilizar una función Lambda para autorizar a los clientes a escribir un archivo específico en S3, luego cargar el archivo directamente desde la aplicación cliente a S3, y luego activar una función Lambda para procesar el archivo. Esto permitiría que la segunda función de Lambda use API de transmisión de datos y trabaje con un límite de memoria significativamente menor. El último enfoque puede resultar en la reducción de los costos de alojamiento en un orden de magnitud.
Conclusión
Serverless es una evolución en el desarrollo de aplicaciones en la nube, que ha surgido con la necesidad de crear aplicaciones de manera ágil y dejar de preocuparnos por la administración de servidores, donde los usuarios escriben pequeñas funciones, que luego son administradas por plataformas Serverless en la nube. Este modelo ha demostrado ser útil en una serie de escenarios de aplicación que van desde controladores de eventos múltiples hasta análisis de big data.
Referencias
The Rise of Serverless Computing
Serverless computing: economic and architectural impact