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, 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:
|
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:
|