Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Consul é uma plataforma de descoberta de serviço distribuída, altamente disponível e com reconhecimento de data center, incluindo registro de serviço simples, verificação de integridade, detecção de falhas e armazenamento de chave-valor. É construído com base na premissa de que cada nó no data center executa um agente do Consul, atuando como servidor ou cliente. Cada agente se comunica por meio de um protocolo de boatos escalonável.
Uma visão geral detalhada do Consul, incluindo comparações com soluções semelhantes, está disponível no Que é o Consul?.
Consul é escrito em Go e é código aberto. Os downloads compilados estão disponíveis para macOS X, FreeBSD, Linux, Solaris e Windows.
Por que escolher o Cônsul?
Como provedor de Orleans associação, o Consul é uma boa opção para fornecer soluções locais que não exigem que os clientes tenham infraestrutura existente ou um provedor de TI cooperativo. O Consul é um executável simples leve sem dependências, facilitando a criação em uma solução de middleware. Ao usar o Consul para descobrir, verificar e manter microsserviços, integrar-se completamente à associação de membros Orleans oferece simplicidade e facilidade de operação. O Consul também fornece uma tabela de associação (também conhecida como "Orleans Repositório de Sistema Personalizado") que se integra totalmente ao OrleansGerenciamento de Cluster.
Configurar o Consul
Documentação abrangente sobre como configurar um cluster de Cônsul estável está disponível na documentação do Consul, para que as informações não sejam repetidas aqui. No entanto, por conveniência, este guia mostra como iniciar rapidamente Orleans com um agente independente do Consul.
Crie uma pasta para instalar o Consul (por exemplo, C:\Consul).
Crie uma subpasta: C:\Consul\Data (o Consul não criará esse diretório se ele não existir).
Baixar e descompactar Consul.exe em C:\Consul.
Abra um prompt de comando em C:\Consul e execute o seguinte comando:
./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
No comando anterior:
-
agent
: Instrui o Consul a executar o processo do agente que hospeda os serviços. Sem essa opção, o processo do Consul tenta usar o RPC para configurar um agente em execução. -
-server
: define o agente como um servidor, não como um cliente. (Um cliente do Consul é um agente que hospeda serviços e dados, mas não tem direitos de voto e não pode se tornar o líder do cluster). -
-bootstrap
: o primeiro nó (e somente o primeiro!) em um cluster deve ser inicializado para assumir a liderança do cluster. -
-data-dir [path]
: especifica o caminho em que todos os dados do Consul, incluindo a tabela de associação de cluster, são armazenados. -
-client='0.0.0.0'
: informa ao Consul em qual endereço IP abrir o serviço.
Existem muitos outros parâmetros, incluindo a opção de usar um arquivo de configuração JSON. Consulte a documentação do Consul para obter uma listagem completa.
-
Verifique se o Consul está em execução e pronto para aceitar solicitações de associação de Orleans abrindo o endpoint de serviços no seu navegador em
http://localhost:8500/v1/catalog/services
. Ao funcionar corretamente, o navegador exibe o seguinte JSON:{ "consul": [] }
Configurar Orleans
Para configurar Orleans para usar o Consul como um provedor de associação, o projeto de silo precisa referenciar o pacote NuGet Microsoft.Orleans.Clustering.Consul. Depois de adicionar a referência, configure o provedor de associação no arquivo Program.cs do silo da seguinte maneira:
IHostBuilder builder = Host.CreateDefaultBuilder(args)
.UseOrleans(silo =>
{
silo.UseConsulSiloClustering(options =>
{
// The address of the Consul server
var address = new Uri("http://localhost:8500");
options.ConfigureConsulClient(address);
});
})
.UseConsoleLifetime();
using IHost host = builder.Build();
host.Run();
O código anterior:
- Cria um IHostBuilder utilizando padrões de Host.CreateDefaultBuilder().
- Encadeia uma chamada para UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) configurar o silo Orleans.
- Dadas as chamadas ISiloBuilder, UseConsulSiloClustering.
- Configura o provedor de associação de cluster para usar o Consul, considerando o Consul
address
.
Para configurar o cliente, faça referência ao mesmo pacote NuGet e chame o método de extensão UseConsulClientClustering.
SDK do cliente
Se tiver interesse em usar o Consul para descoberta de serviço, os SDKs do Cliente estarão disponíveis para idiomas mais populares.
Detalhes da implementação
O Provedor de Tabela de Associação usa a funcionalidade de repositório chave/valor do Consul com operações CAS (Check-And-Set). Quando cada Silo inicia, ele registra duas entradas chave-valor: uma contendo detalhes do Silo e outra registrando a última vez que o Silo reportou que estava ativo. Este último refere-se a entradas de diagnóstico "Estou vivo", não pulsações de detecção de falha, que são enviadas diretamente entre silos e não são gravadas na tabela. Todas as gravações na tabela usam o CAS para fornecer controle de simultaneidade, conforme exigido pelo OrleansProtocolo de Gerenciamento de Cluster.
Depois que o Silo for executado, exiba essas entradas em um navegador da Web em http://localhost:8500/v1/kv/?keys&pretty
. A saída é semelhante a esta:
[
"orleans/default/192.168.1.11:11111@43165319",
"orleans/default/192.168.1.11:11111@43165319/iamalive",
"orleans/default/version"
]
Todas as chaves são prefixadas com orleans
. Esse prefixo é codificado no provedor e destina-se a evitar colisões de keyspace com outros usuários do Consul. Recupere informações adicionais para cada chave adicionando seu nome (sem aspas) à raiz do Consul KV em http://localhost:8500/v1/kv/
. Isso apresenta o seguinte JSON:
[
{
"LockIndex": 0,
"Key": "orleans/default/192.168.1.11:11111@43165319",
"Flags": 0,
"Value": "[BASE64 UTF8 Encoded String]",
"CreateIndex": 321,
"ModifyIndex": 322
}
]
A decodificação da cadeia de caracteres codificada Value
em BASE64 UTF-8 fornece os dados reais Orleans de associação:
http://localhost:8500/v1/KV/orleans/default/[SiloAddress]
{
"Hostname": "[YOUR_MACHINE_NAME]",
"ProxyPort": 30000,
"StartTime": "2023-05-15T14:22:00.004977Z",
"Status": 3,
"SiloName": "Silo_fcad0",
"SuspectingSilos": []
}
http://localhost:8500/v1/KV/orleans/default/[SiloAddress]/IAmAlive
"2023-05-15T14:27:01.1832828Z"
Quando os clientes se conectam, eles leem os KVs para todos os silos no cluster em uma solicitação HTTP GET usando o URI http://localhost:8500/v1/KV/orleans/default/?recurse
.
Limitações
Lembre-se de algumas limitações ao usar o Consul como um provedor de associação.
Orleans protocolo de associação estendida (versão da tabela e ETag)
Atualmente, o Consul KV não suporta atualizações atômicas. Portanto, o Provedor de Associação do Orleans Consul implementa apenas o Orleans protocolo de associação básico, conforme descrito no gerenciamento de cluster em Orleans. Ele não dá suporte ao Protocolo de Associação Estendida. Esse protocolo estendido foi introduzido como uma medida suplementar de validação de conectividade de silo, embora não essencial, e como base para funcionalidades ainda não implementadas.
Vários datacenters
Atualmente, os pares chave-valor no Consul não são replicados entre data centers do Consul. Existe um projeto separado para resolver esse esforço de replicação, mas ainda não foi provado que ele dá suporte Orleans.
Ao executar no Windows
Quando o Consul é iniciado no Windows, ele registra a seguinte mensagem:
==> WARNING: Windows is not recommended as a Consul server. Do not use in production.
Essa mensagem de aviso é exibida devido à falta de foco no teste durante a execução em um ambiente do Windows, não devido a problemas reais conhecidos. Leia a discussão antes de decidir se o Cônsul é a escolha certa.
Potenciais aprimoramentos futuros
- Prove que o projeto de replicação do Consul KV pode dar suporte a um cluster Orleans em um ambiente WAN entre vários data centers do Consul.
- Implemente a Tabela de Lembretes no Consul.
- Implemente o Protocolo de Associação Estendida. A equipe por trás do Consul planeja implementar operações atômicas. Depois que essa funcionalidade estiver disponível, a remoção das limitações no provedor poderá ser possível.