Použití Consul jako poskytovatele členství

Consul je distribuovaná, vysoce dostupná a platforma zjišťování služeb pracující s datovým centrem, která zahrnuje jednoduchou registraci služby, kontrolu stavu, detekci selhání a úložiště klíč-hodnota. Je založená na místním prostředí, že každý uzel v datovém centru používá agenta Consul, který funguje jako server nebo klient. Každý agent komunikuje prostřednictvím škálovatelného protokolu gossip.

Tady je podrobný přehled Consul, včetně porovnání s podobnými řešeními.

Consul je napsaný v Go a je open source. Kompilované soubory ke stažení jsou k dispozici pro macOS X, FreeBSD, Linux, Solaris a Windows.

Proč vybrat Consul?

Orleans Jako poskytovatel členství je Consul dobrou volbou, když potřebujete dodávat místní řešení, které nevyžaduje, aby vaši potenciální zákazníci měli stávající infrastrukturu a spolupracujícího poskytovatele IT. Consul je jednoduchý jeden spustitelný soubor, nemá žádné závislosti, a proto je možné ho snadno integrovat do vašeho řešení middlewaru. Když je consul vaším řešením pro zjišťování, kontrolu a údržbu mikroslužeb, dává smysl plně integrovat členství, Orleans aby bylo jednoduchost a snadné fungování. V Consul (označované také jakoOrleans Vlastní systémové úložiště) existuje také tabulka členství, která se plně integruje se Orleanssprávou clusteru.

Nastavení consul

K dispozici je rozsáhlá dokumentace k Consul.io o nastavení stabilního clusteru Consul a nemá smysl to tady opakovat. Pro usnadnění práce ale tuto příručku zahrneme, abyste mohli rychle Orleans začít pracovat se samostatným agentem Consul.

  1. Vytvořte složku pro instalaci Consul do (například C:\Consul).

  2. Vytvořte podsložku: C:\Consul\Data (Consul nevytvoří tento adresář, pokud neexistuje).

  3. Stáhněte a rozbalteConsul.exe do složky C:\Consul.

  4. Otevřete příkazový řádek v C:\Consul a spusťte následující příkaz:

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

    V předcházejícím příkazu:

    • agent: Dává Consul pokyn ke spuštění procesu agenta, který je hostitelem služeb. Bez tohoto přepínače se proces Consul pokusí použít RPC ke konfiguraci spuštěného agenta.
    • -server: Definuje agenta jako server a ne jako klient (Consul je agent, který hostuje všechny služby a data, ale nemá hlasovací práva k rozhodování a nemůže se stát vedoucím clusteru.
    • -bootstrap: První uzel (a pouze první!) v clusteru musí být spuštěn, aby se předpokládalo vedení clusteru.
    • -data-dir [path]: Určuje cestu, kde jsou uložena všechna data consul, včetně tabulky členství v clusteru.
    • -client='0.0.0.0': Informuje Consul, na které IP adrese se má služba otevřít.

    Existuje mnoho dalších parametrů a možnost použít konfigurační soubor JSON. Úplný seznam možností najdete v dokumentaci ke Consul.

  5. Ověřte, že je Consul spuštěný a připravený přijímat žádosti o členství, Orleans a to otevřením koncového bodu služeb v prohlížeči na adrese http://localhost:8500/v1/catalog/services. Při správném fungování se v prohlížeči zobrazí následující JSON:

    {
        "consul": []
    }
    

Konfigurace Orleans

Pokud chcete nakonfigurovat Orleans použití Consul jako poskytovatele členství, bude váš projekt sila muset odkazovat na Microsoft.Orleans. Balíček NuGet Clustering.Consul . Jakmile to uděláte, můžete poskytovatele členství nakonfigurovat v souboru Program.cs silo následujícím způsobem:

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

Předchozí kód:

Chcete-li nakonfigurovat klienta, odkazujte na stejný balíček NuGet a volejte metodu UseConsulClientClustering rozšíření.

Klientská sada SDK

Pokud vás zajímá použití Consul pro zjišťování služeb, existují klientské sady SDK pro nejoblíbenější jazyky.

Podrobnosti implementace

Zprostředkovatel tabulky členství využívá funkce úložiště klíč/hodnota consul s operacemi Check-And-Set (CAS). Při každém spuštění sila zaregistruje dvě položky klíč-hodnota, jeden, který obsahuje podrobnosti o silu a jeden, který uchovává čas posledního nahlášení sila, že byl naživu. Druhý odkazuje na diagnostické položky "Jsem naživu" a ne na prezenční signály detekce selhání, které se odesílají přímo mezi sila a nejsou zapsány do tabulky. Všechny zápisy do tabulky se provádějí pomocí CAS, aby poskytoval řízení souběžnosti, jak vyžaduje Orleansprotokol pro správu clusteru.

Po spuštění sila můžete tyto položky zobrazit ve webovém prohlížeči http://localhost:8500/v1/kv/?keys&pretty, ve kterém se zobrazí něco takového:

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

Všechny klíče mají předponu orleans, která je pevně zakódovaná ve zprostředkovateli a je určena k zabránění kolizi keyspace s jinými uživateli Consul. Pomocí libovolného z těchto klíčů můžete načíst další informace o každém z těchto klíčů tak, že připojíte jejich název klíče (bez uvozovek) ke kořenovému adresáři Consul KV na http://localhost:8500/v1/kv/adrese . Tím se zobrazí následující JSON:

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

Dekódování řetězce Value kódování Base64 UTF-8 poskytuje skutečná Orleans data členství:

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"

Když se klienti připojí, čtou klíčové ukazatele výkonu pro všechna sila v clusteru v jednom http GET pomocí identifikátoru URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse.

Omezení

Při používání Consul jako poskytovatele členství je potřeba mít na paměti několik omezení.

Orleans rozšířený protokol členství (table version &ETag)

Consul KV v současné době nepodporuje atomické aktualizace. Orleans Zprostředkovatel členství consul proto implementuje Orleans pouze základní protokol členství, jak je popsáno ve správě clusteru v Orleansa nepodporuje rozšířený protokol členství. Tento rozšířený protokol byl zaveden jako další, ale ne základní ověřování připojení silo a jako základ pro funkce, které ještě nebyly implementovány.

Několik datacenter

Páry klíč-hodnota v Consul nejsou aktuálně replikovány mezi datovými centry Consul. Existuje samostatný projekt pro řešení tohoto úsilí o replikaci, ale zatím nebylo prokázáno, že podporuje Orleans.

Při spuštění ve Windows

Při spuštění Consul ve Windows zaznamená následující zprávu:

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

Tato zpráva s upozorněním se zobrazuje kvůli nedostatku zaměření na testování při spuštění v prostředí Windows, a ne kvůli skutečným známým problémům. Než se rozhodnete, jestli je consul pro vás správnou volbou, přečtěte si diskuzi.

Potenciální budoucí vylepšení

  1. Ověřte, že projekt replikace Consul KV může podporovat Orleans cluster v prostředí WAN mezi několika datovými centry Consul.
  2. Implementujte tabulku připomenutí v consul.
  3. Implementujte protokol rozšířeného členství. Tým consul plánuje implementaci atomických operací, jakmile je tato funkce dostupná, je možné odebrat omezení poskytovatele.