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

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

Metodi

CleanupDefunctSiloEntries(DateTimeOffset)

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

DeleteMembershipTableEntries(String)

Elimina tutte le voci di tabella del clusterId specificato

InitializeMembershipTable(Boolean)

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 la colonna 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à sostituita completamente 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