Blog Azure Azure

Durable Functions: evolución de versiones en Azure

Diagrama conceptual de orquestaciones con Durable Functions en Azure

Introducción

Durable Functions es una extensión de Azure Functions y Azure WebJobs que permite crear funciones con estado en un entorno serverless. Su objetivo es facilitar patrones como orquestaciones, workflows de larga duración, fan-out/fan-in, reintentos coordinados y coordinación entre actividades, delegando en la extensión aspectos como el estado, los checkpoints y los reinicios.

Como ocurre con otros componentes del ecosistema Azure Functions, Durable Functions ha evolucionado por versiones. Esa evolución no solo afecta a nuevas capacidades, sino también al soporte, a las dependencias subyacentes y a la forma en la que conviene planificar migraciones.

Este artículo resume el estado de las versiones principales de Durable Functions y las consideraciones prácticas para equipos que mantienen aplicaciones existentes o diseñan nuevas soluciones serverless.

Resumen de versiones de Durable Functions

Según la guía oficial de versiones y migración de Microsoft, el estado de las versiones principales es el siguiente:

Versión Estado Cambios o características destacadas
v3.x Actual y recomendada Actualización del SDK de Azure Storage, mejoras de eficiencia de costes y migración desde v2.x normalmente sin cambios de código, actualizando dependencias.
v2.x Mantenida Recibe correcciones de seguridad y bugs. Introdujo capacidades como Durable Entities y Durable HTTP.
v1.x Legacy Fin de soporte previsto para septiembre de 2026.

La lectura importante para arquitectura es clara: v3.x es la versión recomendada para nuevas evoluciones, mientras que v2.x queda como versión mantenida y v1.x debe considerarse una versión heredada que requiere planificación de migración.

Qué cambia en Durable Functions v3.x

La versión v3.x del paquete Microsoft.Azure.WebJobs.Extensions.DurableTask es la versión recomendada actualmente por Microsoft para Durable Functions.

Los puntos más relevantes son:

  • Actualización del SDK de Azure Storage utilizado por la extensión.
  • Mejoras de eficiencia de costes, especialmente relevantes en aplicaciones con alto volumen de orquestaciones, actividad o almacenamiento de estado.
  • Migración desde v2.x sin cambios de código en la mayoría de los casos, limitada normalmente a actualizar dependencias.
  • Atención especial en aplicaciones C# in-process, ya que Microsoft considera esta actualización como un cambio potencialmente breaking para clientes que ejecutan Durable Functions en ese modelo.

También es importante tener en cuenta que el paquete para el modelo .NET aislado, Microsoft.Azure.Functions.Worker.Extensions.DurableTask, referencia internamente Microsoft.Azure.WebJobs.Extensions.DurableTask como ensamblado subyacente. Por tanto, los cambios de la extensión DurableTask también pueden afectar a aplicaciones .NET aisladas a partir de las versiones del paquete que incorporan esa dependencia.

Durable Functions v2.x: mantenida, pero no estratégica

La rama v2.x permanece en estado mantenido, lo que significa que Microsoft la contempla para correcciones de seguridad y bugs, pero no como línea principal de evolución.

Esta versión fue relevante porque incorporó capacidades como:

  • Durable Entities, para modelar entidades con estado gestionadas por Durable Functions.
  • Durable HTTP, para facilitar integraciones HTTP dentro de flujos durables.

Si una aplicación está en v2.x y funciona correctamente, no implica necesariamente una migración urgente. Sin embargo, en proyectos activos conviene evaluar el salto a v3.x, especialmente si se busca alinear la solución con la versión recomendada y beneficiarse de las mejoras de la extensión.

Durable Functions v1.x: versión heredada

La versión v1.x se considera legacy y tiene fin de soporte previsto para septiembre de 2026.

Para aplicaciones que todavía dependan de esta rama, la recomendación práctica es iniciar una evaluación de migración cuanto antes. No se trata solo de cambiar un paquete NuGet: en aplicaciones productivas puede haber dependencias con el runtime de Azure Functions, configuración del host, patrones de serialización, integraciones con almacenamiento o comportamiento operativo que requieran pruebas específicas.

En estos casos, la migración debería abordarse como un cambio de plataforma controlado:

  1. Inventariar funciones, orquestadores, actividades y entidades.
  2. Revisar paquetes y versiones del runtime.
  3. Validar la configuración de host.json.
  4. Probar escenarios de reanudación, reintentos y errores.
  5. Ejecutar pruebas en un entorno separado antes de promover a producción.

Consideraciones para migrar de v2.x a v3.x

