Freigeben über


ZooKeeperBasedMembershipTable Klasse

Definition

Implementierung einer Mitgliedschaftstabelle mit 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
Vererbung
ZooKeeperBasedMembershipTable
Implementiert

Hinweise

Eine kurze Übersicht über die verwendeten ZK-Features: Die Daten werden durch eine Struktur von Knoten (ähnlich wie ein Dateisystem) dargestellt. Jeder Knoten wird von einem Pfad adressiert und kann Daten als Bytearray speichern und hat eine Version. Wenn ein Knoten erstellt wird, ist seine Version 0. Nach Updates wird die Version atomisch erhöht. Ein Update kann auch für eine erwartete aktuelle Version bedingt sein. Eine Transaktion kann mehrere Vorgänge enthalten, die atomisch erfolgreich sind oder fehlschlagen. Beim Erstellen eines Zookeeper-Clients kann ein Basispfad festgelegt werden, auf dem alle Vorgänge relativ sind.

In dieser Implementierung: Jede Orleans-Bereitstellung verfügt über einen Knoten /UniqueDeploymentId Jeder Silostatus wird in /UniqueDeploymentId/IP:Port@Gen Jedes Silos IAmAlive wird in /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive IAmAlive gespeichert, da seine Updates bedingungslos sind.

die ZK-Version eines Knotens ist sein ETag: Die Tabellenversion ist die Version von /UniqueDeploymentId, die die Siloeintragsversion ist die Version von /UniqueDeploymentId/IP:Port@Gen

Konstruktoren

ZooKeeperBasedMembershipTable()

Implementierung einer Mitgliedschaftstabelle mit Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

Eigenschaften

IsUpdatable

Gibt an, ob dieser IGatewayListProvider jemals seine zurückgegebenen Informationen aktualisiert oder immer dieselbe GW-Liste zurückgibt. (Derzeit ist nur die statische konfigurationsbasierte StaticGatewayListProvider nicht aktualisierbar. Alle anderen sind.)

MaxStaleness

Gibt an, wie oft dieser IGatewayListProvider aktualisiert wird, um eine Bindung an die maximale Veraltetkeit der zurückgegebenen Informationen zu haben.

Methoden

DeleteMembershipTableEntries(String)

Löscht alle Tabelleneinträge der angegebenen DeploymentId

GetGateways()

Gibt die Liste der Gateways (Silos) zurück, die von einem Client verwendet werden können, um eine Verbindung mit Dem Orleans-Cluster herzustellen. Der Uri befindet sich in Form von: "gwy.tcp://IP:port/Generation". Weitere Informationen zum Uri-Format finden Sie unter Utils.ToGatewayUri und Utils.ToSiloAddress.

InitializeGatewayListProvider(ClientConfiguration, Logger)

Initialisiert den ZooKeeper-basierten Gatewayanbieter

InitializeMembershipTable(GlobalConfiguration, Boolean, Logger)

Initialisiert die auf ZooKeeper basierende Mitgliedschaftstabelle.

InsertRow(MembershipEntry, TableVersion)

Atomisch versucht, einen neuen MembershipEntry für einen Silo einzufügen (hinzufügen) und auch die TableVersion zu aktualisieren. Wenn der Vorgang erfolgreich verläuft, werden die folgenden Änderungen an der Tabelle vorgenommen:

  1. Neue MitgliedschaftEntry wird der Tabelle hinzugefügt.
  2. Der neu hinzugefügte MembershipEntry wird auch mit dem neuen automatisch generierten eTag hinzugefügt.
  3. TableVersion.Version in der Tabelle wird auf die neue TableVersion.Version aktualisiert.
  4. TableVersion etag in der Tabelle wird auf das neue automatisch generierte eTag aktualisiert. Alle diese Änderungen an der Tabelle, Einfügen einer neuen Zeile und Aktualisierung der Tabellenversion und der zugehörigen etags sollten atomisch auftreten oder atomlos ohne Nebenwirkungen fehlschlagen. Der Vorgang sollte in den folgenden Bedingungen fehlschlagen:
  5. Ein MembershipEntry für ein bestimmtes Silo ist bereits in der Tabelle vorhanden.
  6. Fehler beim Aktualisieren der TableVersion, da das angegebene TableVersion-etag (wie durch die TableVersion.VersionEtag-Eigenschaft angegeben) nicht mit dem TableVersion etag in der Tabelle übereinstimmte.
