Compartir a través de


Aprovechamiento de funciones sin servidor

Sugerencia

Este contenido es un extracto del libro electrónico “Architecting Cloud Native .NET Applications for Azure” (Diseño de la arquitectura de aplicaciones .NET nativas en la nube para Azure), disponible en Documentos de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.

Cloud Native .NET apps for Azure eBook cover thumbnail.

En el espectro de la administración de máquinas físicas hasta el aprovechamiento de las funcionalidades de la nube, el modelo sin servidor se encuentra al final del camino. Su única responsabilidad es el código y solo paga cuando se ejecuta el código. Azure Functions proporciona una manera de compilar funcionalidades sin servidor en las aplicaciones nativas de nube.

¿Qué significa sin servidor?

Sin servidor es un modelo de servicio relativamente nuevo de informática en la nube. No significa que los servidores sean opcionales; el código se sigue ejecutando en un servidor en algún lugar. La distinción es que el equipo de la aplicación ya no se preocupa por la administración de la infraestructura del servidor. En su lugar, el proveedor de nube es el propietario de esta responsabilidad. El equipo de desarrollo aumenta su productividad entregando soluciones de negocio a los clientes, no trabajando en las canalizaciones.

La informática sin servidor usa contenedores sin estado desencadenados por eventos para hospedar los servicios. Pueden escalar y desescalar horizontalmente para satisfacer la demanda según sea necesario. Las plataformas sin servidor como Azure Functions tienen una integración estrecha con otros servicios de Azure, como colas, eventos y almacenamiento.

¿Qué desafíos resuelve el modelo sin servidor?

Las plataformas sin servidor abordan muchos problemas lentos y costosos:

  • Compra de máquinas y licencias de software
  • Alojamiento, protección, configuración y mantenimiento de las máquinas y sus requisitos de redes, energía y A/C
  • Aplicación de revisiones y actualización de software y sistemas operativos
  • Configuración de servidores web o servicios de máquina para hospedar software de aplicación
  • Configuración de software de aplicación dentro de su plataforma

Muchas empresas asignan presupuestos grandes para dar soporte a cuestiones de infraestructura de hardware. El traslado a la nube puede ayudar a reducir estos costes; cambiar las aplicaciones al modelo sin servidor puede ayudar a eliminarlos.

¿Cuál es la diferencia entre un microservicio y una función sin servidor?

Normalmente, un microservicio encapsula una funcionalidad de negocio, como un carro de la compra para un sitio de comercio electrónico en línea. Expone varias operaciones que permiten a un usuario administrar su experiencia de compra. Sin embargo, una función es un bloque de código pequeño y ligero que ejecuta una operación de un solo propósito en respuesta a un evento. Los microservicios se construyen normalmente para responder a las solicitudes, a menudo desde una interfaz. Las solicitudes pueden ser HTTP basadas en REST o gRPC. Los servicios sin servidor responden a eventos. Su arquitectura dirigida por eventos es ideal para procesar tareas en segundo plano de ejecución corta.

¿Qué escenarios son adecuados para el servicio sin servidor?

Sin servidor expone funciones de ejecución corta individuales que se invocan en respuesta a un desencadenador. Esto hace que sean ideales para procesar tareas en segundo plano.

Es posible que una aplicación tenga que enviar un correo electrónico como paso en un flujo de trabajo. En lugar de enviar la notificación como parte de una solicitud de microservicio, coloca los detalles del mensaje en una cola. Una función de Azure puede quitar de la cola el mensaje y enviar el correo electrónico de forma asincrónica. Si lo hace, podría mejorar el rendimiento y la escalabilidad del microservicio. La nivelación de carga basada en cola se puede implementar para evitar cuellos de botella relacionados con el envío de correos electrónicos. Además, este servicio independiente podría reutilizarse como una utilidad entre muchas aplicaciones diferentes.

La mensajería asincrónica de colas y temas es un patrón común para desencadenar funciones sin servidor. Sin embargo, las funciones de Azure pueden desencadenarse por otros eventos, como cambios en Azure Blob Storage. Un servicio que admita cargas de imágenes podría tener una función de Azure responsable de optimizar el tamaño de la imagen. La función podría desencadenarse directamente mediante inserciones en Azure Blob Storage, lo que mantiene la complejidad fuera de las operaciones de microservicio.

Muchos servicios tienen procesos de ejecución larga como parte de sus flujos de trabajo. A menudo, estas tareas se realizan como parte de la interacción del usuario con la aplicación. Estas tareas pueden obligar al usuario a esperar, lo que afecta negativamente en su experiencia. La informática sin servidor proporciona una excelente manera de mover tareas más lentas fuera del bucle de interacción del usuario. Estas tareas se pueden escalar a petición sin necesidad de que toda la aplicación se escale.

¿Cuándo debe evitar el uso sin servidor?

Las soluciones sin servidor aprovisionan y escalan bajo demanda. Cuando se invoca una nueva instancia, los arranques en frío son una incidencia común. Un arranque en frío es el período de tiempo que se tarda en aprovisionar esta instancia. Normalmente, este retraso puede ser de unos segundos, pero puede ser más largo en función de varios factores. Una vez aprovisionado, una única instancia se mantiene activa siempre que reciba solicitudes periódicas. Sin embargo, si se llama a un servicio con menos frecuencia, Azure puede quitarlo de la memoria y requerir un arranque en frío cuando se vuelva a invocar. Los arranques en frío también son necesarios cuando una función se escala horizontalmente a una nueva instancia.

En la figura 3-9 se muestra un patrón de arranque en frío. Observe los pasos adicionales necesarios cuando la aplicación está en frío.

Cold versus warm startFigura 3-9. Arranque en frío frente a arranque en caliente.

Para evitar los arranques en frío por completo, puede cambiar de un plan de consumo a un plan dedicado. También puede configurar una o varias instancias precalentadas con la actualización del plan Premium. En estos casos, cuando necesite agregar otra instancia, ya está lista para empezar. Estas opciones pueden ayudar a mitigar la incidencia de arranque en frío asociada a la informática sin servidor.

Los proveedores de nube facturan el uso sin servidor en función del tiempo de ejecución de proceso y la memoria consumida. Las operaciones de larga duración o las cargas de trabajo de consumo elevado de memoria no siempre son los mejores candidatos para los servicios sin servidor. Las funciones sin servidor favorecen pequeños fragmentos de trabajo que se pueden completar rápidamente. La mayoría de las plataformas sin servidor requieren que las funciones individuales se completen en unos minutos. Azure Functions predetermina una duración de tiempo de espera de 5 minutos, que se puede configurar hasta 10 minutos. El plan Azure Functions premium también puede mitigar esta incidencia, con un tiempo de espera predeterminado de 30 minutos con un límite superior independiente que se puede configurar. El tiempo de computación no es el tiempo del calendario. Las funciones más avanzadas que usan el marco de trabajo de Azure Durable Functions pueden pausar la ejecución durante varios días. La facturación se basa en el tiempo de ejecución real: cuando la función se reactiva y reanuda el procesamiento.

Por último, aprovechar Azure Functions para las tareas de aplicación agrega complejidad. Es aconsejable diseñar primero la aplicación con un diseño modular y de acoplamiento flexible. A continuación, identifique si hay alguna ventaja que ofrecería el modelo sin servidor que justifique la complejidad adicional.