Qué es Serveless en simples palabras
Tags: serverless, lambda, beginners, junior
Published: 2022-03-23 20:12:38

Alguna vez en nuestra carrera como desarrollador de software nos preocupamos en investigar y conocer las soluciones de terceros para desplegar nuestras aplicaciones. Comenzando por instalar un sistema operativo en el servidor y otras herramientas necesarias para tenerlo a punto, y ejecutar nuestro preciado código. Pensando a su vez la escalabilidad y tolerancia a fallas que pueda enfrentar, haciendo así  que nuestro ambiente sea lo más robusto posible solamente para arrancar. 

Con todo esto en mente, nos damos cuenta que no hemos estado hablando de la lógica del negocio ni del problema a resolver en todo este tiempo de planificación, esto hace que muchas veces sobredimensionamos y terminamos haciendo mucho más que lo que realmente necesitamos. 

## Ejemplo de nuestra vida diaria

Llevando la arquitectura *serverless* (sin servidor) a un caso de la vida cotidiana, podríamos pensar en que es una unidad de negocio aislada de la compañía, como por ejemplo ventas. En su caso tiene conocimiento de lo que hay en stock con una simple consulta: pero no se encarga de administrarlo. Así funcionan las aplicaciones de este tipo, se encuentran en constante comunicación pero cada área se encarga de resolver un problema en particular del negocio. 

Entendiendo ésto podemos decir que **serverless**, se trata de una arquitectura basada en la nube que ofrece la capacidad de brindar cómputo bajo demanda, la cual no es controlada por el programador / cliente. No debemos confundir con el framework (Serverless Framework) llamado de la misma manera, una cosa es un patrón de diseño de arquitectura y lo otro es un software que nos permite hacer posible este patrón. Es ésta oportunidad nos centraremos en hablar únicamente de la arquitectura. 

---



![Inicios de serverless](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qkxo4rloqf4jdxng6wqt.png)


## ¿Cómo nace *serverless*?
*Serveless* nace como necesidad de llevar la programación a otro nivel, permitiéndonos tener nuestro código repartido en distintas partes del mundo sin necesidad de estar físicamente allí y lo mejor de todo pagar por los recursos solamente cuando le estemos dando uso (luego entraremos más profundo sobre ese tema).
 
Pensando en *serverless* es la evolución de los servidores basados en la nube, donde el usuario no se debe preocupar de aprovisionar el cómputo necesario para ejecutar, tu aplicación puede escalar infinitamente o hacia abajo fácilmente, y lo mejor de todo es, sino se usa no se paga (en la mayoría de los casos) un punto a favor de esta arquitectura.
 
 
La Computación de serverless se basa en ejecutar un código en un proveedor de nube que nos brinda una arquitectura lista para usar, sin preocuparnos por definir qué características de hardware que debe tener; como memoria, sistema operativo o seguridad.

Algunos ejemplos son Amazon Web Services [(AWS) Lambda](https://aws.amazon.com/lambda/)

---

## ¿Funciona igual a un servidor tradicional?

Las aplicaciones serverless se comportan de la misma manera que lo haría una aplicación tradicional, pero se ejecutan en distintos servidores de forma global. Como ya lo hablamos anteriormente, el usuario no se encarga de resolver las cuestiones de hardware y software, sino que el proveedor de nube se encarga de todo.
 
Este nuevo modo de operar nos permite enfocarnos en resolver el problema del negocio en sí y no estar pensando en el almacenamiento, la seguridad o la escalabilidad que puede llegar a tener bajo un pico de demanda inesperado.

---


## Puntos a tener en cuenta


1. **Serverless es gratis o casi gratis** 


En la mayoría de los casos tener una función bajo la arquitectura serverless puede resultarnos gratuita en la mayoría de los proveedores de la nube más conocidos. Esto no quiere decir que nuestra aplicación no incurra en otros gastos, pero lo referido al cómputo se puede ver favorecido usando esta arquitectura.
Si estamos pensando ya en una aplicación con miles de usuarios disponible en un ambiente de producción, indiscutiblemente que tendremos costos asociados. Solamente debemos pensar que mientras nuestra aplicación no se esté ejecutando no tendremos un costo fijo. Pudiendo igualmente escalar infinitamente si en algún momento tenemos alta demanda.

2. **No debemos esperar por aprovisionar una infraestructura para estar en línea.** 
Justamente el mayor beneficio de usar esta arquitectura es poder comenzar y tener una solución al negocio en poco tiempo, dándole la posibilidad al equipo de desarrollo pensar en el problema del negocio y no en los servidores que necesitará tener para poder iniciar el proyecto. Por su lado el equipo de Devops junto con los Desarrolladores se encargan de definir los servicios a utilizar del proveedor de nube que fuese seleccionado y no estar pensando en actualizaciones de seguridad, licencias, entre otros factores ya mencionados.
 
Debemos recordar que si ya sabemos que nuestra aplicación tendrá un consumo constante durante todo el día por ejemplo, puede que el diseño serverless no sea el más apropiado.

3. **Separar tecnologías de las soluciones** 
En algunas ocasiones debemos desarrollar cierta solución en un lenguaje en particular o tener una política de seguridad/legal que nos impida tener físicamente nuestra aplicación en otro punto geográfico. En esas ocasiones es cuando podemos hacer uso de serverless, ya que podemos crear una aplicación totalmente aislada de nuestro ambiente principal que se adecue a esa necesidad sin tocar otras partes de nuestro negocio.



4. **Pequeño y sin memoria** 
Cuando pensemos cuál es la solución que debe responder nuestra función usando esta arquitectura, debemos pensar en algo realmente pequeño, ya que la respuesta debe ser lo más inmediata posible y desacoplada de los demás pasos de nuestro negocio.  Acá es donde viene el otro punto, cada vez que llamemos a una función serverless esta no tendrá información sobre las anteriores invocaciones, inicia en un ambiente limpio y sin capacidad de guardar datos de forma temporal o que vayamos hacer uso posteriormente en otro paso de nuestro negocio.
Por tal razón, al tener una aplicación de este tipo debemos de pensar en tener una base de datos o sistema de almacenamiento para persistir nuestras operaciones. En esta oportunidad no vamos a detallar mucho al respecto, solamente queremos que sepas que cada aplicación nace, ejecuta el código necesario y muere (si estás familiarizado con contenedores de Docker, es algo muy parecido al concepto).

5. **Usar el Domain-driven Design en la nube** 
No pretendo explicar en pocas líneas cómo hacer un buen diseño usando la metodología de Domain Driven Design (DDD), pero lo que quiero que te quedes es que si aún no la conoces puedas buscar mayores referencias al momento de pensar en desarrollar tu próxima aplicación.
Muchas veces como desarrolladores pensamos en requisitos, en clases, variables y otras terminologías que solamente nosotros entendemos. Pero ¿Qué pasa con el verdadero problema que debemos solucionar? Nos olvidamos que el programa debe dar una respuesta, y sobre-dimensionamos sin dar una solución. Es ahí cuando debemos pensar en pequeños componentes, planificar el diseño que nos hará que eso sea posible hacerlo con poco esfuerzo. Y lo mejor de todo aportando valor a nuestro cliente.

---






##Casos de usos para serverless

###Servicios Backend:
Podemos crear un endpoint HTTP en poco tiempo que nos permita atender una demanda alta de peticiones.
 
###Aplicaciones Web:
Tener nuestra aplicación web disponible solamente cuando sea necesaria, luego de ese período solamente estará dormida esperando ser utilizada.
 
###Microservicios:
La arquitectura serverless es ampliamente utilizada en microservicios, ya que permite ejecutar código de manera aislada y teniendo a su vez comunicación con otros servicios en la arquitectura que diseñamos.
 
###Procesamiento en Lotes:
Sin lugar a dudas es el mejor caso de uso, ya que por ejemplo cada final de mes sacar un reporte de las ventas de un local comercial, es una petición que solamente se hace una vez al mes, no tendría sentido aprovisionar un servidor en la empresa solamente para hacer uso ese poco tiempo. Para este caso, se procesa toda la información que se necesita y el sistema queda a la espera de la próxima llamada el siguiente mes sin incurrir en costos altos durante ese período.
 
###Streaming:
Alguna vez utilizamos una plataforma de streaming para consumir un contenido, como Netflix, Disney +, etc. En esos casos, el contenido multimedia se encuentra hospedado en un servidor y al hacer la solicitud de reproducir se hace la petición, validando nuestras credenciales y dándonos un medio disponible para el dispositivo que estemos usando. Obviamente que tener un servidor por cada recurso o cliente que tengan estas plataformas sería algo inviable en términos de escalabilidad.

---


##Conclusiones: 
Con estos ejemplos tienes una variedad de opciones en donde se puede crear una solución basada en serverless, si antes de leer este artículo solamente pensabas que se podía hacer para atender un formulario de contacto y mandar un email al administrador del sitio web, ahora con este conocimiento tienes más herramientas al momento de diseñar una aplicación sin servidores.
 
Pensar en serverless es una excelente oportunidad para ahorrar costos y dolores de cabeza creando infraestructura para nuestras aplicaciones. Llevar una aplicación vieja a un entorno basado en serverless es un gran desafío (lo sé) pero la idea de este contenido es que sepas que existe esta solución y que en un futuro la puedas considerar aplicar en tus proyectos sin importar el tamaño del mismo.

Te invito a conocer más sobre mí en la web [hector.builders](https://hector.builders/)