ReadAll()

Atomisch liest den vollständigen Inhalt der Mitgliedschaftstabelle vor. Die zurückgegebene MembershipTableData enthält alle MitgliedschaftEntry-Einträge für alle Silos in der Tabelle und die TableVersion für diese Tabelle. Die MembershipEntries und tableVersion müssen atomisch gelesen werden.

ReadRow(SiloAddress)

Atomisch liest die Mitgliedschaftstabelle Informationen zu einem bestimmten Silo vor. Die zurückgegebene MembershipTableData enthält einen MembershipEntry-Eintrag für ein bestimmtes Silo und die TableVersion für diese Tabelle. Die MembershipEntry und TableVersion müssen atomisch gelesen werden.

UpdateIAmAlive(MembershipEntry)

Aktualisierungen den IAmAlive-Teil (Spalte) des MembershipEntry für dieses Silo. Dieser Vorgang sollte nur das IAmAlive-Collumn aktualisieren und keine anderen Spalten ändern. Dieser Vorgang ist ein "dirty write" oder "in place update" und wird ohne etag-Überprüfung ausgeführt. Hinsichtlich der eTags-Aktualisierung: Dieser Vorgang kann das mit der angegebenen Silozeile verknüpfte eTag automatisch aktualisieren, muss aber nicht. Es kann auch das etag nicht geändert lassen ("dirty write"). In Bezug auf TableVersion: Dieser Vorgang sollte die TableVersion der Tabelle nicht ändern. Es sollte es unberührt lassen. Es gibt kein Szenario, in dem dieser Vorgang aufgrund von tabellensemantischen Gründen fehlschlägt. Es kann nur aufgrund von Netzwerkproblemen oder Tabellen nicht verfügbar sein.

UpdateRow(MembershipEntry, String, TableVersion)

Atomisch versucht, die MembershipEntry für ein Silo zu aktualisieren und auch die TableVersion zu aktualisieren. Wenn der Vorgang erfolgreich verläuft, werden die folgenden Änderungen an der Tabelle vorgenommen:

  1. Der MembershipEntry für dieses Silo wird auf den neuen MembershipEntry aktualisiert (der alte Eintrag wird vollständig durch den neuen Eintrag ersetzt)
  2. Das eTag für die aktualisierte MembershipEntry wird auch eTag mit dem neuen eindeutigen automatisch generierten eTag sein.
  3. TableVersion.Version in der Tabelle wird auf die neue TableVersion.Version aktualisiert.
  4. TableVersion etag in der Tabelle wird auf das neue automatisch generierte eTag aktualisiert. Alle diese Änderungen an der Tabelle, Aktualisieren einer neuen Zeile und Aktualisierung der Tabellenversion und der zugehörigen etags sollten atomisch auftreten oder atomlos ohne Nebenwirkungen fehlschlagen. Der Vorgang sollte in den folgenden Bedingungen fehlschlagen:
  5. Ein MembershipEntry für ein bestimmtes Silo ist in der Tabelle nicht vorhanden.
  6. Ein MembershipEntry für ein bestimmtes Silo ist in der Tabelle vorhanden, sein Etag in der Tabelle stimmt jedoch nicht mit dem bereitgestellten etag überein.
  7. Fehler beim Aktualisieren der TableVersion, da das angegebene TableVersion-etag (wie durch die TableVersion.VersionEtag-Eigenschaft angegeben) nicht mit dem TableVersion etag in der Tabelle übereinstimmte.

Gilt für: