Używanie konsula jako dostawcy członkostwa

Consul to rozproszona, wysoce dostępna i obsługa centrum danych platforma odnajdywania usług, która obejmuje prostą rejestrację usług, sprawdzanie kondycji, wykrywanie błędów i magazyn par klucz-wartość. Jest ona oparta na założeniu, że każdy węzeł w centrum danych uruchamia agenta konsula działającego jako serwer lub klient. Każdy agent komunikuje się za pośrednictwem skalowalnego protokołu plotek.

W tym miejscu przedstawiono szczegółowe omówienie konsula, w tym porównania z podobnymi rozwiązaniami.

Consul jest napisany w języku Go i jest open source; skompilowane pliki do pobrania są dostępne dla systemów macOS X, FreeBSD, Linux, Solaris i Windows

Dlaczego warto wybrać konsula?

Jako dostawca członkostwa konsul jest dobrym wyboremOrleans, gdy musisz dostarczyć rozwiązanie lokalne, które nie wymaga od potencjalnych klientów posiadania istniejącej infrastruktury i spółdzielonego dostawcy IT. Consul jest lekkim pojedynczym plikiem wykonywalnym, nie ma zależności i w związku z tym może być łatwo wbudowany w rozwiązanie oprogramowania pośredniczącego. Gdy konsul jest twoim rozwiązaniem do odnajdywania, sprawdzania i obsługi mikrousług, warto w pełni zintegrować z członkostwem Orleans dla uproszczenia i łatwości działania. Istnieje również tabela członkostwa w consul (znana również jako "OrleansNiestandardowy magazyn systemowy"), która w pełni integruje się z Orleanszarządzaniem klastrem.

Konfigurowanie konsula

Istnieje obszerna dokumentacja dostępna w Consul.io na temat konfigurowania stabilnego klastra konsula i nie ma sensu powtarzać tego tutaj. Jednak dla twojej wygody dołączymy ten przewodnik, dzięki czemu możesz szybko Orleans uruchomić się z autonomicznym agentem konsula.

  1. Utwórz folder do zainstalowania programu Consul w programie (na przykład C:\Consul).

  2. Utwórz podfolder: C:\Consul\Data (Consul nie tworzy tego katalogu, jeśli nie istnieje).

  3. Pobierz i rozpakuj Consul.exe do katalogu C:\Consul.

  4. Otwórz wiersz polecenia w folderze C:\Consul i uruchom następujące polecenie:

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

    W powyższym poleceniu:

    • agent: nakazuje konsulowi uruchomienie procesu agenta, który hostuje usługi. Bez tego przełącznika proces konsula próbuje użyć procedury RPC do skonfigurowania uruchomionego agenta.
    • -server: Definiuje agenta jako serwera, a nie klienta (klient konsula jest agentem hostujący wszystkie usługi i dane, ale nie ma uprawnień do głosowania do podjęcia decyzji i nie może stać się liderem klastra.
    • -bootstrap: Pierwszy (i tylko pierwszy)węzeł w klastrze musi zostać uruchomiony tak, aby zakładał przywództwo klastra.
    • -data-dir [path]: określa ścieżkę, w której są przechowywane wszystkie dane konsula, w tym tabelę członkostwa w klastrze.
    • -client='0.0.0.0': informuje konsula, który adres IP ma otworzyć usługę.

    Istnieje wiele innych parametrów i opcja użycia pliku konfiguracji JSON. Aby uzyskać pełną listę opcji, zobacz dokumentację konsula.

  5. Sprawdź, czy usługa Consul jest uruchomiona i gotowa do akceptowania żądań członkostwa, Orleans otwierając punkt końcowy usług w przeglądarce pod adresem http://localhost:8500/v1/catalog/services. Podczas prawidłowego działania przeglądarka wyświetla następujący kod JSON:

    {
        "consul": []
    }
    

Skonfigurować Orleans

Aby skonfigurować Orleans usługę Consul jako dostawca członkostwa, projekt silosu będzie musiał odwoływać się do firmy Microsoft.Orleans Pakiet NuGet Clustering.Consul . Po wykonaniu tej czynności możesz skonfigurować dostawcę członkostwa w pliku Program.cs silosu w następujący sposób:

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

Powyższy kod ma następujące działanie:

Aby skonfigurować klienta, należy odwołać się do tego samego pakietu NuGet i wywołać metodę UseConsulClientClustering rozszerzenia.

Zestaw SDK klienta

Jeśli interesuje Cię używanie consul do odnajdywania usług, dostępne są zestawy SDK klienta dla najpopularniejszych języków.

Szczegóły implementacji

Dostawca tabel członkostwa korzysta z funkcji magazynu klucz/wartość konsula przy użyciu operacji Check-And-Set (CAS). Po uruchomieniu każdego silosu rejestruje dwa wpisy klucz-wartość, jeden zawierający szczegóły silosu i jeden, który przechowuje ostatni raz Silo zgłaszane, że żyje. Ten ostatni odnosi się do wpisów diagnostycznych "żyję", a nie do pulsów wykrywania błędów, które są wysyłane bezpośrednio między silosami i nie są zapisywane w tabeli. Wszystkie operacje zapisu w tabeli są wykonywane z usługą CAS w celu zapewnienia kontroli współbieżności, zgodnie z potrzebami protokołu Orleanszarządzania klastrami.

Po uruchomieniu silosu możesz wyświetlić te wpisy w przeglądarce internetowej pod adresem http://localhost:8500/v1/kv/?keys&pretty, który będzie wyświetlany w następujący sposób:

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

Wszystkie klucze są poprzedzone prefiksem orleans, który jest zakodowany w dostawcy i ma na celu uniknięcie kolizji przestrzeni kluczy z innymi użytkownikami konsula. Możesz użyć dowolnego z tych kluczy, aby pobrać dodatkowe informacje o każdym z tych kluczy można odczytać, dołączając ich nazwę klucza (bez cudzysłowów) do katalogu głównego consul KV pod adresem http://localhost:8500/v1/kv/. W ten sposób przedstawiono następujący kod JSON:

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

Dekodowanie ciągu Value zakodowanego w formacie BASE64 UTF-8 daje rzeczywiste Orleans dane członkostwa:

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"

Gdy klienci nawiązują połączenie, odczytują telewizory dla wszystkich silosów w klastrze w jednym trybie HTTP GET przy użyciu identyfikatora URI http://192.168.1.26:8500/v1/KV/orleans/default/?recurse.

Ograniczenia

Istnieje kilka ograniczeń, które należy wziąć pod uwagę podczas korzystania z konsula jako dostawcy członkostwa.

Orleans rozszerzony protokół członkostwa (wersja tabeli i ETag)

Consul KV obecnie nie obsługuje aktualizacji niepodzielnych. Orleans W związku z tym dostawca członkostwa consul implementuje Orleans tylko podstawowy protokół członkostwa, zgodnie z opisem w temacie Zarządzanie klastrem w programie Orleansi nie obsługuje protokołu rozszerzonego członkostwa. Ten rozszerzony protokół został wprowadzony jako dodatkowy, ale nie niezbędny, weryfikację łączności silosu i jako podstawę do funkcjonalności, która nie została jeszcze zaimplementowana.

Wiele centrów danych

Pary klucz-wartość w consul nie są obecnie replikowane między centrami danych consul. Istnieje oddzielny projekt, aby rozwiązać ten problem związany z replikacją, ale nie został jeszcze sprawdzony do obsługi Orleansprogramu .

W przypadku uruchamiania w systemie Windows

Po uruchomieniu consul w systemie Windows rejestruje następujący komunikat:

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

Ten komunikat ostrzegawczy jest wyświetlany z powodu braku koncentracji uwagi na testowaniu podczas uruchamiania w środowisku systemu Windows, a nie z powodu żadnych rzeczywistych znanych problemów. Przeczytaj dyskusję przed podjęciem decyzji, czy konsul jest właściwym wyborem dla Ciebie.

Potencjalne przyszłe ulepszenia

  1. Udowodnij, że projekt replikacji consul KV może obsługiwać Orleans klaster w środowisku sieci WAN między wieloma centrami danych consul.
  2. Zaimplementuj tabelę przypomnień w konsulu.
  3. Zaimplementuj protokół rozszerzonego członkostwa. Zespół ds. konsula planuje implementowanie operacji niepodzielnych, gdy ta funkcja jest dostępna, można usunąć ograniczenia w dostawcy.