La migración desde Durable Functions v2.x a v3.x está planteada por Microsoft como una actualización de dependencias que, en general, no requiere cambios de código. Aun así, en sistemas reales conviene no tratarla como un cambio trivial.

Recomendaciones prácticas:

  • Actualizar paquetes de forma explícita, evitando mezclas inconsistentes de versiones.
  • Revisar el modelo de ejecución: C# in-process y .NET aislado tienen implicaciones distintas.
  • Ejecutar pruebas de regresión sobre orquestadores de larga duración.
  • Validar instancias en curso, especialmente si existen workflows persistidos con estados pendientes.
  • Monitorizar consumo y almacenamiento tras la migración, ya que v3.x introduce cambios orientados a eficiencia.
  • Revisar telemetría y alertas, para asegurarse de que los indicadores operativos siguen siendo útiles.

Aunque la guía oficial indica que el paso desde v2.x no requiere cambios de código en la mayoría de los casos, para aplicaciones C# in-process Microsoft marca la actualización como un cambio potencialmente breaking. Por tanto, debe planificarse con pruebas específicas.

Impacto para equipos .NET

En el ecosistema .NET hay dos modelos relevantes al trabajar con Azure Functions:

  • Modelo in-process, donde el código de la función se ejecuta dentro del mismo proceso que el runtime de Azure Functions.
  • Modelo aislado o out-of-process, donde la aplicación se ejecuta en un proceso separado mediante el worker de .NET.

Durable Functions existe en ambos contextos, pero los paquetes y las dependencias no son idénticos. Para el modelo aislado, el paquete habitual es Microsoft.Azure.Functions.Worker.Extensions.DurableTask. Según la documentación oficial, este paquete referencia Microsoft.Azure.WebJobs.Extensions.DurableTask como ensamblado subyacente, por lo que las actualizaciones relevantes de DurableTask también deben revisarse en aplicaciones .NET aisladas.

La recomendación para equipos .NET es no limitar la revisión a “qué versión de .NET usamos”, sino comprobar también:

  • Versión del runtime de Azure Functions.
  • Modelo de ejecución: in-process o aislado.
  • Versión del paquete DurableTask.
  • Configuración de almacenamiento.
  • Compatibilidad con orquestaciones existentes.
  • Pruebas de workflows en ejecución prolongada.

Buenas prácticas antes de actualizar

Antes de actualizar Durable Functions en una aplicación productiva, conviene realizar una revisión técnica mínima:

1. Revisar dependencias

Identifica todos los paquetes relacionados con Azure Functions y Durable Functions. Evita actualizar únicamente DurableTask si el resto del proyecto queda en una combinación de versiones no validada.

2. Probar orquestaciones reales

No basta con validar que la aplicación compila. Las orquestaciones tienen comportamiento diferido, persistencia de estado y reanudaciones. Es recomendable probar:

  • Inicio de nuevas instancias.
  • Reanudación de instancias existentes.
  • Reintentos.
  • Errores en actividades.
  • Timers durables.
  • Fan-out/fan-in, si aplica.
  • Integraciones HTTP o con colas, si forman parte del flujo.

3. Validar configuración de almacenamiento

Durable Functions usa almacenamiento persistente para guardar estado, historial y mensajes internos. Como v3.x incorpora cambios en el SDK de Azure Storage, es prudente revisar configuración, permisos, rendimiento y monitorización.

4. Revisar observabilidad

Después de una actualización, confirma que logs, métricas y trazas siguen proporcionando información suficiente para operar la solución. En Durable Functions, la visibilidad sobre instancias, estados y errores es clave para soporte.

5. Planificar rollback

Toda migración de runtime o extensión debería tener un plan de reversión. Esto es especialmente importante si existen workflows de larga duración o instancias activas durante el despliegue.

Conclusión

Durable Functions continúa siendo una pieza importante para construir workflows serverless con estado sobre Azure Functions. La evolución de versiones refuerza la necesidad de mantener actualizadas las dependencias, pero también de tratar las migraciones con disciplina técnica.

La situación actual puede resumirse así:

  • v3.x es la versión recomendada.
  • v2.x sigue mantenida, pero no es la línea principal de evolución.
  • v1.x es legacy y tiene fin de soporte previsto para septiembre de 2026.
  • La migración desde v2.x a v3.x suele centrarse en actualizar dependencias, aunque requiere especial cuidado en aplicaciones C# in-process.
  • En proyectos .NET aislados, también hay que revisar la relación entre Microsoft.Azure.Functions.Worker.Extensions.DurableTask y Microsoft.Azure.WebJobs.Extensions.DurableTask.

Para más detalle, la referencia principal es la guía oficial de versiones y migración de Durable Functions.