Partilhar via


ZooKeeperBasedMembershipTable Classe

Definição

Uma implementação de Tabela de Associação usando o 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
Herança
ZooKeeperBasedMembershipTable
Implementações

Comentários

Uma breve visão geral dos recursos do ZK usados: os dados são representados por uma árvore de nós (semelhante a um sistema de arquivos). Cada nó é endereçado por um caminho e pode conter dados como uma matriz de bytes e tem uma versão. Quando um nó é criado, sua versão é 0. Após as atualizações, a versão é incrementada atomicamente. Uma atualização também pode ser condicional em uma versão atual esperada. Uma transação pode conter várias operações, que têm êxito ou falham atomicamente. ao criar um cliente zookeeper, é possível definir um caminho base ao qual todas as operações são relativas.

Nesta implementação: cada implantação do Orleans tem um nó /UniqueDeploymentId O estado de cada Silo é salvo em /UniqueDeploymentId/IP:Port@Gen Cada IAmAlive de Silo é salvo em /UniqueDeploymentId/IP:Port@Gen/IAmAlive IAmAlive é salvo em um nó separado porque suas atualizações são incondicionales.

A versão ZK de um nó é sua ETag: a versão da tabela é a versão de /UniqueDeploymentId, a versão de entrada do silo é a versão de /UniqueDeploymentId/IP:Port@Gen

Construtores

ZooKeeperBasedMembershipTable(ILogger<ZooKeeperBasedMembershipTable>, IOptions<ZooKeeperClusteringSiloOptions>, IOptions<ClusterOptions>)

Uma implementação de Tabela de Associação usando o Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

Métodos

CleanupDefunctSiloEntries(DateTimeOffset)

Uma implementação de Tabela de Associação usando o Apache Zookeeper 3.4.6 https://zookeeper.apache.org/doc/r3.4.6/

DeleteMembershipTableEntries(String)

Exclui todas as entradas de tabela da clusterId fornecida

InitializeMembershipTable(Boolean)

Inicializa a tabela de associação baseada no ZooKeeper.

InsertRow(MembershipEntry, TableVersion)

Tenta atomicamente inserir (adicionar) um novo MembershipEntry para um silo e também atualizar o TableVersion. Se a operação for bem-sucedida, as seguintes alterações serão feitas na tabela:

  1. Novo MembershipEntry será adicionado à tabela.
  2. O MembershipEntry recém-adicionado também será adicionado com a nova eTag gerada automaticamente.
  3. TableVersion.Version na tabela será atualizada para a nova TableVersion.Version.
  4. A etag TableVersion na tabela será atualizada para a nova eTag gerada automaticamente. Todas essas alterações na tabela, a inserção de uma nova linha e a atualização da versão da tabela e das etags associadas devem ocorrer atomicamente ou falhar atomicamente sem efeitos colaterais. A operação deve falhar em cada uma das seguintes condições:
  5. Um MembershipEntry para um determinado silo já existe na tabela
  6. Falha na atualização do TableVersion desde que a etag TableVersion fornecida (conforme especificado pela propriedade TableVersion.VersionEtag) não correspondeu à etag TableVersion na tabela.
ReadAll()

Lê atomicamente o conteúdo completo da Tabela de Associação. O MembershipTableData retornado inclui todas as entradas MembershipEntry para todos os silos na tabela e TableVersion para esta tabela. MembershipEntries e TableVersion precisam ser lidos atomicamente.

ReadRow(SiloAddress)

Lê atomicamente as informações da Tabela de Associação sobre um determinado silo. O MembershipTableData retornado inclui uma entrada MembershipEntry para um determinado silo e TableVersion para esta tabela. O MembershipEntry e o TableVersion precisam ser lidos atomicamente.

UpdateIAmAlive(MembershipEntry)

Atualizações a parte IAmAlive (coluna) do MembershipEntry para esse silo. Essa operação só deve atualizar a coluna IAmAlive e não alterar outras colunas. Essa operação é uma "gravação suja" ou "atualização in-loco" e é executada sem validação de etag. Com relação à atualização de eTags: essa operação pode atualizar automaticamente a eTag associada à linha de silo fornecida, mas não precisa. Ele também pode deixar a etag não alterada ("gravação suja"). Em relação a TableVersion: essa operação não deve alterar o TableVersion da tabela. Ele deve deixá-lo intocado. Não há nenhum cenário em que essa operação possa falhar devido a motivos semânticos de tabela. Ele só pode falhar devido a problemas de rede ou indisponibilidade de tabela.

UpdateRow(MembershipEntry, String, TableVersion)

Tenta atomicamente atualizar o MembershipEntry para um silo e também atualizar o TableVersion. Se a operação for bem-sucedida, as seguintes alterações serão feitas na tabela:

  1. O MembershipEntry desse silo será atualizado para o novo MembershipEntry (a entrada antiga será totalmente substituída pela nova entrada)
  2. A eTag da MembershipEntry atualizada também será eTag com a nova eTag gerada automaticamente.
  3. TableVersion.Version na tabela será atualizada para a nova TableVersion.Version.
  4. A etag TableVersion na tabela será atualizada para a nova eTag gerada automaticamente. Todas essas alterações na tabela, a atualização de uma nova linha e a atualização da versão da tabela e das etags associadas devem ocorrer atomicamente ou falhar atomicamente sem efeitos colaterais. A operação deve falhar em cada uma das seguintes condições:
  5. Um MembershipEntry para um determinado silo não existe na tabela
  6. Um MembershipEntry para um determinado silo existe na tabela, mas sua etag na tabela não corresponde à etag fornecida.
  7. Falha na atualização do TableVersion desde que a etag TableVersion fornecida (conforme especificado pela propriedade TableVersion.VersionEtag) não correspondeu à etag TableVersion na tabela.

Aplica-se a