Partilhar via


Use o Consul como um provedor de associação

O Consul é uma plataforma de descoberta de serviços distribuída, altamente disponível e com reconhecimento de data center, incluindo registro de serviço simples, verificação de integridade, deteção de falhas e armazenamento de chave-valor. Ele foi construído com base na premissa de que cada nó no data center executa um agente Consul atuando como um servidor ou cliente. Cada agente se comunica através de um protocolo de fofoca escalável.

Uma visão geral detalhada da Consul, incluindo comparações com soluções semelhantes, está disponível em O que é a Consul?.

Consul está escrito em Go e é de código aberto. Downloads compilados estão disponíveis para macOS X, FreeBSD, Linux, Solaris e Windows.

Porquê escolher a Consul?

Como Provedor de Orleans Associação, a Consul é uma excelente escolha para oferecer soluções no local que não exigem que os clientes tenham uma infraestrutura existente ou um provedor de TI cooperativo. O Consul é um executável único leve e sem dependências, facilitando a criação de uma solução de middleware. Ao usar o Consul para descobrir, verificar e manter microsserviços, integrar-se plenamente à adesão do Orleans oferece simplicidade e facilidade de operação. A Consul também fornece uma tabela de membros (também conhecida como "Orleans Custom System Store ") que se integra totalmente com Orleanso Gerenciamento de Cluster da .

Configurar o Consul

Documentação extensa sobre a criação de um cluster estável do Consul está disponível na documentação do Consul, para que as informações não se repitam aqui. No entanto, por conveniência, este guia mostra como executar rapidamente Orleans com um agente Consul independente.

  1. Crie uma pasta para instalar o Consul (por exemplo, C:\Consul).

  2. Crie uma subpasta: C:\Consul\Data (o Consul não cria este diretório se ele não existir).

  3. Baixe e descompacte Consul.exe no C:\Consul.

  4. 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 Consul tenta usar RPC para configurar um agente em execução.
    • -server: Define o agente como um servidor, não como um cliente. (Um cliente Consul é um agente que hospeda serviços e dados, mas não tem direito a voto e não pode se tornar o líder do cluster).
    • -bootstrap: O primeiro (e apenas o primeiro!) nó em um agrupamento deve ser inicializado para poder assumir a liderança do agrupamento.
    • -data-dir [path]: Especifica o caminho onde todos os dados do Consul, incluindo a tabela de associação do cluster, são armazenados.
    • -client='0.0.0.0': Informa o Cônsul 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 Cônsul para obter uma lista completa.

  5. Verifique se o Consul está em execução e pronto para receber pedidos de adesão, abrindo o endpoint de serviços no seu navegador em Orleans. Quando funciona corretamente, o navegador exibe o seguinte JSON:

    {
        "consul": []
    }
    

Configurar Orleans

Para configurar Orleans para usar o Consul como 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 de 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:

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 estiver interessado em usar o Consul para descoberta de serviços, os SDKs de cliente estão disponíveis para os idiomas mais populares.

Detalhes da implementação

O Provedor de Tabela de Membros usa a funcionalidade de armazenamento de Chave/Valor da Consul com operações de Check-And-Set (CAS). Quando cada Silo inicia, ele regista duas entradas de chave-valor: uma contendo detalhes do Silo e outra registrando a última vez que o Silo reportou estar ativo. Este último refere-se a entradas de diagnóstico "Estou vivo", não a batimentos cardíacos de detecção de falhas, que são enviados diretamente entre silos e não são gravados na tabela. Todas as gravações na tabela usam CAS para fornecer controle de simultaneidade, conforme exigido pelo Orleans do Protocolo de Gestão de Cluster.

Quando o Silo estiver a funcionar, visualize estas entradas num navegador em http://localhost:8500/v1/kv/?keys&pretty. A saída parece semelhante a isto:

[
    "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. Este prefixo é codificado no provedor e destina-se a evitar colisões de espaço de chave com outros usuários do Consul. Recupere informações adicionais para cada chave anexando seu nome (sem aspas) à raiz do Consul KV em http://localhost:8500/v1/kv/. Ao fazê-lo 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 Value codificada Base64 UTF-8 fornece os dados reais Orleans da 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 de todos os silos no cluster em uma solicitação HTTP GET usando o URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Limitações

Esteja ciente 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 Consul Orleans implementa apenas o Orleans protocolo de associação básico, conforme descrito em Gerenciamento de cluster em Orleans. Ele não suporta o Protocolo de Associação Estendida. Este Protocolo Estendido foi introduzido como uma validação adicional de conectividade de silo, embora não essencial, e como uma base para funcionalidades que ainda não foram implementadas.

Vários datacenters

Atualmente, os pares chave-valor no Consul não são replicados entre os data centers do Consul. Existe um projeto separado para lidar com esse esforço de replicação, mas ainda não foi comprovado que ele ofereça 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.

Esta mensagem de aviso aparece devido à falta de foco no teste ao executar em um ambiente Windows, não devido a quaisquer problemas conhecidos reais. Leia a discussão antes de decidir se o Cônsul é a escolha certa.

Potenciais melhorias futuras

  1. Prove que o projeto de replicação KV do Consul pode suportar um cluster Orleans num ambiente WAN entre vários centros de dados da Consul.
  2. Implemente a Tabela de Lembretes no Consul.
  3. Implemente o Protocolo de Associação Estendida. A equipa por detrás da Consul planeia implementar operações atómicas. Uma vez que essa funcionalidade esteja disponível, a remoção das limitações no provedor pode ser possível.