Dela via


Koordinationsattribut för korn

Du kan ange när och hur kluster ska samordna sina kornkataloger för en viss kornklass. Det GlobalSingleInstanceAttribute innebär att du vill ha samma beteende som när du kör Orleans i ett enda globalt kluster: dirigera alla anrop till en enda aktivering av enheten. Attributet [OneInstancePerCluster] anger däremot att varje kluster kan ha sin oberoende aktivering. Detta är lämpligt om du inte vill ha kommunikation mellan kluster.

Placera attributen 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. Det blir dock standardinställningen om du anger konfigurationsparametern GlobalSingleInstanceAttribute till GlobalConfiguration.UseGlobalSingleInstanceByDefault.

Protokoll för globala korn med en enskild instans

När du får tillgång till ett GSI-korn (global-single-instance) och det inte finns någon känd aktivering, kör Orleans ett särskilt GSI-aktiveringsprotokoll innan det aktiverar en ny instans. Mer specifikt skickar den en begäran till alla andra kluster i den aktuella konfigurationen för flera kluster för att kontrollera om de redan har en aktivering för det här kornet. Om alla svar är negativa Orleans skapar du en ny aktivering i det aktuella klustret. I annat fall använder den fjärraktiveringen (och cachelagrar en referens till den i den lokala katalogen).

Protokoll för grains med en instans per kluster

Det finns ingen kommunikation mellan kluster för ett-instans-per-kluster-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

Tveksamma aktiveringar

Om GSI-protokollet inte tar emot avgörande svar från alla kluster efter tre återförsök (eller det nummer som anges av GlobalSingleInstanceNumberRetries konfigurationsparametern) skapar det optimistiskt en ny lokal "tveksam" aktivering, vilket gynnar tillgänglighet framför konsekvens.

"Tveksamt" innebär att aktiveringen möjligen kan vara en dubblett eftersom ett fjärrkluster som inte svarade under GSI-protokollet kanske fortfarande har en aktivering för det här kornet. Därför kör GlobalSingleInstanceRetryInterval GSI-protokollet med jämna mellanrum, var 30:e sekund (eller det intervall som anges av Orleans konfigurationsparametern), igen för alla tveksamma aktiveringar. Den här processen säkerställer att systemet kan identifiera och ta bort dubblettaktiveringar när kommunikationen mellan kluster har återställts.