Uber Cadence workflow orchestrator engine
We started looking at workflow engines for orchestrating our business processes and explored Uber Cadence. Overview | 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. (Deployment Topology)
-
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." (Performance of Uber Cadence · Issue #2528 · uber/cadence)
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
(https://in.linkedin.com/in/mayankgarg12)
How can I have a long task? as of months, since it is a task that a user would do, everything that I implement now leaves me the flow in TimeOut state.
ReplyDelete