Replies: 1 comment 1 reply
-
This has been raised a few times in the past, and as you quite rightly point out, one orchestrations activities can saturate the queues and other orchestration instances must get in the queue and wait their turn. A few thoughts, hopefully one will fit.
|
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
Hi,
Context
We have a scenario, where we are using DF to orchestrate business processes and reports across a bunch of services in charge of various aspects of the data and logic.
These reports and business processes can be triggered by a user request (click on a UI button), or from system initiated events (scheduler for example).
We encounter an issue where a specific orchestration can fill the message queue to a point that another orchestration will not start running after all these messages are processed.
Example is a huge report filling the queue with a lot of tasks, while a few seconds later, a user is asking for a fairly simple process to be executed as the consequence of clicking a button, waiting for the result.
We also will have to implement processes in the future, where the same logic will be shared between massive batches and manual interactive unitary triggers.
Current mitigation of the issue
We took the decision to create two function apps, each one with its hub (and queue), one for interactive orchestrations, one for reports ones, both of them being able to run all the orchestrations.
This solved the issue for the moment, but, as we look into the future, we anticipate that this current setup will not scale well with the addition of more processes, as they will impact each others through the unique queue usage in each scenario (reports/interactive).
We are wondering if this will lead us to create a function app for each orchestration, leading to a somewhat uncomfortable situation in terms of hosting that we did not expect.
Alternatives
Previously, we were using MassTransit sagas to orchestrate these process, and as each saga had its own queue, we did not face the issue.
Idea/Proposal
It would be great to be able to separate the queues used by orchestrations.
This could be done either
The second option would probably be better to ensure retro-compatibility, while allowing more control on the sharing of queues.
A bonus feature would be to be able to direct the orchestration to a given queue at runtime, allowing the use of specific queues depending on if the process has to be executed quickly due to its interactive nature, or is a part of a massive batch that can be delayed).
Do you think this is a direction that you would be willing to take in the future ?
Beta Was this translation helpful? Give feedback.
All reactions