ZooKeeperBasedMembershipTable Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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:
|
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:
|