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.
Utwórz folder do zainstalowania programu Consul w programie (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 katalogu C:\Consul.
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.
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:
- Tworzy obiekt IHostBuilder z wartościami domyślnymi na podstawie elementu Host.CreateDefaultBuilder().
- Łańcuch wywołanie, do UseOrleans(IHostBuilder, Action<HostBuilderContext,ISiloBuilder>) którego konfiguruje Orleans silos.
- Biorąc pod uwagę wywołania ISiloBuilder UseConsulSiloClustering.
- Konfiguruje dostawcę członkostwa w klastrze do korzystania z konsula, biorąc pod uwagę consul
address
.
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
- Udowodnij, że projekt replikacji consul KV może obsługiwać Orleans klaster w środowisku sieci WAN między wieloma centrami danych consul.
- Zaimplementuj tabelę przypomnień w konsulu.
- Zaimplementuj protokół rozszerzonego członkostwa. Zespół ds. konsula planuje implementowanie operacji niepodzielnych, gdy ta funkcja jest dostępna, można usunąć ograniczenia w dostawcy.