PreferLocalPlacement 如何在奥尔良运作

How does PreferLocalPlacement works in Orleans

doc没有解释清楚。我想 PreferLocalPlacement 是这样工作的:

当客户端(集群外)向标记为PreferLocalPlacement的grain发送请求时,它选择一个它知道的随机筒仓服务器,并向那里发送请求.

筒仓服务器收到请求后,判断指定标识的grain是否已经激活。如果没有,谷物会在这个筒仓中自动激活。

因此,每个筒仓服务器每个身份最多可以激活 1 个这种谷物类型。

我做对了吗? 提前致谢

您的理解很接近,但遗漏了奥尔良如何发现和放置谷物激活的关键方面。

关键是奥尔良的大多数安置提供商都依赖于 grain 目录。该目录存储当前在哪个服务器上激活哪个grain 的映射。与放置一样,目录也是可配置的。它默认使用 in-cluster 目录,其中存储映射的责任由服务器共享。

Orleans会先检查目录,看看grain当前是否在集群某处被激活,当grain当前没有有效的时候,它只会运行PreferLocalPlacement中的逻辑目录中的条目。

因此,您将在集群中激活一个 grain 实例,而不是每个服务器一个实例。如果您的谷物当前没有活动实例,那么 PreferLocalPlacement 将始终选择当前的本地服务器(或请求首先登陆的服务器),只要它兼容。

额外的细节

“只要能兼容”

集群可以混合使用服务器,每个服务器都加载了一组不同的 grain 程序集。因此,放置提供者需要考虑给定服务器是否 与请求的谷物类型兼容 以及它是否具有 compatible version of the interface which is being requested. If it does not support that grain, then a random compatible server will be chosen instead. For more information, see the documentation on Heterogeneous Clusters.

“大多数展示位置提供商都依赖于 grain 目录”

您可能会问哪些展示位置提供者不依赖于 grain 目录。今天唯一的答案是 [StatelessWorker] 放置,因为 [StatelessWorker] grains 可以有多个实例,即每个服务器可以有任何给定 [StatelessWorker] grain 的可配置数量的本地实例。