Komunikacja z wieloma klastrami
Sieć musi być skonfigurowana w taki sposób, aby każdy Orleans silos mógł łączyć się z innym Orleans silosem za pośrednictwem protokołu TCP/IP, niezależnie od tego, gdzie znajduje się na świecie. Dokładnie sposób osiągnięcia tego celu wykracza poza zakres Orleansfunkcji , ponieważ zależy od tego, jak i gdzie są wdrażane silosy.
Na przykład na platformie Windows Azure można używać sieci wirtualnych do łączenia wielu wdrożeń w regionie, a bramy do łączenia sieci wirtualnych między różnymi regionami.
Identyfikator klastra
Każdy klaster ma własny unikatowy identyfikator klastra. Identyfikator klastra musi być określony w konfiguracji globalnej.
Identyfikatory klastra mogą nie być puste ani zawierać przecinków. Ponadto w przypadku korzystania z usługi Azure Table Storage identyfikatory klastra mogą nie zawierać znaków zabronionych dla kluczy wierszy (/, , #, ?).
Zalecamy używanie bardzo krótkich ciągów dla identyfikatorów klastra, ponieważ identyfikatory klastra są często przesyłane i mogą być przechowywane w magazynie przez niektórych dostawców widoku dziennika.
Bramy klastra
Każdy klaster automatycznie wyznacza podzbiór aktywnych silosów, które będą służyć jako bramy klastra. Bramy klastra bezpośrednio anonsują swoje adresy IP do innych klastrów, a tym samym mogą służyć jako "punkty pierwszego kontaktu". Domyślnie co najwyżej 10 silosów (lub dowolnej liczby skonfigurowanej jako MaxMultiClusterGateways) jest wyznaczonych jako bramy klastra.
Komunikacja między silosami w różnych klastrach nie zawsze przechodzi przez bramę. Gdy silos dowiedział się i buforował lokalizację aktywacji ziarna (bez względu na klaster), wysyła komunikaty bezpośrednio do tego silosu, nawet jeśli silos nie jest bramą klastra.
Gossip
Plotka to mechanizm, który umożliwia klastrom udostępnianie informacji o konfiguracji i stanie. Jak sugeruje nazwa, plotka jest zdecentralizowana i dwukierunkowa: każdy silos komunikuje się bezpośrednio z innymi silosami, zarówno w tym samym klastrze, jak i w innych klastrach, aby wymieniać informacje w obu kierunkach.
Zawartość. Plotka zawiera niektóre lub wszystkie następujące informacje:
- Bieżąca konfiguracja wieloklasowa z sygnaturą czasową.
- Słownik zawierający informacje o bramach klastra. Klucz jest adresem silosu, a wartość zawiera (1) znacznik czasu, (2) identyfikator klastra i (3) stan, który jest aktywny lub nieaktywny.
Szybkie i powolne propagacja. Gdy brama zmieni swój stan lub gdy operator wprowadza nową konfigurację, informacje dotyczące plotek są natychmiast wysyłane do wszystkich silosów, klastrów i kanałów plotek. Dzieje się to szybko, ale nie jest niezawodne. Jeśli wiadomość zostanie utracona ze względu na wszelkie przyczyny (np. wyścigi, złamane gniazda, awarie silosu), nasze okresowe plotki w tle zapewniają, że informacje ostatecznie rozprzestrzeniają się, choć wolniej. Wszystkie informacje są ostatecznie propagowane wszędzie i są wysoce odporne na sporadyczne straty i błędy komunikatów.
Wszystkie dane plotek są znacznikami czasu, co gwarantuje, że nowsze informacje zastępują starsze informacje niezależnie od względnego czasu komunikatów. Na przykład nowsze konfiguracje wielu klastrów zastępują starsze, a nowsze informacje o bramie zastępują starsze informacje o tej bramie. Aby uzyskać więcej informacji na temat reprezentacji danych plotek, zobacz klasę MultiClusterData
. Ma metodę łączącą Merge
dane plotek, rozwiązując konflikty przy użyciu sygnatur czasowych.
Kanały plotek
Po pierwszym uruchomieniu silosu lub ponownym uruchomieniu po awarii musi on mieć sposób na uruchomienie plotki. Jest to rola kanału plotek, który można skonfigurować w konfiguracji silosu. Podczas uruchamiania silos pobiera wszystkie informacje z kanałów plotek. Po uruchomieniu silos okresowo utrzymuje plotki, co 30 sekund lub cokolwiek jest skonfigurowane jako BackgroundGossipInterval
. Za każdym razem, gdy synchronizuje swoje informacje dotyczące plotek z partnerem losowo wybranym ze wszystkich bram klastra i kanałów plotek.
- Chociaż nie jest to ściśle wymagane, zalecamy zawsze skonfigurowanie co najmniej dwóch kanałów plotek w różnych regionach w celu zapewnienia lepszej dostępności.
- Opóźnienie komunikacji z kanałami plotek nie ma krytycznego znaczeniu.
- Wiele różnych usług może używać tego samego kanału plotek bez interferencji, o ile identyfikator ServiceId
Guid
(określony przez ich odpowiednią konfigurację) jest odrębny. - Nie ma ścisłego wymogu, aby wszystkie silosy używały tych samych kanałów plotkarskich, o ile kanały są wystarczające, aby pozwolić silosowi początkowo połączyć się z "plotkającą społecznością" podczas uruchamiania. Ale jeśli kanał plotek nie jest częścią konfiguracji silosu, a silos jest bramą, nie wypycha aktualizacji stanu do kanału (szybka propagacja), więc może upłynąć dłużej, zanim ci dotrą do kanału za pośrednictwem okresowej plotki w tle (powolne propagacja).
Kanał plotek oparty na tabelach platformy Azure
Wdrożyliśmy już kanał plotek oparty na tabelach platformy Azure. Konfiguracja określa standardowe parametry połączenia używane dla kont platformy Azure. Na przykład konfiguracja może określać dwa kanały plotek z oddzielnymi kontami usa
usługi Azure Storage i europe
w następujący sposób:
var silo = new HostBuilder()
.UseOrleans(builder =>
{
builder.Configure<MultiClusterOptions>(options =>
{
options.GossipChannels.Add(
"AzureTable",
"DefaultEndpointsProtocol=https;AccountName=usa;AccountKey=...");
options.GossipChannels.Add(
"AzureTable",
"DefaultEndpointsProtocol=https;AccountName=europe;AccountKey=...")
});
})
Wiele różnych usług może używać tego samego kanału plotek bez interferencji, o ile identyfikator ServiceId Guid
określony przez odpowiednią konfigurację jest odrębny.