Komunikace s více clustery
Síť musí být nakonfigurována takovým způsobem, aby se každý Orleans silo mohl připojit k jinému Orleans silu prostřednictvím protokolu TCP/IP bez ohledu na to, kde se nachází na světě. Přesně to, jak toho dosáhnete, je mimo rozsah Orleans, protože závisí na tom, jak a kde se nasazují sila.
Ve Windows Azure můžeme například pomocí virtuálních sítí připojit více nasazení v rámci oblasti a brány pro připojení virtuálních sítí napříč různými oblastmi.
Identifikátor clusteru
Každý cluster má vlastní jedinečné ID clusteru. ID clusteru musí být zadáno v globální konfiguraci.
ID clusteru nemusí být prázdné ani nesmí obsahovat čárky. Pokud používáte Azure Table Storage, id clusteru nemusí obsahovat znaky zakázané pro klíče řádků (/, , #, ?).
Pro ID clusteru doporučujeme používat velmi krátké řetězce, protože id clusteru se často přenášejí a mohou být uloženy v úložišti některými poskytovateli zobrazení protokolů.
Brány clusteru
Každý cluster automaticky určí podmnožinu aktivních sila, která bude sloužit jako brány clusteru. Brány clusteru přímo inzerují své IP adresy do jiných clusterů a můžou tak sloužit jako "body prvního kontaktu". Ve výchozím nastavení se jako brány clusteru označí maximálně 10 sila (nebo libovolné číslo MaxMultiClusterGateways).
Komunikace mezi sily v různých clusterech neprojde bránou vždy. Jakmile se silo naučí a uloží do mezipaměti umístění aktivace zrnitosti (bez ohledu na to, v jakém clusteru), odešle zprávy do tohoto sila přímo, i když silo není brána clusteru.
Gossip
Gossip je mechanismus pro clustery ke sdílení informací o konfiguraci a stavu. Jak napovídá název, gossip je decentralizovaný a obousměrný: každý silo komunikuje přímo s jinými silami, jak ve stejném clusteru, tak v jiných clusterech, aby si vyměňoval informace v obou směrech.
Obsah. Gossip obsahuje některé nebo všechny následující informace:
- Aktuální konfigurace s více clustery s časovým razítkem.
- Slovník, který obsahuje informace o branách clusteru. Klíč je adresa sil a hodnota obsahuje (1) časové razítko, (2) ID clusteru a (3) stav, který je aktivní nebo neaktivní.
Rychlé a pomalé šíření. Když brána změní svůj stav nebo když operátor vloží novou konfiguraci, tyto informace gossip se okamžitě odešlou do všech sila, clusterů a kanálů gossip. K tomu dochází rychle, ale není spolehlivé. Pokud by zpráva byla ztracena z jakýchkoli důvodů (např. rasy, poškozené sokety, selhání sila), naše pravidelné pozadí gossip zajišťuje, že se informace nakonec rozšíří, i když pomaleji. Všechny informace se nakonec šíří všude a jsou vysoce odolné vůči občasné ztrátě a selháním zpráv.
Všechna data gossip jsou časová razítka, což zajišťuje, že novější informace nahradí starší informace bez ohledu na relativní načasování zpráv. Například novější konfigurace s více clustery nahrazují starší a novější informace o bráně nahrazují starší informace o této bráně. Další podrobnosti o reprezentaci dat gossip naleznete ve MultiClusterData
třídě. Má metodu Merge
, která kombinuje gossip data a řeší konflikty pomocí časových razítek.
Kanály Gossip
Při prvním spuštění sila nebo restartování po selhání musí mít způsob, jak spustit gossip. Jedná se o roli kanálu gossip, který lze nakonfigurovat v konfiguraci sila. Při spuštění načte silo všechny informace z kanálů gossip. Po spuštění se silo pravidelně chytá, každých 30 sekund nebo cokoli, co je nakonfigurované jako BackgroundGossipInterval
. Pokaždé, když synchronizuje informace o gossipu s partnerem náhodně vybraným ze všech bran clusteru a kanálů gossip.
- I když to není nezbytně nutné, doporučujeme pro lepší dostupnost vždy nakonfigurovat aspoň dva kanály gossip v různých oblastech.
- Latence komunikace s kanály gossip není důležitá.
- Více různých služeb může používat stejný kanál gossip bez rušení, pokud je Id
Guid
služby (zadané v příslušné konfiguraci) odlišné. - Neexistuje žádný striktní požadavek, aby všechna sila používala stejné gossip kanály, pokud jsou kanály dostatečné k tomu, aby se silo na začátku připojilo s "gossiping komunitou", když se spustí. Pokud ale kanál gossip není součástí konfigurace silo a toto silo je brána, nenasdílí aktualizace stavu do kanálu (rychlé šíření), takže může trvat déle, než se tyto kanály dostanou prostřednictvím pravidelného gossipu na pozadí (pomalé šíření).
Kanál Gossip založený na tabulkách Azure
Už jsme implementovali kanál gossip založený na tabulkách Azure. Konfigurace určuje standardní připojovací řetězec používané pro účty Azure. Například konfigurace může zadat dva kanály gossip s samostatnými účty usa
úložiště Azure a europe
následujícím způsobem:
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=...")
});
})
Více různých služeb může používat stejný kanál gossip bez rušení, pokud je ID Guid
služby určené příslušnou konfigurací odlišné.