Wednesday 20 November 2019

Azure Durable Functions vs everything else

If you were to develop and run such complex workflows in the cloud, you will probably need to depend on industry leading products like K2 or build your own workflow using .NET Workflow Foundation (but that has its own drawbacks like it is not available on .NET core) or Durable Task Library. 

While above mentioned options are very much possible, if you don't have a requirement to run millions of workflows per day, probably you should validate Azure Durable Functions as well before you decide to go all-in.

Azure Durable Functions are a great way to instantiate and manage complex event-driven workflows. The workflows can follow many of the well-known workflow patterns like "fan out-fan in", "human intervention", "workflow chaining" etc. 

There is great content available over the web to go through and build your workflows using ADF (Azure Duration Functions) e.g. Talk by Jeremy Likness

There are couple of factors to keep in mind before you get swayed either way.


  1. Take a good look at your input requirements and identify a trigger that works well with it. If your workflows are triggers are triggered via HTTP requests, you might evaluate HTTP triggers vs your own .NET core web app (which can internally queue messages and ADF can be triggered using Queue triggers).
  2. Ensure that you have chosen the right number of partition counts and are using the auto scale appropriately. Docs
  3. ADF in their current avatar utilize Azure Storage for instance management and heavy load can lead to potential throttling and slowness. If you have extremely high load and low latency requirements, perhaps it is a good idea to use any industry leading product or utilize Durable Task Framework. DTF is extremely powerful and flexible and you can add your own modifications via its extensible state providers or modifying the original source code :). I believe it is an area of improvement for ADF.
  4. ADF does have a way to version orchestrations but you are better off using a side by side deployment model instead of adding backward compatible logic in your functions (and stopping and restarting all in-flight instances).
  5. ADF's disaster recovery options are pretty much covered via disaster recovery options of app service and azure storage account.


Happy decision making!!