Using Orleans as the server #708
Replies: 3 comments 7 replies
-
|
It took me a while, but I've been growing more fond towards this idea. Right now, every instance of Elsa will be handling workflow messages, some of which targeting the exact same workflow instance ID. Depending on the worker configuration, multiple messages could be processed in parallel. So, to avoid concurrency issues when updating the same workflow instance (loaded separately from the persistence store), the engine ensures this doesn't happen by using a distributed locking mechanism. Although that works, it's not perfect either. One specific case coming to mind is that when a message is redelivered because it wasn't processed in a timely fashion (e.g. because the workflow message worker is still executing a given workflow instance, holding on to a lock). Right now this message simply gets sent back to the queue. It works, but it's not quite elegant because the queue grows and grows, easily causing delays for other workflow instances to be executed. So I have been thinking about maybe introducing a worker queue per workflow instance, where each workflow instance only processes one message at a time. If that sounds similar to an actor pattern, then I think you're right. I'm no expert on the matter, but it's what I got when watching a video about Akka.net yesterday (which made me remind @ElderJames started this topic last year). So I would like to continue this discussion about possible designs to implement Orleans or Akka.NET for distributed hosting natively. Perhaps ideally we could provide Elsa without a dependency on either of those, but when it's time to host Elsa in a distributed fashion, one can simply reference e.g. /discuss |
Beta Was this translation helpful? Give feedback.
-
|
Perhaps dapr is a better choice, dapr actor comes from Orleans, dapr is more suitable for cloud-native environments, dapr also has workflow projects https://github.com/dapr/workflows |
Beta Was this translation helpful? Give feedback.
-
|
Orleans is now implemented as a workflow dispatch provider. Which means that workflows can now be executed within grains. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Orleans is a cross-platform framework for building robust, scalable distributed applications.
https://github.com/dotnet/orleans
From the Orleans, we can implement the following features:
Beta Was this translation helpful? Give feedback.
All reactions