次の方法で共有


ZooKeeperBasedMembershipTable クラス

定義

Apache Zookeeper 3.4.6 を使用したメンバーシップ テーブルの実装 https://zookeeper.apache.org/doc/r3.4.6/

public class ZooKeeperBasedMembershipTable : Orleans.IMembershipTable, Orleans.Messaging.IGatewayListProvider
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
    interface IGatewayListProvider
Public Class ZooKeeperBasedMembershipTable
Implements IGatewayListProvider, IMembershipTable
継承
ZooKeeperBasedMembershipTable
実装

注釈

使用される ZK 機能の概要: データはノードのツリー (ファイル システムと同様) で表されます。 すべてのノードはパスによってアドレス指定され、データをバイト配列として保持でき、バージョンがあります。 ノードが作成されると、そのバージョンは 0 になります。 更新時に、バージョンはアトミックにインクリメントされます。 更新プログラムは、予想される現在のバージョンに対して条件付きにすることができます。 トランザクションは、成功または失敗する複数の操作をアトミックに保持できます。 zookeeper クライアントを作成するときに、すべての操作が 相対的なベース パスを設定できます。

この実装では、すべての Orleans デプロイにノード /UniqueDeploymentId が存在します。すべてのサイロの状態は /UniqueDeploymentId/IP:Port@Gen すべてのサイロの IAmAlive が /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive に保存されます。更新は無条件であるため、別のノードに保存されます。

ノードの ZK バージョンは ETag です。テーブル バージョンは /UniqueDeploymentId のバージョンであり、サイロ エントリ のバージョンは /UniqueDeploymentId/IP:Port@Gen

コンストラクター

ZooKeeperBasedMembershipTable()

Apache Zookeeper 3.4.6 を使用したメンバーシップ テーブルの実装 https://zookeeper.apache.org/doc/r3.4.6/

プロパティ

IsUpdatable

この IGatewayListProvider が返された情報を更新するか、常に同じ gw リストを返すかを指定します。 (現在、静的構成ベースの StaticGatewayListProvider のみが更新できません。その他はすべてです。)

MaxStaleness

この IGatewayListProvider を更新する頻度を指定します。この IGatewayListProvider は、返される情報の最大制約にバインドされます。

メソッド

DeleteMembershipTableEntries(String)

指定された deploymentId のすべてのテーブル エントリを削除します

GetGateways()

クライアントが Orleans クラスターに接続するために使用できるゲートウェイ (サイロ) の一覧を返します。 Uri は、"gwy.tcp://IP:port/Generation" の形式です。 Uri 形式の詳細については、「Utils.ToGatewayUri」および「Utils.ToSiloAddress」を参照してください。

InitializeGatewayListProvider(ClientConfiguration, Logger)

ZooKeeper ベースのゲートウェイ プロバイダーを初期化します

InitializeMembershipTable(GlobalConfiguration, Boolean, Logger)

ZooKeeper ベースのメンバーシップ テーブルを初期化します。

InsertRow(MembershipEntry, TableVersion)

アトミックに、1 つのサイロに対して新しい MembershipEntry を挿入 (追加) し、TableVersion も更新しようとします。 操作が成功すると、テーブルに次の変更が加えられます。

  1. 新しい MembershipEntry がテーブルに追加されます。
  2. 新しく追加された MembershipEntry も、自動的に生成された新しい一意の eTag と共に追加されます。
  3. テーブル内の TableVersion.Version は、新しい TableVersion.Version に更新されます。
  4. テーブル内の TableVersion etag は、自動的に生成された新しい一意の eTag に更新されます。 テーブルに対するすべての変更、新しい行の挿入、テーブル バージョンと関連する etag の更新は、アトミックに行われるか、副作用なしでアトミックに失敗する必要があります。 操作は、次の各条件で失敗する必要があります。
  5. 特定のサイロの MembershipEntry がテーブルに既に存在する
  6. TableVersion etag (TableVersion.VersionEtag プロパティで指定) がテーブル内の TableVersion etag と一致しないため、TableVersion の更新に失敗しました。
ReadAll()

メンバーシップ テーブルの完全なコンテンツをアトミックに読み取ります。 返された MembershipTableData には、テーブル内のすべてのサイロのすべての MembershipEntry エントリと、このテーブルの TableVersion が含まれます。 MembershipEntries と TableVersion はアトミックに読み取る必要があります。

ReadRow(SiloAddress)

特定のサイロに関するメンバーシップ テーブル情報をアトミックに読み取ります。 返される MembershipTableData には、特定のサイロに対して 1 つの MembershipEntry エントリと、このテーブルの TableVersion が含まれます。 MembershipEntry と TableVersion はアトミックに読み取る必要があります。

UpdateIAmAlive(MembershipEntry)

このサイロの MembershipEntry の IAmAlive パーツ (列) を更新します。 この操作では、IAmAlive 列のみを更新し、他の列を変更しないでください。 この操作は "ダーティ ライト" または "インプレース更新" であり、etag 検証なしで実行されます。 eTag の更新に関して: この操作では、特定のサイロ行に関連付けられている eTag が自動的に更新される可能性がありますが、更新する必要はありません。 また、etag を変更しない ("ダーティ ライト") ままにすることもできます。 TableVersion に関しては、この操作でテーブルの TableVersion を変更しないでください。 それは手つかずのままにする必要があります。 テーブルの意味上の理由により、この操作が失敗する可能性があるシナリオはありません。 ネットワークの問題またはテーブルが利用できないために失敗する可能性があります。

UpdateRow(MembershipEntry, String, TableVersion)

アトミックに、1 つのサイロの 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 etag (TableVersion.VersionEtag プロパティで指定) がテーブル内の TableVersion etag と一致しないため、TableVersion の更新に失敗しました。

適用対象