Używanie Consul jako dostawcy członkostwa
Consul to rozproszona, wysoce dostępna platforma odnajdywania usług z obsługą centrum danych, która obejmuje prostą rejestrację usług, sprawdzanie kondycji, wykrywanie błędów oraz magazyn par klucz-wartość. Jest ona oparta na założeniu, że każdy węzeł w centrum danych uruchamia agenta Consul, który działa jako serwer lub klient. Każdy agent komunikuje się za pośrednictwem skalowalnego protokołu propagacji plotek.
Istnieje szczegółowe omówienie Consul, w tym porównania z podobnymi rozwiązaniami tutaj.
Consul jest napisany w Go i jest open source; Skompilowane pliki do pobrania są dostępne dla systemów macOS, FreeBSD, Linux, Solaris i Windows.
Dlaczego warto wybrać konsula?
Jako Orleans dostawca członkostwa, Consul jest dobrym wyborem, gdy musisz dostarczyć rozwiązanie lokalne, które nie wymaga od potencjalnych klientów posiadania istniejącej infrastruktury i kooperacyjnego 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 Consul jest twoim rozwiązaniem do odnajdywania, sprawdzania i utrzymywania mikrousług, należy w pełni zintegrować się z członkostwem Orleans dla uproszczenia i ułatwienia działania. Istnieje również tabela członkostwa w Consul (znana również jako "Orleans Niestandardowy Magazyn Systemowy"), która w pełni integruje się z OrleansCluster Management.
Skonfiguruj Consul
Istnieje obszerna dokumentacja dostępna w Consul.io, dotycząca konfigurowania stabilnego klastra Consula, więc nie ma sensu tego tutaj powtarzać. Jednak dla twojej wygody dołączamy ten przewodnik, aby szybko uruchomić Orleans z samodzielnym agentem Consula.
Utwórz folder, do którego zostanie zainstalowany Consul (na przykład C:\Consul).
Utwórz podfolder: C:\Consul\Data (consul nie tworzy tego katalogu, jeśli nie istnieje).
Pobierz i rozpakuj Consul.exe do C:\Consul.
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
: Nakazuje Consulowi uruchomić 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 typu Consul to agent posiadający wszystkie usługi i dane, ale nie ma uprawnień do głosowania i nie może stać się liderem klastra. -
-bootstrap
: pierwszy (i tylko pierwszy!) węzeł w klastrze musi zostać przygotowany, aby obejmował przywództwo w klastrze. -
-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 o tym, 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.
-
Sprawdź, czy Consul jest uruchomiony i gotowy do akceptowania żądań członkostwa z Orleans, otwierając endpoint 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 korzystania z consul jako dostawcy członkostwa, projekt silosu będzie musiał odwoływać się do firmy Microsoft.Orleans. Clustering.Consul pakiet NuGet. Po wykonaniu tej czynności możesz skonfigurować dostawcę członkostwa w pliku Program.cs Twojego 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:
- Tworzy IHostBuilder z domyślnych wartości z Host.CreateDefaultBuilder().
- Łączy wywołanie do UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>), które konfiguruje silos Orleans.
- Biorąc pod uwagę wywołanie ISiloBuilderUseConsulSiloClustering.
- Konfiguruje dostawcę członkostwa w klastrze do korzystania z Consul, przy użyciu Consul
address
.
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, istnieją zestawy SDK klienta dla najpopularniejszych języków.
Szczegóły implementacji
Dostawca tabel członkostwa korzysta z funkcji magazynu klucz/wartość konsula z operacjami 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 informację o ostatnim czasie, kiedy silos zgłaszał, że działa. 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 przy użyciu CAS w celu zapewnienia kontroli współbieżności, zgodnie z wymogami protokołu zarządzania klastrami Orleans.
Gdy silos jest uruchomiony, możesz wyświetlić te wpisy w przeglądarce internetowej pod adresem http://localhost:8500/v1/kv/?keys&pretty
, które wyświetlają coś w rodzaju:
[
"orleans/default/192.168.1.11:11111@43165319",
"orleans/default/192.168.1.11:11111@43165319/iamalive",
"orleans/default/version"
]
Wszystkie klucze są poprzedzone orleans
, która jest na stałe zaszyta w dostawcy i ma na celu uniknięcie kolizji przestrzeni nazw kluczy z innymi użytkownikami Consul. Możesz użyć dowolnego z tych kluczy, aby pobrać dodatkowe informacje. Każdy z tych kluczy można odczytać, dołączając ich nazwę (bez cudzysłowów) do katalogu głównego Consul KV pod adresem http://localhost:8500/v1/kv/
. W ten sposób otrzymujesz następujący JSON:
[
{
"LockIndex": 0,
"Key": "orleans/default/192.168.1.11:11111@43165319",
"Flags": 0,
"Value": "[BASE64 UTF8 Encoded String]",
"CreateIndex": 321,
"ModifyIndex": 322
}
]
Dekodowanie zakodowanego ciągu Base64 UTF-8 Value
daje rzeczywiste dane członkostwa 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"
Gdy klienci nawiązują połączenie, odczytują pary kluczy i wartości dla wszystkich silosów w klastrze w jednym żądaniu 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 & ETag)
Consul KV obecnie nie obsługuje aktualizacji atomowych. W związku z tym dostawca członkostwa Orleans implementuje jedynie podstawowy protokół członkostwa Orleans, zgodnie z opisem w Zarządzanie klastrem w Orleans, i nie obsługuje Rozszerzonego Protokołu Członkostwa. Ten rozszerzony protokół został wprowadzony jako dodatkowa, ale nie niezbędna weryfikacja łączności silosu oraz jako podstawa dla 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, aby zająć się tym wysiłkiem replikacyjnym, ale nie udowodniono jeszcze, że 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 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
- Udowodnij, że projekt replikacji consul KV może obsługiwać klaster Orleans w środowisku sieci WAN między wieloma centrami danych consul.
- Zaimplementuj tabelę przypomnień w Consul.
- Zaimplementuj protokół rozszerzonego członkostwa. Zespół odpowiedzialny za Consul planuje implementowanie operacji niepodzielnych, kiedy ta funkcjonalność będzie dostępna, będzie można usunąć ograniczenia w dostawcy.