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 que inclui 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 está executando um agente Consul que está atuando como um servidor ou cliente. Cada agente se comunica através de um protocolo de fofoca escalável.

Há uma visão geral detalhada do Consul, incluindo comparações com soluções semelhantes aqui.

Consul é 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 um Orleans provedor de associação, a Consul é uma boa escolha quando você precisa fornecer uma solução local que não exija que seus clientes em potencial tenham infraestrutura existente e um provedor de TI cooperativo. O Consul é um executável único leve, não tem dependências e, como tal, pode ser facilmente incorporado na sua solução de middleware. Quando o Consul é a sua solução para descobrir, verificar e manter os seus microsserviços, faz sentido integrar-se totalmente com Orleans a associação para simplicidade e facilidade de operação. Também existe uma tabela de membros no Consul (também conhecida como "Orleans Custom System Store "), que se integra totalmente com Orleanso Gerenciamento de Cluster da .

Configurar o Consul

Há uma extensa documentação disponível no Consul.io sobre a criação de um cluster estável do Consul, e não faz sentido repetir isso aqui. No entanto, para sua conveniência, incluímos este guia para que você possa rapidamente começar Orleans a trabalhar 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 em 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 Cônsul a executar o processo de 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 e não como um cliente (Um cliente Consul é um agente que hospeda todos os serviços e dados, mas não tem direitos de voto para decidir, e não pode se tornar, o líder do cluster.
    • -bootstrap: O primeiro (e apenas o primeiro!) nó de um cluster deve ser inicializado para que assuma a liderança do cluster.
    • -data-dir [path]: Especifica o caminho onde todos os dados do Consul são armazenados, incluindo a tabela de associação do cluster.
    • -client='0.0.0.0': Informa o Cônsul em qual IP abrir o serviço.

    Há muitos outros parâmetros e a opção de usar um arquivo de configuração JSON. Para obter uma lista completa das opções, consulte a documentação do Consul.

  5. Verifique se o Consul está em execução e pronto para aceitar solicitações de associação abrindo o ponto de extremidade de Orleans serviços em seu navegador em http://localhost:8500/v1/catalog/services. Quando funciona corretamente, o navegador exibe o seguinte JSON:

    {
        "consul": []
    }
    

Configurar Orleans

Para configurar Orleans para usar o Consul como um provedor de associação, seu projeto de silo precisará fazer referência à Microsoft.Orleans. Pacote Clustering.Consul NuGet. Depois de fazer isso, você pode configurar o provedor de associação no arquivo de Program.cs do seu 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 UseConsulClientClustering método de extensão.

SDK do Cliente

Se você estiver interessado em usar o Consul para sua descoberta de serviço, existem SDKs de cliente para os idiomas mais populares.

Detalhes da implementação

O Provedor de Tabela de Membros faz uso da funcionalidade de armazenamento de chave/valor do Consul com operações de Check-And-Set (CAS). Quando cada Silo começa, ele registra duas entradas chave-valor, uma que contém os detalhes do Silo e outra que contém a última vez que o Silo relatou que estava vivo. Este último refere-se a entradas de diagnóstico "Estou vivo" e não a batimentos cardíacos de deteção de falha, que são enviados diretamente entre os silos e não são escritos na tabela. Todas as gravações na tabela são realizadas com CAS para fornecer controle de simultaneidade, conforme exigido pelo OrleansProtocolo de Gerenciamento de Cluster do .

Quando o Silo estiver em execução, você poderá visualizar essas entradas no seu navegador da Web em http://localhost:8500/v1/kv/?keys&pretty, que exibe algo como:

[
    "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, que é codificado no provedor e destina-se a evitar a colisão do espaço de chaves com outros usuários do Consul. Você pode usar qualquer uma dessas chaves para recuperar informações adicionais sobre Cada uma dessas chaves pode ser lida anexando seu nome de chave (sem aspas) à raiz KV do Consul em http://localhost:8500/v1/kv/. Ao fazê-lo, apresenta-lhe 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 para todos os silos no cluster em um HTTP GET usando o URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse.

Limitações

Existem algumas limitações a ter em conta ao utilizar o Consul como fornecedor de membros.

Orleans protocolo de associação estendida (versão da tabela & ETag)

Atualmente, o Consul KV não suporta atualizações atômicas. Portanto, o Orleans Provedor de Associação Consul implementa apenas o Orleans protocolo de associação básico, conforme descrito em Gerenciamento de cluster em Orleans, e não suporta o Protocolo de Associação Estendida. Este protocolo estendido foi introduzido como uma validação de conectividade de silo extra, mas não essencial, e como uma base para a funcionalidade que ainda não foi implementada.

Vários datacenters

Atualmente, os pares chave-valor no Consul não são replicados entre os data centers do Consul. Há um projeto separado para lidar com esse esforço de replicação, mas ainda não foi comprovado que ele ofereça suporte Orleansao .

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 é exibida devido à falta de foco no teste ao executar em um ambiente Windows e não devido a quaisquer problemas conhecidos reais. Leia a discussão antes de decidir se o Consul é a escolha certa para você.

Potenciais melhorias futuras

  1. Comprove que o projeto de replicação Consul KV pode suportar um Orleans cluster em um ambiente WAN entre vários data centers Consul.
  2. Implemente a Tabela de Lembretes no Consul.
  3. Implemente o Protocolo de Associação Estendida. A equipe por trás do Consul planeja implementar operações atômicas, uma vez que essa funcionalidade esteja disponível, é possível remover as limitações no provedor.