Partager via


ZooKeeperBasedMembershipTable Classe

Définition

Implémentation d’une table d’appartenances à l’aide d’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
Héritage
ZooKeeperBasedMembershipTable
Implémente

Remarques

Vue d’ensemble des fonctionnalités ZK utilisées : les données sont représentées par une arborescence de nœuds (similaire à un système de fichiers). Chaque nœud est traité par un chemin d’accès et peut contenir des données sous forme de tableau d’octets et a une version. Lorsqu’un nœud est créé, sa version est 0. Lors des mises à jour, la version est incrémentée atomiquement. Une mise à jour peut également être conditionnelle à une version actuelle attendue. Une transaction peut contenir plusieurs opérations, qui réussissent ou échouent atomiquement. Lors de la création d’un client zookeeper, vous pouvez définir un chemin de base où toutes les opérations sont relatives.

Dans cette implémentation : Chaque déploiement Orleans a un nœud /UniqueDeploymentId L’état de chaque silo est enregistré dans /UniqueDeploymentId/IP:Port@Gen IAmAlive de chaque silo est enregistré dans /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive est enregistré dans un nœud distinct, car ses mises à jour sont inconditionnelles.

La version ZK d’un nœud est son ETag : la version de table est la version de /UniqueDeploymentId, la version d’entrée de silo est la version de /UniqueDeploymentId/IP:Port@Gen

Constructeurs

ZooKeeperBasedMembershipTable()

Implémentation d’une table d’appartenances à l’aide d’Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

Propriétés

IsUpdatable

Spécifie si cet IGatewayListProvider actualise les informations retournées ou retourne toujours la même liste gw. (Actuellement, seule la configuration statique StaticGatewayListProvider n’est pas modifiable. Tous les autres sont.)

MaxStaleness

Spécifie la fréquence à laquelle ce IGatewayListProvider est actualisé pour avoir une limite sur l’obsolescence maximale de ses informations renvoyées.

Méthodes

DeleteMembershipTableEntries(String)

Supprime toutes les entrées de table de l’id de déploiement donné

GetGateways()

Retourne la liste des passerelles (silos) qui peuvent être utilisées par un client pour se connecter au cluster Orleans. L’URI se présente sous la forme : « gwy.tcp://IP:port/Generation ». Pour plus d’informations sur le format d’URI, consultez Utils.ToGatewayUri et Utils.ToSiloAddress.

InitializeGatewayListProvider(ClientConfiguration, Logger)

Initialise le fournisseur de passerelle basé sur ZooKeeper

InitializeMembershipTable(GlobalConfiguration, Boolean, Logger)

Initialise la table d’appartenance basée sur ZooKeeper.

InsertRow(MembershipEntry, TableVersion)

Tente atomiquement d’insérer (ajouter) un nouvel MembershipEntry pour un silo et de mettre également à jour tableVersion. Si l’opération réussit, les modifications suivantes sont apportées à la table :

  1. La nouvelle propriété MembershipEntry sera ajoutée à la table.
  2. L’élément MembershipEntry nouvellement ajouté sera également ajouté avec le nouvel eTag unique généré automatiquement.
  3. TableVersion.Version dans la table sera mis à jour vers le nouveau TableVersion.Version.
  4. L’etag TableVersion dans la table sera mis à jour vers le nouvel eTag unique généré automatiquement. Toutes ces modifications apportées à la table, insertion d’une nouvelle ligne et mise à jour de la version de la table et des etags associés, doivent se produire atomiquement ou échouer atomiquement sans effets secondaires. L’opération doit échouer dans chacune des conditions suivantes :
  5. Un MembershipEntry pour un silo donné existe déjà dans la table
  6. La mise à jour de tableVersion a échoué, car l’etag TableVersion donnée (comme spécifié par la propriété TableVersion.VersionEtag) ne correspondait pas à l’etag TableVersion dans la table.
ReadAll()

Lit atomiquement le contenu complet de la table d’appartenances. L’élément MembershipTableData retourné inclut toute l’entrée MembershipEntry pour tous les silos de la table et la TableVersion pour cette table. MembershipEntries et TableVersion doivent être lus atomiquement.

ReadRow(SiloAddress)

Lit atomiquement les informations de la table d’appartenance sur un silo donné. Le MembershipTableData retourné inclut une entrée MembershipEntry pour un silo donné et la TableVersion pour cette table. MembershipEntry et TableVersion doivent être lus atomiquement.

UpdateIAmAlive(MembershipEntry)

Mises à jour la partie IAmAlive (colonne) de MembershipEntry pour ce silo. Cette opération doit uniquement mettre à jour le collumn IAmAlive et ne pas modifier les autres colonnes. Cette opération est une « écriture incorrecte » ou une « mise à jour sur place » et est effectuée sans validation etag. En ce qui concerne la mise à jour des eTags : cette opération peut mettre à jour automatiquement l’eTag associé à la ligne de silo donnée, mais elle n’est pas nécessaire. Il peut également laisser l’etag non modifié (« écriture incorrecte »). En ce qui concerne TableVersion : cette opération ne doit pas modifier la TableVersion de la table. Il devrait le laisser intact. Il n’existe aucun scénario dans lequel cette opération pourrait échouer pour des raisons sémantiques de table. Il ne peut échouer qu’en raison de problèmes réseau ou d’indisponibilité de table.

UpdateRow(MembershipEntry, String, TableVersion)

Tente atomiquement de mettre à jour MembershipEntry pour un silo et de mettre également à jour TableVersion. Si l’opération réussit, les modifications suivantes sont apportées à la table :

  1. L’MembershipEntry de ce silo sera mis à jour vers la nouvelle MembershipEntry (l’ancienne entrée sera entièrement substituée par la nouvelle entrée).
  2. L’eTag pour l’élément MembershipEntry mis à jour sera également eTag avec le nouvel eTag généré automatiquement unique.
  3. TableVersion.Version dans la table sera mis à jour vers le nouveau TableVersion.Version.
  4. L’etag TableVersion dans la table sera mis à jour vers le nouvel eTag unique généré automatiquement. Toutes ces modifications apportées à la table, à savoir la mise à jour d’une nouvelle ligne et la mise à jour de la version de la table et des etags associés, doivent se produire atomiquement ou échouer atomiquement sans effets secondaires. L’opération doit échouer dans chacune des conditions suivantes :
  5. Un MembershipEntry pour un silo donné n’existe pas dans la table
  6. Un MembershipEntry pour un silo donné existe dans la table, mais son etag dans la table ne correspond pas à l’etag fourni.
  7. La mise à jour de tableVersion a échoué, car l’etag TableVersion donnée (comme spécifié par la propriété TableVersion.VersionEtag) ne correspondait pas à l’etag TableVersion dans la table.

S’applique à