ZooKeeperBasedMembershipTable Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
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:
|
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:
|