多群集支持

在 v2 中删除了多群集支持。 以下文档与 Orleans v1 相关。 Orleans v.1.3.0 添加了将多个 Orleans 群集联合到松散连接的多群集(充当单个服务)的支持。 多群集有助于以一个服务的形式实现异地分布,即,可以更轻松地在全球多个数据中心运行 Orleans 应用程序。 此外,可以在单个数据中心运行多群集以获得更好的故障隔离和性能隔离。

所有机制的设计都特别注意以下方面:

  1. 尽量减少群集之间的通信。
  2. 即使其他群集发生故障或不可访问,也能让每个群集自主运行。

配置和操作

下面阐述如何配置和操作多群集。

通信。 群集通过群集内使用的相同 silo 到 silo 连接进行通信。 为了交换状态和配置信息,群集将使用 gossip 机制和 gossip 通道实现。

Silo 配置。 需要配置 silo,以便它们知道自己属于哪个群集(每个群集由唯一的字符串标识)。 此外,需要为每个 silo 配置连接字符串,以便它们能够在启动时连接到一个或多个 gossip 通道

多群集配置注入。 在运行时,服务操作员可以指定和/或更改包含群集 ID 列表的多群集配置,以指定哪些群集是当前多群集的一部分。 这是通过调用任一群集中的管理 grain 来完成的。

多群集 grain

下面阐述如何在应用程序级别使用多群集功能。

全局单实例 Grain。 开发人员可以指示群集何时以及如何协调其有关特定 grain 类的 grain 目录。 GlobalSingleInstanceAttribute 意味着,我们需要与在单个全局群集中运行 Orleans 时相同的行为:也就是说,将所有调用路由到单个激活的 grain。 相反,OneInstancePerClusterAttribute 指示每个群集可以具有其独立激活。 这在不需要群集之间的通信时是适用的。

日志视图 grain(不在 v.1.3.0 中)。 一种特殊类型的 grain,它使用类似于事件溯源的新 API 来同步或持久保存 grain 状态。 它可用于在群集之间以及与存储自动有效地同步 grain 的状态。 由于它的同步算法可以安全地用于可重入 grain,并且针对批处理和复制进行了优化,因此,如果在多个群集中频繁访问某个 grain 和/或频繁将其写入存储,则此 grain 的性能可能优于标准 grain。 对日志视图 grain 的支持目前不是主分支的一部分。 geo-orleans 分支中有一个包含示例和少量文档的预发行版。 早期采用者目前正在生产环境中评估此版本。