Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Consul è una piattaforma di individuazione dei servizi distribuita, a disponibilità elevata e compatibile con il data center, tra cui registrazione semplice del servizio, controllo dell'integrità, rilevamento degli 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.
Una panoramica dettagliata di Consul, inclusi i confronti con soluzioni simili, è disponibile in Che cos'è Consul?.
Consul è scritto in Go ed è open source. I download compilati sono disponibili per macOS X, FreeBSD, Linux, Solaris e Windows.
Perché scegliere Consul?
Orleans Come provider di appartenenze, Consul è una buona scelta per offrire soluzioni locali che non richiedono ai clienti di avere un'infrastruttura esistente o un provider IT cooperativo. Consul è un singolo eseguibile leggero senza dipendenze, semplificando la compilazione in una soluzione middleware. Quando si utilizza Consul per l'individuazione, il controllo e la gestione dei microservizi, un'integrazione completa con Orleans per l'adesione offre semplicità e facilità di operazione. Consul fornisce anche una tabella di appartenenza (nota anche come "Orleans Archivio di sistema personalizzato") che si integra completamente con Orleansla gestione cluster di .
Configurare Consul
La documentazione completa sulla configurazione di un cluster Consul stabile è disponibile nella documentazione di Consul, in modo che le informazioni non vengano ripetute qui. Tuttavia, per praticità, questa guida illustra come eseguire Orleans rapidamente con un agente Consul autonomo.
Creare una cartella in cui installare Consul ( ad esempio C:\Consul).
Creare una sottocartella: C:\Consul\Data (Consul non crea questa directory se non esiste).
Scaricare e decomprimere Consul.exe in C:\Consul.
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
: indica a Consul di 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, non come client. Un client Consul è un agente che ospita servizi e dati, ma non dispone dei diritti di voto e non può diventare leader del cluster. -
-bootstrap
: il primo nodo (e solo il primo)nodo in un cluster deve essere avviato per assumere 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'
: indica a Consul l'indirizzo IP in cui aprire il servizio.
Esistono molti altri parametri, inclusa l'opzione per usare un file di configurazione JSON. Per un elenco completo, vedere la documentazione di Consul.
-
Verificare che Consul sia in esecuzione e pronto ad accettare le richieste di appartenenza da Orleans aprendo l'endpoint dei servizi nel browser all'indirizzo
http://localhost:8500/v1/catalog/services
. Quando funziona correttamente, il browser visualizza il codice JSON seguente:{ "consul": [] }
Configurare Orleans
Per configurare Orleans per usare Consul come fornitore di appartenenze, il progetto silo deve fare riferimento al pacchetto NuGet Microsoft.Orleans.Clustering.Consul. Dopo aver aggiunto il riferimento, configurare il provider di appartenenze nel file Program.cs del 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:
- Crea un oggetto IHostBuilder con valori predefiniti da Host.CreateDefaultBuilder().
- Concatena una chiamata a UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) per configurare il silo Orleans.
- Dato ISiloBuilder, chiama UseConsulSiloClustering.
- Configura il provider di appartenenza al cluster per l'uso di Consul, dato Consul
address
.
Per configurare il client, fare riferimento allo stesso pacchetto NuGet e chiamare il metodo di estensione UseConsulClientClustering.
Client SDK
Se si è interessati all'uso di Consul per l'individuazione dei servizi, gli SDK client sono disponibili per le lingue più diffuse.
Dettagli sull'implementazione
Il provider di tabelle di appartenenza usa la funzionalità di archiviazione chiave/valore di Consul con operazioni check-And-Set (CAS). Quando ogni Silo si avvia, registra due voci chiave-valore: una contenente i dettagli del Silo e una che contiene l'ultima volta che il Silo ha segnalato di essere attivo. Quest'ultima si riferisce alle voci diagnostiche "I'm alive", non agli heartbeat di rilevamento degli errori, che vengono inviati direttamente tra i silos e non vengono scritti nella tabella. Tutte le scritture nella tabella usano CAS per fornire il controllo della concorrenza, come richiesto dal OrleansProtocollo di Gestione del Cluster.
Dopo l'esecuzione del Silo, visualizzare queste voci in un Web browser all'indirizzo http://localhost:8500/v1/kv/?keys&pretty
. L'output è simile al seguente:
[
"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
. Questo prefisso è configurato in modo fisso nel provider ed è progettato per evitare collisioni nel keyspace con altri utenti di Consul. Recuperare informazioni aggiuntive per ogni chiave aggiungendone il nome (senza virgolette) alla radice KV di Consul in http://localhost:8500/v1/kv/
. In questo modo viene presentato 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
}
]
La decodifica della stringa Value
con codifica UTF-8 Base64 fornisce i dati di appartenenza effettivi 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 le KV per tutti i silo nel cluster in una richiesta HTTP GET usando l'URI http://localhost:8500/v1/KV/orleans/default/?recurse
.
Limitazioni
Tenere presente alcune limitazioni quando si usa Consul come provider di appartenenze.
Orleans protocollo di appartenenza estesa (versione della tabella e ETag)
La versione KV di Consul attualmente non supporta gli aggiornamenti atomici. Pertanto, il Orleans provider di appartenenze Consul implementa solo il Orleans protocollo di appartenenza di base, come descritto in Gestione cluster in Orleans. Non supporta il protocollo di appartenenza estesa. Questo protocollo esteso è stato introdotto come ulteriore, anche se non essenziale, convalida della connettività silo e come base per le funzionalità non ancora 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, non a causa di problemi noti effettivi. Leggere la discussione prima di decidere se Consul è la scelta giusta.
Potenziali miglioramenti futuri
- Dimostrare che il progetto di replica KV Consul può supportare un Orleans cluster in un ambiente WAN tra più data center Consul.
- Implementare la tabella promemoria in Consul.
- Implementare il protocollo di appartenenza estesa. Il team alla base di Consul prevede di implementare operazioni atomiche. Una volta disponibile questa funzionalità, è possibile rimuovere le limitazioni nel provider.