Udostępnij za pośrednictwem


Używanie Consul jako dostawcy członkostwa

Consul to rozproszona, wysoce dostępna i świadoma centrów danych platforma do odkrywania usług, obejmująca prostą rejestrację usług, sprawdzanie kondycji, wykrywanie błędów oraz magazynowanie 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 propagacji plotek.

Szczegółowe omówienie Consul, w tym porównania z podobnymi rozwiązaniami, jest dostępne w artykule What is Consul? (Co to jest Consul?).

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 wyborem Orleansw przypadku dostarczania rozwiązań lokalnych, które nie wymagają od klientów posiadania istniejącej infrastruktury ani spółdzielczego dostawcy IT. Consul to lekki pojedynczy plik wykonywalny bez zależności, co ułatwia tworzenie rozwiązania oprogramowania pośredniczącego. W przypadku korzystania z Consula do odnajdywania, sprawdzania i obsługi mikrousług, pełna integracja z członkostwem Orleans zapewnia prostotę i łatwość działania. Consul udostępnia również tabelę członkostwa (znaną również jako "Orleansniestandardowy magazyn systemowy"), która w pełni integruje się z Orleanszarządzaniem klastrem.

Skonfiguruj Consul

Obszerna dokumentacja dotycząca konfigurowania stabilnego klastra konsula jest dostępna w dokumentacji konsula, dzięki czemu informacje nie będą tu powtarzane. Jednak dla wygody ten przewodnik pokazuje, jak szybko uruchomić Orleans z autonomicznym agentem Consul.

  1. Utwórz folder, do którego zostanie zainstalowany Consul (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 C:\Consul.

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

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

    W poprzednim poleceniu:

    • agent: Poleca uruchomić w Consul proces agenta, który hostuje usługi. Bez tego przełącznika proces Consul próbuje użyć RPC do konfigurowania uruchomionego agenta.
    • -server: definiuje agenta jako serwer, a nie klienta. (Klient Consul jest agentem hostującym usługi i dane, ale nie ma praw do głosowania i nie może zostać liderem klastra).
    • -bootstrap: Pierwszy (i tylko pierwszy!) węzeł w klastrze musi zostać uruchomiony, aby objąć przywództwo klastra.
    • -data-dir [path]: określa ścieżkę, w której są przechowywane wszystkie dane konsula, w tym tabela członkostwa w klastrze.
    • -client='0.0.0.0': Informuje Consul, na którym adresie IP uruchomić usługę.

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

  5. Sprawdź, czy Consul jest uruchomiony i gotowy do akceptowania żądań członkostwa z Orleans poprzez otwarcie punktu końcowego 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": []
    }
    

Konfigurowanie Orleans

Aby skonfigurować Orleans do używania usługi Consul jako dostawcę członkostwa, projekt silosu musi zawierać odniesienie do pakietu NuGet Microsoft.Orleans.Clustering.Consul. Po dodaniu odwołania skonfiguruj 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:

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

Zestaw SDK klienta

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

Szczegóły implementacji

Dostawca tabel członkostwa używa funkcji magazynu klucz/wartość consul z operacjami Check-And-Set (CAS). Po uruchomieniu każdego silosu rejestruje dwa wpisy klucz-wartość: jeden zawierający szczegóły silosu i jeden trzymający ostatni raz, kiedy silos zgłosił, że działa. To drugie odnosi się do wpisów diagnostycznych "Jestem żywy", a nie do sygnałó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 używają usługi CAS do zapewnienia kontroli współbieżności zgodnie z wymaganiami Orleansprotokołu zarządzania klastrami.

Po uruchomieniu silosu wyświetl te wpisy w przeglądarce internetowej pod adresem http://localhost:8500/v1/kv/?keys&pretty. Dane wyjściowe wyglądają mniej więcej tak:

[
    "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. Ten prefiks jest wbudowany w dostawcę i ma na celu uniknięcie kolizji przestrzeni kluczy z innymi użytkownikami Consul. Pobierz dodatkowe informacje dla każdego klucza, dołączając jego nazwę (bez cudzysłowów) do Consul KV root 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 zapewnia 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ą pary klucz-wartość dla wszystkich silosów w klastrze w jednym żądaniu HTTP GET, używając identyfikatora URI http://localhost:8500/v1/KV/orleans/default/?recurse.

Ograniczenia

Podczas korzystania z konsula jako dostawcy członkostwa należy pamiętać o kilku ograniczeniach.

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

Consul KV obecnie nie obsługuje aktualizacji atomowych. 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 Orleans. Nie obsługuje protokołu rozszerzonego członkostwa. Rozszerzony protokół został wprowadzony jako dodatkowy, choć nie niezbędny, do weryfikacji łączności silosu i jako podstawa funkcjonalności, która jeszcze nie została zaimplementowana.

Wiele centrów danych

Pary klucz-wartość w Consul nie są obecnie replikowane między centrami danych Consul. Istnieje oddzielny projekt dotyczący tego wysiłku związanego z replikacją, ale jeszcze nie udowodniono, że jest w stanie wspierać Orleans.

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 pojawia się 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.

Potencjalne przyszłe ulepszenia

  1. Udowodnij, że projekt replikacji Consul KV może obsługiwać klaster w środowisku WAN pomiędzy wieloma centrami danych Consul.
  2. Zaimplementuj tabelę przypomnień w Consul.
  3. Zaimplementuj protokół rozszerzonego członkostwa. Zespół odpowiedzialny za Consul planuje zaimplementować operacje atomowe. Po udostępnieniu tej funkcji usunięcie ograniczeń w dostawcy może być możliwe.