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
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
Public Class ZooKeeperBasedMembershipTable
Implements 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(ILogger<ZooKeeperBasedMembershipTable>, IOptions<ZooKeeperClusteringSiloOptions>, IOptions<ClusterOptions>)

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

Methoden

CleanupDefunctSiloEntries(DateTimeOffset)

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

DeleteMembershipTableEntries(String)

Löscht alle Tabelleneinträge der angegebenen ClusterId

InitializeMembershipTable(Boolean)

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 die IAmAlive-Spalte 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: