En los últimos años, el desarrollo de software ha experimentado importantes cambios. Antes de que todo estuviera en la «nube», lanzar una aplicación significaba una serie de pasos engorrosos y no siempre era rápido, implicaba comprar y preparar servidores, instalar sistemas operativos, configurar redes y mantener todo eso funcionando a largo plazo, sin embargo, todo eso cambió gracias a la computación en la nube, donde toda esa complejidad se ha vuelto mucho más sencilla y rápida, en parte gracias a servicios como el llamado FaaS.
Contenido
Luego de SaaS, PaaS, CaaS e IaaS surge FaaS o Funciones como Servicio, una tecnología que complementa a las anteriores, una solución mucho más simple para ciertas tareas particulares, en las cuales FaaS pueden cubrir mejor debido a que proporciona una nueva manera muy eficiente de ejecutar código, centrándose solo en lo que realmente importa: la lógica del negocio.
A lo largo de este artículo, se explorará qué es FaaS, cómo funciona, qué ventajas ofrece, en qué casos se usa más frecuentemente, en cuáles no debe usarse y sobre todo cómo se diferencia de otros modelos ya nombrados.
Qué es FaaS (Función como Servicio)
FaaS es un modelo que en respuesta a eventos permite ejecutar pequeños fragmentos de código que se llaman funciones, sin necesidad de preocuparse por la infraestructura que las soporta, por ejemplo, cuando se tiene una tienda online y se quiere que cada vez que alguien realice una compra se le envíe automáticamente un correo de confirmación, con FaaS, es posible escribir solo la función que envía este correo, sin necesidad de tener un servidor funcionando las 24 horas del día, debido a que la función se ejecuta cuando se necesita y luego desaparece.
Este enfoque es muy diferente a la forma tradicional en la cual siempre se mantienen servidores corriendo constantemente, esperando a que ocurra algo. Por el contrario, las funciones bajo el modelo FaaS están inactivas sin consumir recursos hasta que se activan por un evento específico, una vez ejecutadas, se liberan nuevamente los recursos, lo que en ciertos casos y para ciertas tareas convierte a FaaS en una solución bastante eficiente tanto en uso de recursos como en costos.
Comúnmente se confunde FaaS con Serverless, si bien FaaS es una tecnología de tipo Serverless y por tanto están vinculados, no son términos intercambiables, Serverless es mucho más amplio e incluye cualquier arquitectura en la que no gestionas servidores directamente aparte de FaaS, que es solo una de las alternativas dentro de Serverless.
Cómo funciona
El funcionamiento de FaaS se basa en la idea de eventos, cuando se produce el evento entonces se dispara la función. Los eventos pueden ser prácticamente cualquier cosa: desde una solicitud web, un mail que llega, un archivo que se sube a la nube, un cambio en una base de datos o incluso una acción programada como una tarea que debe ejecutarse cada cierto tiempo, cuando ese evento ocurre, se activa una función previamente definida, la cual se encarga de realizar esa tarea específica para la cual fue diseñada.
Estas funciones están diseñadas para ser muy específicas y con una sola responsabilidad, por ejemplo, una función puede encargarse exclusivamente de redimensionar una imagen, mientras otra verifica los datos de una compra, la diferencia con microservicios es que el microservicio puede realizar varias tareas bajo su responsabilidad, mientras que en las funciones tienen una y solo una responsabilidad.
Una vez que la función termina de ejecutarse, no se mantiene ninguna información entre ejecuciones, lo que permite que múltiples instancias de la misma función se ejecuten al mismo tiempo si fuera necesario, esto es lo que además la hace atractiva para programadores y administradores de sistema porque les permite escalar horizontalmente según la demanda.
Entre los principales proveedores de servicios en la nube como se pueden encontrar AWS, Google Cloud y Microsoft Azure, donde cada una implementan plataformas FaaS, cada una de ellas con sus particularidades. Los servicios más conocidos son AWS Lambda, Google Cloud Functions y Azure Functions. Estas plataformas se encargan de toda la parte compleja del backend: asignación de recursos, balanceo de carga, escalado automático y mucho más.
Ventajas principales de usar FaaS
Una de las mayores ventajas de FaaS es que permite a los desarrolladores concentrarse únicamente en escribir código que resuelve problemas, sin necesidad de preocuparse por cómo se ejecutará ese código o quién lo mantendrá funcionando, esto sin dudas representa un ahorro enorme de tiempo y dinero.
En lugar de pagar y mantener servidores que están encendidos todo el tiempo, aunque no estén haciendo nada y simplemente esperando a que algo suceda, en FaaS solo se paga por los milisegundos en los que el código está trabajando, esto hace que sea un modelo ideal para aplicaciones con cargas variables, impredecibles o con mucho tiempo de inactividad.
Además, gracias a ser una tecnología sin estado (no necesita recordar peticiones previas) y basada en eventos, permite una escalabilidad casi infinita, limitada únicamente por el presupuesto, y eventualmente por la capacidad máxima del proveedor.
Si la aplicación recibe miles de peticiones en poco tiempo por alguna necesidad puntual, la plataforma automáticamente se encargará de ejecutar tantas instancias de la función como sea necesario, sin que se tenga que hacer nada, este comportamiento habitualmente llamado elástico, es particularmente útil en eventos como lanzamientos de productos, campañas virales o cualquier situación donde el tráfico pueda dispararse en poco tiempo.
Igualmente, esta capacidad de absorber tráfico sin intervención del administrador también es un arma de doble filo, sobre todo si el sitio sufre por ejemplo un ataque de DDoS o tráfico agresivo de bots como scrappers y crawlers, la factura del proveedor puede dispararse muy rápidamente por lo que se requiere un control cuidadoso de las métricas y una correcta configuración para detectar abusos a tiempo para prevenir sobrecostos.
Otra ventaja es la facilidad de mantenimiento, dado que cada función es habitualmente pequeña y está enfocada en una tarea específica, no solo es más fácil localizar errores, sino que las actualizaciones son mucho más fáciles y rápidas, lo cual es ideal para la implementación de metodologías ágiles y mejora la productividad del equipo de desarrollo.
Casos de uso comunes
FaaS es ideal para una amplia cantidad de casos de uso diferentes, por ejemplo en aplicaciones web y móviles, es ideal para manejar acciones como la autenticación de usuarios, el procesamiento de formularios o la gestión de notificaciones, también se utiliza bastante frecuentemente para automatizar flujos de trabajo, como el envío de reportes diarios o la sincronización de datos entre diferentes plataformas.
Otro uso muy habitual es el análisis de datos. FaaS puede encargarse del procesamiento en tiempo real de grandes volúmenes de información, por ejemplo, una empresa que recibe datos de sensores o logs puede utilizar funciones para filtrar, transformar y almacenar esos datos de manera eficiente, otro caso muy frecuente es el procesamiento de archivos multimedia, cuando un usuario sube una foto o un video, una función puede encargarse de comprimir el archivo, redimensionarlo o convertirlo a otros formatos.
Incluso en el mundo del IoT, donde los dispositivos generan eventos constantemente, FaaS permite procesar esa información en la nube sin tener que mantener servidores dedicados que colapsarían por tener que responder simultáneamente a cientos de miles o incluso millones de dispositivos como electrodomésticos, la flexibilidad de este modelo lo convierte en una herramienta valiosa en contextos donde se necesita soportar un volumen alto de peticiones en un corto periodo de tiempo.
FaaS vs IaaS, CaaS y PaaS
Para entender mejor qué hace destacar a FaaS y colocarlo como una opción viable, resulta mejor compararlo con otros modelos de servicios en la nube, por ejemplo en el modelo IaaS, o Infraestructura como Servicio, se alquilan servidores virtuales y se gestionan, esto brinda mucha flexibilidad, aunque también exige mantener y actualizar todo el sistema operativo, el software y manejar la seguridad.
Luego en el modelo PaaS, o Plataforma como Servicio, simplifica un poco más las cosas si se compara con IaaS, debido a que en PaaS, el proveedor brinda una plataforma sobre la cual se puede desarrollar y desplegar aplicaciones sin preocuparse tanto por la infraestructura que corre debajo, sin embargo, todavía se debe gestionar todo el ciclo de vida de la aplicación completa y gestionar aspectos como el escalado y el monitoreo.
En CaaS, o Contenedores como Servicio, permite empaquetar las aplicaciones en contenedores y ejecutarlas en la nube, este enfoque ofrece un balance entre control y automatización, sin embargo, también implica una gestión más profunda de las dependencias y la orquestación, algo que puede ser más complejo.
Por último, FaaS va un paso más allá de todo eso y elimina casi toda la necesidad de administración, solo necesitando escribir funciones individuales y dejando que el proveedor se encargue de todo lo demás.
Conclusión
FaaS es una evolución natural y especializada que permite un desarrollo más eficiente, ágil y específico, en el cual en lugar de construir y mantener grandes y complejas infraestructuras, los desarrolladores pueden concentrarse en escribir funciones relativamente simples y pequeñas que realicen tareas muy específicas, respondiendo a eventos y escalando automáticamente según la demanda de tráfico, esta flexibilidad permite a las empresas ahorrar costos y desplegar sus aplicaciones con mayor rapidez.
Igualmente, a pesar de lo fantástico que pueda sonar, lo cierto es que no es la solución ideal para todos los casos, si bien FaaS ha demostrado ser útil en ciertos escenarios donde la velocidad y la escalabilidad son necesarios, como para construir APIs, procesar datos, automatizar tareas o responder a eventos varios, sin embargo, no se recomienda en casos donde se necesita conservar conexiones abiertas por largos períodos de tiempo, como en aplicaciones de chat en tiempo real, juegos multijugador o servicios de streaming, donde mantener un estado o una sesión activa durante minutos u horas puede resultar demasiado costoso.