Koordinationsattribut för korn
Utvecklare kan ange när och hur kluster ska samordna sina kornkataloger för en viss kornklass. Det GlobalSingleInstanceAttribute innebär att vi vill ha samma beteende som när du kör Orleans i ett enda globalt kluster: det vill säga dirigera alla anrop till en enda aktivering av kornet. Attributet [OneInstancePerCluster]
anger däremot att varje kluster kan ha sin oberoende aktivering. Detta är lämpligt om kommunikationen mellan kluster är oönstrad.
Attributen placeras på kornimplementeringar. Till exempel:
using Orleans.MultiCluster;
[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
// ...
}
[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
// ...
}
Om en kornklass inte anger något av dessa attribut, är standardvärdet OneInstancePerClusterAttribute, eller GlobalSingleInstanceAttribute om konfigurationsparametern GlobalConfiguration.UseGlobalSingleInstanceByDefault är inställd på true
.
Protokoll för globala korn med en enskild instans
När ett GSI-korn (global-single-instance) används och ingen aktivering är känd för att finnas, körs ett särskilt GSI-aktiveringsprotokoll innan en ny instans aktiveras. Mer specifikt skickas en begäran till alla andra kluster i den aktuella konfigurationen för flera kluster för att kontrollera om de redan har aktivering för det här kornet. Om alla svar är negativa skapas en ny aktivering i det här klustret. I annat fall används fjärraktiveringen (och en referens till den cachelagras i den lokala katalogen).
Protokoll för en instans per klusterkorn
Det finns ingen kommunikation mellan kluster för one-instance-per-cluster-korn. De använder helt enkelt standardmekanismen Orleans oberoende av varandra i varje kluster. I själva ramverket Orleans markeras följande kornklasser med OneInstancePerClusterAttribute:
ManagementGrain
SystemTargetBasedMembershipTable
GrainBasedReminderTable
Tveksam aktivering
Om GSI-protokollet inte tar emot avgörande svar från alla kluster efter 3 återförsök (eller vilket tal som anges av konfigurationsparametern GlobalSingleInstanceNumberRetries) skapar det en ny lokal "tveksam" aktivering optimistiskt, vilket gynnar tillgänglighet framför konsekvens.
Tveksamma aktiveringar kan vara dubbletter (eftersom vissa fjärrkluster som inte svarade under GSI-protokollaktiveringen ändå kan ha aktivering av det här kornet). Därför körs GSI-protokollet regelbundet var 30:e sekund (eller vilket intervall som helst som anges av konfigurationsparametern GlobalSingleInstanceRetryInterval) igen för alla tveksamma aktiveringar. Detta säkerställer att dubbletter av aktiveringar kan identifieras och tas bort när kommunikationen mellan kluster har återställts.