En el artículo anterior exploramos el funcionamiento interno de Serverless. En esencia, Serverless aprovecha la planificación por capas y los arranques en frío rápidos, lo que le permite reducirse a cero cuando no se procesan eventos. Es similar a una luz con sensor de voz que se enciende cuando alguien está presente y se apaga automáticamente cuando la habitación está vacía.
Una vez comprendidos los fundamentos, quizá te preguntes cuáles son las aplicaciones prácticas de esta impresionante tecnología. Hoy profundizaremos en los casos de uso de Serverless. Sin embargo, un requisito previo para entender sus aplicaciones es comprender su modelo de proceso, un concepto tan crucial como los arranques en frío.
El modelo de proceso de Serverless
Retomemos el proceso de arranque en frío de Serverless de la sesión anterior. Recordemos que el proveedor de la nube gestiona las fases de preparación del contenedor y del entorno de ejecución, dejándonos a nosotros centrarnos únicamente en la ejecución de la función. Dentro del ámbito de Serverless, la ejecución de funciones es manejada por un “servicio de funciones”. Cuando el desencadenante de la función señala la llegada de un “evento”, el servicio de funciones crea instancias de función según sea necesario y ejecuta las funciones correspondientes. Una vez que una función completa su ejecución, su instancia asociada se retira, permitiendo que la aplicación Serverless se reduzca a cero y entre en un modo de ahorro de energía.
Ahora, quizá te preguntes si es posible mantener viva una instancia después de la ejecución de la función en lugar de terminarla, permitiéndole esperar la siguiente invocación de función. Esto eliminaría la sobrecarga del arranque en frío cada vez, resultando en tiempos de respuesta más rápidos.
Efectivamente, Serverless prevé tales escenarios. En consecuencia, desde la perspectiva del proceso que ejecuta la instancia de función, existen dos modelos:
- Ejecutar hasta completar: En este modelo, la instancia de función, una vez lista, ejecuta la función y termina inmediatamente. Esta es la forma más pura de uso de Serverless.
- Proceso persistente: Aquí, la instancia de función, después de prepararse, no cesa al completar la función. En cambio, regresa y espera pacientemente la siguiente llamada a la función. Nótese que incluso en este modelo, el proveedor de la nube eventualmente destruye la instancia de función si ningún evento la desencadena durante un período predeterminado.
Orquestación de datos
La mayoría de los ingenieros están familiarizados con el patrón MVC (Modelo-Vista-Controlador), un paradigma de diseño ampliamente exitoso. Sin embargo, el auge de los frameworks MVVM en el frontend ha empujado la capa de Vista hacia adelante, dando lugar a las aplicaciones SPA (Single Page Application). Por el contrario, las capas de Control y Modelo del backend han descendido, dando origen a aplicaciones backend orientadas a servicios.
Este cambio ha resultado en un desacoplamiento más completo del frontend y el backend. El desarrollo del frontend puede proceder de forma independiente, apoyándose en interfaces de datos simuladas, mientras que los equipos de backend pueden centrarse en el desarrollo de interfaces de datos. Sin embargo, esta separación introduce una capa de puerta de enlace de datos con alto I/O de red.
Node.js, con su naturaleza asíncrona y no bloqueante, y la afinidad de JavaScript con los ingenieros de frontend, asumió naturalmente el papel de la capa de puerta de enlace de datos. Esto llevó a la aparición de la capa Node.js BFF (Backend For Frontend), que orquesta los datos e interfaces del backend, adaptándolos a estructuras de datos adecuadas para el consumo del frontend.
La capa BFF actúa como intermediario, uniendo el frontend y el backend. Los datos sin procesar, a menudo llamados datos brutos o metadatos, son prácticamente ilegibles para los usuarios finales. Por lo tanto, necesitamos combinar y procesar los datos relevantes, añadiéndoles valor y haciéndolos significativos. Este proceso de combinación y procesamiento se denomina orquestación de datos.
Tradicionalmente, gestionar aplicaciones Node.js para la capa BFF ha sido intensivo en recursos, requiriendo máquinas virtuales o plataformas PaaS. Sin embargo, dado que la capa BFF realiza principalmente orquestación de datos sin estado, podemos reemplazar sin problemas la aplicación Node.js con Serverless utilizando el modelo de ejecutar hasta completar. Esta es la esencia del término cada vez más popular SFF (Serverless For Frontend).
Una vez entendida la evolución de BFF a SFF, tracemos el nuevo flujo de solicitudes. Cuando el frontend inicia una solicitud de datos, el desencadenante de la función activa nuestro servicio de funciones. Nuestra función arranca, invoca la interfaz de metadatos del backend, procesa los metadatos devueltos al formato requerido por el frontend y, finalmente, nuestra función Serverless puede tomarse un merecido descanso.
Orquestación de servicios
La orquestación de servicios comparte similitudes con la orquestación de datos; la diferencia clave es que se centra en combinar y procesar varios servicios ofrecidos por el proveedor de la nube. Aunque el concepto es anterior a Serverless, su implementación tradicional estaba limitada por las versiones de lenguaje SDK compatibles con los servicios. Normalmente, recurríamos a archivos YAML o interfaces de línea de comandos para orquestar servicios. Utilizar estos servicios o APIs implicaba encontrar SDKs correspondientes en nuestro lenguaje de programación preferido, cargarlos en nuestro código y emplear claves secretas para llamar a métodos del SDK para la orquestación. Similar a la orquestación de datos, los costos de operación e implementación del backend eran sustanciales, y la ausencia de un SDK requería una implementación manual basada en las interfaces o protocolos de la plataforma.
Serverless expande los límites del uso de SDK. Por ejemplo, imagina un servicio web que necesita enviar códigos de verificación por correo electrónico. Podemos lograrlo con una función Serverless de ejecutar hasta completar que utilice el SDK del proveedor de la nube para enviar correos electrónicos. Al mismo tiempo, una función Serverless persistente puede generar códigos de verificación de cadenas aleatorias, almacenarlos y desencadenar la función Serverless de envío de correos electrónicos para entregar los códigos en las bandejas de entrada de los usuarios. Durante la verificación, podemos invocar nuevamente la función Serverless persistente para validar los códigos.
Una ventaja notable de Serverless es su independencia del lenguaje. Esto libera a los equipos de desarrollo de estar confinados a un solo lenguaje, permitiéndoles aprovechar las fortalezas de Java, PHP, Python, Node.js y otros para construir aplicaciones complejas de manera colaborativa.
La naturaleza abierta de la orquestación de servicios de Serverless ha atraído una atención significativa de los proveedores de la nube. Permite crear escenarios de orquestación de servicios diversos y complejos, manteniéndose independiente del lenguaje, expandiendo significativamente los casos de uso de varios servicios en la nube. Sin embargo, esto también exige que los desarrolladores se familiaricen con la gama de servicios ofrecidos por su proveedor de nube elegido.
Conclusión
- Existen dos tipos de modelos de proceso para Serverless: el tipo de proceso residente y el tipo de usar y destruir. El tipo de proceso residente está diseñado para adaptarse a la arquitectura MVC tradicional y no parece natural; si empiezas a usar Serverless desde ahora, definitivamente recomendaría el modelo de usar y destruir, que puede maximizar las ventajas de Serverless.
- Remontándonos a la historia, he ordenado el BFF desarrollado mediante la separación frontend-backend, que luego puede ser reemplazado por SFF. Ya sea orquestación de interfaces internas o orquestación de datos externos, Serverless puede jugar un gran papel.
- Yendo más allá de la orquestación de datos, podemos aprovechar las capacidades de Serverless y los proveedores de servicios en la nube para lograr la orquestación de servicios, crear escenarios de servicios compuestos más potentes y mejorar nuestra eficiencia de investigación y desarrollo.
Novita AI es la plataforma en la nube integral que impulsa tus ambiciones de IA. APIs integradas, sin servidor, instancia GPU: las herramientas rentables que necesitas. Elimina infraestructura, comienza gratis y haz realidad tu visión de IA.
Lectura recomendada
Desvelando la revolución: Explorando el mundo de la computación sin servidor
