[Proposal] Enhance default routing and Placement Strategy using Directory Partitioning Scheme · Issue #9426 · dotnet/orleans · GitHub
More Web Proxy on the site http://driver.im/
You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Current client routing (sticky bucketing) and default grain placement strategies can cause unnecessary network hops, increasing activation latency and recovery churn, as they aren't optimally aligned with the grain's directory partition location.
This proposal has two parts. The first part is to change the default placement to ResourceOptimizedPlacement and update that director so that it has 4 tiers instead of three:
PreferLocal if local silo is within load tolerance, otherwise
Place on the silo which hosts the grain's directory partition if that silo is within tolerance, otherwise
Place on the least-loaded silo (Power of K choices), otherwise
Place on a random compatible silo, otherwise (fallback for the case where we have no resource usage stats)
This optimizes for good locality between the caller & callee, and callee and directory, while still keeping the system balanced.
The second part of the idea capitalizes on the first by making clients route to the gateway corresponding to the grain's directory partition. It involves us removing the sticky bucketing system that we currently use and adding functionality to subscribe to membership changes from the cluster (eg, via an observer callback).
This should result in the majority of calls requiring no network round trips to the directory if they are submitted by an external client. Calls originating from a silo or grain can take advantage of locality (if within tolerance) and otherwise are co-located with their directory partition for improved activation perf (while still being much better balanced than RandomPlacement, since the directory partitioning scheme has a very low chance of significant imbalance). It also reduces the grain directory recovery costs in the case of a silo crash.
The text was updated successfully, but these errors were encountered:
Uh oh!
There was an error while loading. Please reload this page.
Current client routing (sticky bucketing) and default grain placement strategies can cause unnecessary network hops, increasing activation latency and recovery churn, as they aren't optimally aligned with the grain's directory partition location.
This proposal has two parts. The first part is to change the default placement to
ResourceOptimizedPlacement
and update that director so that it has 4 tiers instead of three:This optimizes for good locality between the caller & callee, and callee and directory, while still keeping the system balanced.
The second part of the idea capitalizes on the first by making clients route to the gateway corresponding to the grain's directory partition. It involves us removing the sticky bucketing system that we currently use and adding functionality to subscribe to membership changes from the cluster (eg, via an observer callback).
This should result in the majority of calls requiring no network round trips to the directory if they are submitted by an external client. Calls originating from a silo or grain can take advantage of locality (if within tolerance) and otherwise are co-located with their directory partition for improved activation perf (while still being much better balanced than
RandomPlacement
, since the directory partitioning scheme has a very low chance of significant imbalance). It also reduces the grain directory recovery costs in the case of a silo crash.The text was updated successfully, but these errors were encountered: