Condividi tramite


Usare Consul come provider di membership

Consul è una piattaforma di individuazione dei servizi distribuita, a disponibilità elevata e consapevole del data center che include registrazione semplice del servizio, controllo dell'integrità, rilevamento errori e archiviazione chiave-valore. Si basa sul presupposto che ogni nodo del data center esegua un agente Consul che funge da server o client. Ogni agente comunica tramite un protocollo di gossip scalabile.

È disponibile una panoramica dettagliata di Consul, inclusi i confronti con soluzioni simili qui.

Consul è scritto in Go ed è open source; I download compilati sono disponibili per macOS X, FreeBSD, Linux, Solaris e Windows.

Perché scegliere Consul?

Come fornitore di adesioni Orleans, Consul è una scelta ottimale quando è necessario fornire una soluzione on-premise che non richiede ai potenziali clienti di avere un'infrastruttura esistente, né un provider IT cooperativo. Consul è un singolo eseguibile leggero, non ha dipendenze e, di conseguenza, può essere facilmente integrato nella soluzione middleware. Quando Consul è la soluzione per individuare, controllare e mantenere i tuoi microservizi, ha senso integrarsi completamente con l'appartenenza a Orleans per semplicità e facilità d'uso. Esiste anche una tabella di appartenenza in Consul (nota anche come "Orleans archivio di sistema personalizzato"), che si integra completamente con gestione cluster Orleans.

Configurare Consul

È disponibile una documentazione completa su Consul.io sulla configurazione di un cluster Consul stabile e non ha senso ripeterlo qui. Tuttavia, per praticità, questa guida è inclusa in modo da poter ottenere rapidamente Orleans in esecuzione con un agente Consul autonomo.

  1. Creare una cartella in cui installare Consul ( ad esempio C:\Consul).

  2. Creare una sottocartella: C:\Consul\Data (Consul non crea questa directory se non esiste).

  3. Scaricare e decomprimere Consul.exe in C:\Consul.

  4. Aprire un prompt dei comandi in C:\Consul ed eseguire il comando seguente:

    ./consul.exe agent -server -bootstrap -data-dir "C:\Consul\Data" -client='0.0.0.0'
    

    Nel comando precedente:

    • agent: istruisce Consul a eseguire il processo dell'agente che ospita i servizi. Senza questa opzione, il processo Consul tenta di usare RPC per configurare un agente in esecuzione.
    • -server: definisce l'agente come server e non come client (un client consul è un agente che ospita tutti i servizi e i dati, ma non dispone dei diritti di voto da decidere e non può diventare il leader del cluster.
    • -bootstrap: Il primo nodo (e solo il primo) in un cluster deve essere inizializzato affinché assuma la leadership del cluster.
    • -data-dir [path]: specifica il percorso in cui vengono archiviati tutti i dati di Consul, inclusa la tabella di appartenenza al cluster.
    • -client='0.0.0.0': informa Consul su quale IP aprire il servizio.

    Esistono molti altri parametri e l'opzione per usare un file di configurazione JSON. Per un elenco completo delle opzioni, vedere la documentazione di Consul.

  5. Verificare che Consul sia in esecuzione e pronto per accettare le richieste di appartenenza da Orleans aprendo l'endpoint dei servizi sul browser a http://localhost:8500/v1/catalog/services. Quando funziona correttamente, il browser visualizza il codice JSON seguente:

    {
        "consul": []
    }
    

Configurare Orleans

Per configurare Orleans per l'uso di Consul come provider di appartenenze, il progetto silo dovrà fare riferimento all'Microsoft.Orleans. Clustering.Consul pacchetto NuGet. Una volta che hai fatto ciò, puoi configurare il provider di appartenenze nel file Program.cs del tuo silo come indicato di seguito:

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();

Il codice precedente:

Per configurare il client, fare riferimento allo stesso pacchetto NuGet e chiamare il metodo di estensione UseConsulClientClustering.

Client SDK

Se si è interessati a usare Consul per l'individuazione dei servizi, sono disponibili SDK client per le lingue più diffuse.

Dettagli implementazione

Il provider di tabelle di appartenenza usa funzionalità di archiviazione chiave/valore di Consul con operazioni Check-And-Set (CAS). Quando ogni Silo viene avviato, registra due voci chiave-valore: una che contiene i dettagli del Silo e una che contiene l'ultima volta quando il Silo ha segnalato di essere attivo. Quest'ultimo si riferisce alle voci di diagnostica "I'm alive" e non agli heartbeat di rilevamento degli errori, che vengono inviati direttamente tra i silo e non vengono scritti nella tabella. Tutte le scritture nella tabella vengono eseguite con CAS per fornire il controllo della concorrenza, come richiesto dal OrleansCluster Management Protocol.

Quando il Silo è in esecuzione, puoi visualizzare queste voci nel tuo browser web su http://localhost:8500/v1/kv/?keys&pretty, che visualizza qualcosa del genere:

[
    "orleans/default/192.168.1.11:11111@43165319",
    "orleans/default/192.168.1.11:11111@43165319/iamalive",
    "orleans/default/version"
]

Tutte le chiavi sono precedute da orleans, inserita nel codice nel provider ed è progettata per evitare la collisione nello spazio dei tasti con altri utenti di Consul. È possibile usare una di queste chiavi per recuperare informazioni aggiuntive su Ognuna di queste chiavi può essere letta aggiungendo il nome della chiave (senza virgolette) alla radice KV consul in http://localhost:8500/v1/kv/. In questo modo viene visualizzato il codice JSON seguente:

[
    {
        "LockIndex": 0,
        "Key": "orleans/default/192.168.1.11:11111@43165319",
        "Flags": 0,
        "Value": "[BASE64 UTF8 Encoded String]",
        "CreateIndex": 321,
        "ModifyIndex": 322
    }
]

Decodificando la stringa codificata in Base64 UTF-8 Value, ottieni i dati effettivi di appartenenza Orleans:

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 i client si connettono, leggono i KV per tutti i silos nel cluster in un singolo GET HTTP usando l'URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse.

Limitazioni

Esistono alcune limitazioni da tenere presenti quando si usa Consul come provider di appartenenze.

Orleans protocollo di appartenenza estesa (versione della tabella & ETag)

La versione KV di Consul attualmente non supporta gli aggiornamenti atomici. Pertanto, il Membership Provider Orleans Consul implementa solo il protocollo di appartenenza di base Orleans, come descritto in Gestione cluster in Orleans, e non supporta il protocollo di appartenenza estesa. Questo protocollo esteso è stato introdotto come ulteriore, ma non essenziale, convalida della connettività silo e come base per le funzionalità che non sono ancora state implementate.

Più data center

Le coppie chiave-valore in Consul non vengono attualmente replicate tra data center Consul. Esiste un progetto separato per soddisfare questo sforzo di replica, ma non è stato ancora dimostrato di supportare Orleans.

Durante l'esecuzione in Windows

All'avvio di Consul in Windows, registra il messaggio seguente:

==> WARNING: Windows is not recommended as a Consul server. Do not use in production.

Questo messaggio di avviso viene visualizzato a causa della mancanza di attenzione sui test durante l'esecuzione in un ambiente Windows e non a causa di problemi noti effettivi. Leggi la discussione prima di decidere se Consul è la scelta giusta per te.

Potenziali miglioramenti futuri

  1. Dimostrare che il progetto di replica KV Consul può supportare un cluster Orleans in un ambiente WAN tra più data center Consul.
  2. Implementare la tabella promemoria in Consul.
  3. Implementare il protocollo di appartenenza estesa. Il team responsabile di Consul prevede di implementare operazioni atomiche, una volta che questa funzionalità è disponibile, è possibile rimuovere le limitazioni nel provider.