ZooKeeperBasedMembershipTable 类

定义

使用 Apache Zookeeper 3.4.6 的成员资格表实现 https://zookeeper.apache.org/doc/r3.4.6/

public class ZooKeeperBasedMembershipTable : Orleans.IMembershipTable
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
Public Class ZooKeeperBasedMembershipTable
Implements IMembershipTable
继承
ZooKeeperBasedMembershipTable
实现

注解

使用的 ZK 功能的简要概述:数据由与文件系统) 类似的节点树表示 (。 每个节点都按路径进行寻址,可以将数据保存为字节数组并具有版本。 创建节点时,其版本为 0。 更新后,版本会原子递增。 更新也可以针对预期的当前版本有条件。 事务可以保留多个操作,这些操作以原子方式成功或失败。 创建 zookeeper 客户端时,可以设置一个相对于所有操作的基本路径。

在此实现中:每个新奥尔良部署都有一个节点 /UniqueDeploymentId Every Silo 的状态保存在 /UniqueDeploymentId/IP:Port@Gen每个接收器的 IAmAlive 保存在 /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive 中,因为它的更新是无条件的。

节点的 ZK 版本是其 ETag:表版本是 /UniqueDeploymentId 的版本,接收器条目版本是 /UniqueDeploymentId/IP:Port@Gen

构造函数

ZooKeeperBasedMembershipTable(ILogger<ZooKeeperBasedMembershipTable>, IOptions<ZooKeeperClusteringSiloOptions>, IOptions<ClusterOptions>)

使用 Apache Zookeeper 3.4.6 的成员资格表实现 https://zookeeper.apache.org/doc/r3.4.6/

方法

CleanupDefunctSiloEntries(DateTimeOffset)

使用 Apache Zookeeper 3.4.6 的成员资格表实现 https://zookeeper.apache.org/doc/r3.4.6/

DeleteMembershipTableEntries(String)

删除给定 clusterId 的所有表条目

InitializeMembershipTable(Boolean)

初始化基于 ZooKeeper 的成员身份表。

InsertRow(MembershipEntry, TableVersion)

原子尝试插入 (添加) 一个接收器的新 MembershipEntry,并更新 TableVersion。 如果操作成功,将对表进行以下更改:

  1. 新的 MembershipEntry 将添加到表中。
  2. 新添加的 MembershipEntry 也将随新的唯一自动生成的 eTag 一起添加。
  3. 表中的 TableVersion.Version 将更新为新的 TableVersion.Version。
  4. 表中的 TableVersion etag 将更新为新的唯一自动生成的 eTag。 对表所做的所有这些更改、插入新行和更新表版本和相关 etag 时,应以原子方式发生,或者以原子方式失败,且无副作用。 该操作应在以下每种情况下失败:
  5. 表中已存在给定接收器的 MembershipEntry
  6. 由于由 TableVersion.VersionEtag 属性指定的给定 TableVersion etag () 与表中的 TableVersion etag 不匹配,因此 TableVersion 更新失败。
ReadAll()

以原子方式读取成员资格表的完整内容。 返回的 MembershipTableData 包括表中所有孤岛的所有 MembershipEntry 条目和此表的 TableVersion。 MembershipEntries 和 TableVersion 必须以原子方式读取。

ReadRow(SiloAddress)

原子读取有关给定孤岛的成员身份表信息。 返回的 MembershipTableData 包括给定接收器的一个 MembershipEntry 条目,以及此表的 TableVersion。 MembershipEntry 和 TableVersion 必须以原子方式读取。

UpdateIAmAlive(MembershipEntry)

汇报此接收器的 MembershipEntry 的 IAmAlive 部分 (列) 。 此操作应仅更新 IAmAlive 列,而不应更改其他列。 此操作是“脏写”或“就地更新”,在没有 etag 验证的情况下执行。 对于 eTags 更新:此操作可能会自动更新与给定的孤岛行关联的 eTag,但它不必。 它还会使 etag 不会更改 (“脏写入”) 。 对于 TableVersion:此操作不应更改表的 TableVersion。 它应该保持不变。 不存在由于表语义原因,此操作可能失败的情况。 它只能由于网络问题或表不可用而失败。

UpdateRow(MembershipEntry, String, TableVersion)

原子尝试更新一个接收器的 MembershipEntry,并更新 TableVersion。 如果操作成功,将对表进行以下更改:

  1. 此接收器的 MembershipEntry 将更新为新的 MembershipEntry (旧条目将完全替换为新条目)
  2. 更新的 MembershipEntry 的 eTag 也将是带有新的唯一自动生成 eTag 的 eTag。
  3. 表中的 TableVersion.Version 将更新为新的 TableVersion.Version。
  4. 表中的 TableVersion etag 将更新为新的唯一自动生成的 eTag。 对表所做的所有这些更改、更新新行和更新表版本和相关 etag 时,应以原子方式发生,或者以原子方式失败,且不会产生副作用。 该操作应在以下每种情况下失败:
  5. 表中不存在给定接收器的 MembershipEntry
  6. 给定接收器的 MembershipEntry 存在于表中,但其 etag 与提供的 etag 不匹配。
  7. 由于由 TableVersion.VersionEtag 属性指定的给定 TableVersion etag () 与表中的 TableVersion etag 不匹配,因此 TableVersion 更新失败。

适用于