Condividi tramite


ZooKeeperBasedMembershipTable Classe

Definizione

Implementazione della tabella di appartenenza con 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
Ereditarietà
ZooKeeperBasedMembershipTable
Implementazioni

Commenti

Breve panoramica delle funzionalità ZK usate: i dati sono rappresentati da un albero di nodi (simile a un file system). Ogni nodo viene indirizzato da un percorso e può contenere i dati come matrice di byte e ha una versione. Quando viene creato un nodo, la versione è 0. Dopo gli aggiornamenti, la versione viene incrementata in modo atomico. Un aggiornamento può anche essere condizionale in una versione corrente prevista. Una transazione può contenere diverse operazioni, che hanno esito positivo o negativo in modo atomico. quando si crea un client zookeeper, è possibile impostare un percorso di base in cui tutte le operazioni sono relative.

In questa implementazione: ogni distribuzione di Orleans ha un nodo /UniqueDeploymentId Lo stato di ogni silo viene salvato in /UniqueDeploymentId/IP:Port@Gen Ogni silo IAmAlive viene salvato in /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive viene salvato in un nodo separato perché gli aggiornamenti sono incondizionato.

La versione ZK di un nodo è il relativo ETag: la versione della tabella è la versione di /UniqueDeploymentId la versione della voce silo è la versione di /UniqueDeploymentId/IP:Port@Gen

Costruttori

ZooKeeperBasedMembershipTable()

Implementazione della tabella di appartenenza con Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

Proprietà

IsUpdatable

Specifica se questo IGatewayListProvider aggiorna le informazioni restituite o restituisce sempre lo stesso elenco di gw. (attualmente solo la configurazione statica basata su StaticGatewayListProvider non è aggiornabile. Tutti gli altri sono.

MaxStaleness

Specifica la frequenza con cui viene aggiornato questo IGatewayListProvider, per avere un limite al massimo decadimento delle informazioni restituite.

Metodi

DeleteMembershipTableEntries(String)

Elimina tutte le voci di tabella del valore deploymentId specificato

GetGateways()

Restituisce l'elenco di gateway (silo) che possono essere usati da un client per connettersi al cluster Orleans. L'URI è sotto forma di: "gwy.tcp://IP:port/Generation". Per altre informazioni sul formato URI, vedere Utils.ToGatewayUri e Utils.ToSiloAddress.

InitializeGatewayListProvider(ClientConfiguration, Logger)

Inizializza il provider di gateway basato su ZooKeeper

InitializeMembershipTable(GlobalConfiguration, Boolean, Logger)

Inizializza la tabella di appartenenza basata su ZooKeeper.

InsertRow(MembershipEntry, TableVersion)

Tenta in modo atomico di inserire (aggiungere) un nuovo MembershipEntry per un silo e di aggiornare anche TableVersion. Se l'operazione ha esito positivo, verranno apportate le modifiche seguenti alla tabella:

  1. La nuova membershipEntry verrà aggiunta alla tabella.
  2. L'elemento MembershipEntry appena aggiunto verrà aggiunto anche con il nuovo eTag generato automaticamente univoco.
  3. TableVersion.Version nella tabella verrà aggiornato alla nuova table TableVersion.Version.
  4. L'etag TableVersion nella tabella verrà aggiornato al nuovo eTag generato automaticamente. Tutte le modifiche apportate alla tabella, l'inserimento di una nuova riga e l'aggiornamento della versione della tabella e degli etag associati, devono verificarsi in modo atomico o avere esito negativo in modo atomico senza effetti collaterali. L'operazione deve avere esito negativo in ognuna delle condizioni seguenti:
  5. Una membershipEntry per un determinato silo esiste già nella tabella
  6. L'aggiornamento di TableVersion non è riuscito perché l'etag TableVersion specificato (come specificato dalla proprietà TableVersion.VersionEtag) non corrisponde all'etag TableVersion nella tabella.
ReadAll()

Legge in modo atomico il contenuto completo della tabella di appartenenza. MembershipTableData restituito include tutte le voci MembershipEntry per tutti i silo della tabella e TableVersion per questa tabella. Le voci MembershipEntries e TableVersion devono essere lette in modo atomico.

ReadRow(SiloAddress)

Legge in modo atomico le informazioni sulla tabella di appartenenza su un determinato silo. MembershipTableData restituito include una voce MembershipEntry per un determinato silo e TableVersion per questa tabella. Le proprietà MembershipEntry e TableVersion devono essere lette in modo atomico.

UpdateIAmAlive(MembershipEntry)

Aggiornamenti la parte IAmAlive (colonna) di MembershipEntry per questo silo. Questa operazione deve aggiornare solo le regole di confronto IAmAlive e non modificare altre colonne. Questa operazione è una "scrittura dirty" o "aggiornamento sul posto" e viene eseguita senza convalida etag. Per quanto riguarda l'aggiornamento di eTag: questa operazione può aggiornare automaticamente l'eTag associato alla riga silo specificata, ma non è necessario. Può anche lasciare l'etag non modificato ("scrittura dirty"). Per quanto riguarda TableVersion: questa operazione non deve modificare tableVersion della tabella. Dovrebbe lasciarlo invariato. Non esiste uno scenario in cui questa operazione potrebbe non riuscire a causa di motivi semantici di tabella. Può avere esito negativo solo a causa di problemi di rete o di indisponibilità della tabella.

UpdateRow(MembershipEntry, String, TableVersion)

Tenta in modo atomico di aggiornare MembershipEntry per un silo e aggiornare anche TableVersion. Se l'operazione ha esito positivo, verranno apportate le modifiche seguenti alla tabella:

  1. MembershipEntry per questo silo verrà aggiornato al nuovo MembershipEntry (la voce precedente verrà completamente sostituito dalla nuova voce)
  2. Anche l'eTag per l'membershipEntry aggiornato sarà eTag con il nuovo eTag generato automaticamente.
  3. TableVersion.Version nella tabella verrà aggiornato alla nuova table TableVersion.Version.
  4. L'etag TableVersion nella tabella verrà aggiornato al nuovo eTag generato automaticamente. Tutte le modifiche apportate alla tabella, l'aggiornamento di una nuova riga e l'aggiornamento della versione della tabella e degli etag associati, devono verificarsi in modo atomico o avere esito negativo in modo atomico senza effetti collaterali. L'operazione deve avere esito negativo in ognuna delle condizioni seguenti:
  5. Una membershipEntry per un determinato silo non esiste nella tabella
  6. Esiste un elemento MembershipEntry per un determinato silo nella tabella, ma il relativo etag nella tabella non corrisponde all'etag specificato.
  7. L'aggiornamento di TableVersion non è riuscito perché l'etag TableVersion specificato (come specificato dalla proprietà TableVersion.VersionEtag) non corrisponde all'etag TableVersion nella tabella.

Si applica a