Compartilhar 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, Orleans.Messaging.IGatewayListProvider
type ZooKeeperBasedMembershipTable = class
    interface IMembershipTable
    interface IGatewayListProvider
Public Class ZooKeeperBasedMembershipTable
Implements IGatewayListProvider, 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 armazenar dados como uma matriz de bytes e tem uma versão. Quando um nó é criado, sua versão é 0. Após 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 O IAmAlive de cada 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()

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

Propriedades

IsUpdatable

Especifica se esse IGatewayListProvider atualiza suas informações retornadas ou sempre retorna a mesma lista gw. (atualmente, apenas o StaticGatewayListProvider baseado em configuração estática não é atualizável. Todos os outros são.)

MaxStaleness

Especifica a frequência com que esse IGatewayListProvider é atualizado, para ter um limite de desatualização máxima de suas informações retornadas.

Métodos

DeleteMembershipTableEntries(String)

Exclui todas as entradas de tabela da deploymentId fornecida

GetGateways()

Retorna a lista de gateways (silos) que podem ser usados por um cliente para se conectar ao cluster do Orleans. O Uri está na forma de: "gwy.tcp://IP:port/Generation". Consulte Utils.ToGatewayUri e Utils.ToSiloAddress para obter mais detalhes sobre o formato Uri.

InitializeGatewayListProvider(ClientConfiguration, Logger)

Inicializa o provedor de gateway baseado no ZooKeeper

InitializeMembershipTable(GlobalConfiguration, Boolean, Logger)

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

InsertRow(MembershipEntry, TableVersion)

Atomicamente tenta 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. New 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á atualizado para o novo 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 o TableVersion para esta tabela. O MembershipEntries e o 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 a 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 o collumn 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. Em 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)

Atomicamente tenta 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 para esse silo será atualizado para o novo MembershipEntry (a entrada antiga será totalmente substituida pela nova entrada)
  2. A eTag para a MembershipEntry atualizada também será eTag com a nova eTag gerada automaticamente.
  3. TableVersion.Version na tabela será atualizado para o novo TableVersion.Version.
  4. A etag TableVersion na tabela será atualizada para a nova eTag gerada automaticamente. Todas essas alterações na tabela, atualização de uma nova linha e 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