Posted: 19 May 2022 5 Tiempo de lectura

¿Qué son las Azure Functions?

Introducción

En el artículo anterior de esta serie se mostró qué era la tecnología Serverless. En éste nos vamos a centrar en Azure Funtions.

¿Qué son las Azure Functions?

Azure Functions, en su modo básico, es un servicio Serverless ofrecido por Microsoft con las siguientes características:

  • Permiten ejecutar cargas de trabajo on-demand y en respuesta a eventos o event-driven: peticiones HTTP externas, eventos recibidos de otros servicios de Azure, alertas de monitorización, eventos programados con tareas cron, etc.
  • Proporcionan escalado y desescalado de recursos elástico de forma automática, rápida y transparente al cliente consumidor. Permiten de dar soporte a picos de demanda, volviendo a estados anteriores cuando las peticiones decrecen.
  • Típicamente ejecutadas en un escenario stateless sin estado, es decir, entre diferentes ejecuciones las funciones no almacenan ni utilizan información de estado. Los entornos de ejecución se crean, se ponen a disposición del código del cliente y se destruyen. No hay posibilidad de almacenar y recuperar información entre peticiones.
  • Cuanto más rápido termine la función, menor es el coste. Por tanto, encajan muy bien en entornos en los que el código de las funciones es pequeño, específico (single-purpose) y de corta duración.
  • El proveedor Cloud necesita un tiempo para provisionar los recursos antes de que la función se ejecute. Se denomina cold-start.
  • Este tipo de servicio se conoce también como FaaS o Function as a Service.


Principales planes ofrecidos por Azure

Consumption Plan

Es el plan que más se ajusta al concepto Serverless. El cliente paga exclusivamente por los recursos que consume, no se dispone de ningún recurso de computación reservado ni total ni parcialmente y los recursos son escalados de forma automática en momentos de alta demanda. Como desventaja tenemos el problema de los cold-start ya explicado anteriormente.

Cuanto más rápido termine la función, menor es el coste. Por tanto, este plan encaja muy bien en entornos en que las funciones son pequeñas, de único propósito y se ejecutan muy rápido.

Por último, algún dato importante a tener en cuenta:

  • El máximo tiempo de ejecución permitido es de 10 minutos, con un valor por defecto de 5 minutos.
  • Cada instancia de computación utiliza 1.5Gb de memoria y un único core. Si es necesario procesar ficheros o blobs muy largos podría haber problemas, por ejemplo, al intentar mover blobs pesados entre diferentes Storage Accounts.
  • Existe un límite de 230 segundos en funciones iniciadas vía triggers HTTP, lo cual aplica también al resto de planes.
Premium Plan

Este plan, también conocido como elastic premium plan, implica la reserva de recursos de computación o instancias por adelantado con objeto de evitar los cold-start. Para ello proporciona dos tipos de instancias, always ready (siempre disponibles) y pre-warmed (precargadas para hacer su disponibilidad más rápida). El cliente puede configurar el número y tipo de instancias iniciales. A mayor número de instancias, más rápida será la respuesta a picos de demanda, pero mayor coste. Las instancias configuradas de forma inicial se facturan de forma fija. En todo caso, este plan mantiene el resto de las características de Serverless.

Algún dato adicional a tener en cuenta:

  • El mínimo número de instancias a reservar de inicio es de una instancia de tipo always ready.
  • El máximo tiempo de ejecución garantizado es de 60 minutos.
  • La memoria disponible por instancia oscila entre 3.5Gb y 14Gb.
Dedicated App Service Plan

Plan dedicado que permite utilizar las funcionalidades de Azure Functions con los planes de Azure App Services. Por tanto, implica reserva de recursos. Los costes del servicio dependen del plan contratado, lo cual difiere completamente de los modelos anteriores.

En cuanto al escalado, el cliente debe hacerlo de forma manual provisionando más máquinas virtuales o bien configurando un plan de automatización. Dicho escalado no resulta tan rápido como en los planes anteriores. Entonces, ¿qué ventajas tiene este plan?

  • Permite ejecutar las funciones en un App Service Environment dedicado y aislado del resto de clientes.
  • El tiempo de Timeout es ilimitado.
  • Si el cliente dispone de App Service Plans previamente contratados para ejecutar otras aplicaciones puede reaprovecharlos.

Microsoft incluye este plan en su portfolio como Serverless ya que al menos, el mantenimiento, seguridad o patching de la infraestructura de computación no depende del cliente final. En mi opinión, este plan se acerca más al concepto de PaaS (Platform as a Service) que a Serverless, ya que implica reserva de recursos con sus costes fijos asociados y los procesos de escalado no son lo suficientemente rápidos ni transparentes, pero ¿y tú qué opinas? Mientras lo piensas dejaré aquí la siguiente cita leída en una red social que me resultó muy clarificadora:

“Si tu PaaS puede iniciar y escalar instancias de forma eficiente en milisegundos y ejecutarlas en menos de un segundo, entonces no lo llames PaaS, llámalo Serverless”

¿Cómo selecciono el plan que mejor me encaja?

Para seleccionar el plan que mejor encaja para nuestra aplicación ten en cuenta los siguientes puntos:


 

Autor del artículo

José Antonio Muro