Uber Cadence workflow orchestrator engine
We started looking at workflow engines for orchestrating our business processes and explored Uber Cadence.
Cadence is a distributed, scalable, durable, and highly available orchestration engine developed at Uber Engineering to execute both asynchronous and synchronous jobs in a scalable and resilient way. Cadence supports both long-running as well as very short tasks. It internally manages Database + Queue + Timers.
Things we liked about Uber Cadence :
- Fault tolerance : It is a distributed workflow engine. ()
- Resume in case of failure : Yes, it can rerun a failed workflow from the failing point without losing the achieved progress (history).
- Stateless : It is stateless as it internally uses DB to save state and uses Queue to distribute tasks
- Auditing : It maintains audit logs in terms of execution history
- Queue and DB : It self manages both Queue and Casandra DB.
- UI : It does give a UI to monitor past and present workflows.
- Benchmarks : Cadence claims that "In our tests we went up to 10k workflows per second and 200 million parallel workflows. We could go higher given more database capacity." ()
Things we didn't like about Uber Cadence :
- UI : It shows data in tabular form but not in Diagrammatic view. Also, as of now Cadence does not give a mechanism to design workflows via UI, as in case of Activiti. We want technology BAs to design workflows via UI. But I am sure this feature will be added in near future.
We created few POCs using Java client for below cases :
- Running Workflow
- Running Child Workflow - Running workflow with Activities
- Running workflow with Async Activity
- Running workflow with "Asynchronous Activity Completion" for UI input
- Running workflow with Signal
- Restarting failed workflow from the failing point without losing the achieved progress (history)
Author : Mayank Garg, Technology Enthusiast and Georgia Tech Alumni