Skip to content

lucaslorentz/durabletask-extensions

Repository files navigation

Durable Task Extensions CI Coverage Status

Introduction

Durable Task Framework is an open source framework that provides a foundation for workflow as code in .NET platform.

This project aims to extend it with:

  • .NET Dependency Injection and Hosting integration
  • Administrative and monitoring UI
  • EFCore storage with support for InMemory, MySQL, PostgreSQL, SQL Server and some extra features.
  • Storage delegation via GRPC protocol

Related projects

Builds on top of Durable Task Framework to deliver a serverless workflow as code product focused on Azure.

Cadence is a scalable and reliable workflow as code platform built an used by Uber. It is heavily inspired on Durable Functions, but also includes some addicional features like tasks lists and a monitoring UI. Cadence features are used as inspiration for this project.

Temporal is a fork of Cadence backed by a company with the same name and founded by the original creators of Cadence. It is under active development and might end up officially supporting .NET clients.

Components

Name (click for readme) Package Description
LLL.DurableTask.Client Nuget DI extensions to configure TaskHubClient.
LLL.DurableTask.Worker Nuget DI extensions to configure TaskHubWorker.
LLL.DurableTask.Api Nuget Exposes TaskHubClient operations as REST API.
LLL.DurableTask.Ui Nuget UI to monitor and manage orchestrations.
LLL.DurableTask.Server Nuget Expose storage as API.
  LLL.DurableTask.Server.Grpc Nuget GRPC endpoints for server.
  LLL.DurableTask.Server.Grpc.Client Nuget Storage implementation using server GRPC endpoints.
LLL.DurableTask.AzureStorage Nuget Dependency injection for Azure Storage
LLL.DurableTask.EFCore Nuget EFCore relational database storage implementation with extra features.
  LLL.DurableTask.EFCore.InMemory Nuget EFCore storage InMemory support.
  LLL.DurableTask.EFCore.MySql Nuget EFCore storage MySql support.
  LLL.DurableTask.EFCore.PostgreSQL Nuget EFCore storage PostgreSQL support.
  LLL.DurableTask.EFCore.SqlServer Nuget EFCore storage Sql Server support.

Comparing Storage Providers

The following table compares the EFCore storage providers from this project.

Feature EFCore PostgreSQL EFCore MySQL EFCore SQL Server EFCore InMemory Others
External dependencies PostgreSQL MySQL SQL Server None Compare
Durable Entities No No No No Compare
Disconnected environment Yes Yes Yes Yes Compare
Identity-based connections Yes¹ Yes¹ Yes¹ N/A Compare
Maximum throughput Moderate Moderate Moderate Moderate Compare
Maturity Not battle-tested Used in production Not battle-tested Development only Compare
Worker specialization Supported Supported Supported Supported No
Input/output observability Yes Yes Yes Yes No
Enhanced rewind Yes Yes Yes Yes No
Orchestration tags Yes Yes Yes Yes No
Full execution history Yes Yes Yes Yes No
Reliable event delivery Yes Yes Yes Yes No

¹ Supported via EFCore database provider configuration (e.g. Azure AD / Entra ID tokens). Not built into this project directly.

Performance Benchmarks

Benchmark running 100 orchestrations with 5 activities each (lower is better):

Storage Provider Median Mean Std Dev
EFCore InMemory 1.56 s 1.88 s 0.51 s
EFCore PostgreSQL 2.75 s 2.53 s 0.37 s
EFCore SQL Server 3.90 s 3.77 s 0.54 s
EFCore MySQL 3.88 s 3.85 s 0.26 s
DurableTask SQL Server¹ 2.33 s 2.34 s 0.07 s
Azure Storage (Azurite)¹ 8.53 s 8.40 s 0.89 s

¹ Included for reference. Azure Storage and DurableTask SQL Server are separate Microsoft packages.

Note: Benchmarks were run locally using Docker containers with BenchmarkDotNet on Apple M1 Pro, .NET 9 (3 warmup + 10 iterations). Azure Storage used the Azurite emulator. Results may vary between runs and environments — these numbers are useful for relative comparison, not absolute performance. See benchmark source for details.

Composability

Our components were designed to be independent and highly composable. See below some possible architectures.

Microservices with server

Diagram

Microservices with direct storage connection

Diagram

Single service

Diagram

UI for Durable Functions

Diagram

Sample

See samples for an implementation of the classic book Flight, Car, Hotel with compensation problem using all componentes from above.

About

Extensions to Durable Task Framework

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages