Atrybuty koordynacji ziarna

Deweloperzy mogą wskazać, kiedy i jak klastry powinny koordynować katalogi ziarna dotyczące określonej klasy ziarna. Oznacza GlobalSingleInstanceAttribute to, że chcemy tego samego zachowania, co podczas uruchamiania Orleans w jednym klastrze globalnym: oznacza to kierowanie wszystkich wywołań do pojedynczej aktywacji ziarna. Z drugiej strony atrybut wskazuje, [OneInstancePerCluster] że każdy klaster może mieć niezależną aktywację. Jest to odpowiednie w przypadku niepożądanej komunikacji między klastrami.

Atrybuty są umieszczane w implementacjach ziarna. Na przykład:

using Orleans.MultiCluster;

[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
   // ...
}

[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
   // ...
}

Jeśli klasa ziarna nie określi jednego z tych atrybutów, wartość domyślna OneInstancePerClusterAttributeto , lub GlobalSingleInstanceAttribute jeśli parametr GlobalConfiguration.UseGlobalSingleInstanceByDefault konfiguracji ma wartość true.

Protokół dla globalnych ziarna pojedynczego wystąpienia

Gdy uzyskuje się dostęp do ziarna globalnego pojedynczego wystąpienia (GSI) i nie wiadomo, że aktywacja istnieje, przed aktywowaniem nowego wystąpienia jest wykonywany specjalny protokół aktywacji GSI. W szczególności żądanie jest wysyłane do wszystkich innych klastrów w bieżącej konfiguracji wielu klastrów, aby sprawdzić, czy mają już aktywację dla tego ziarna. Jeśli wszystkie odpowiedzi są ujemne, w tym klastrze zostanie utworzona nowa aktywacja. W przeciwnym razie używana jest aktywacja zdalna (a odwołanie do niej jest buforowane w katalogu lokalnym).

Protokół dla jednego wystąpienia na ziarna klastra

Nie ma komunikacji między klastrami dla ziarna jeden-wystąpienie na klaster. Po prostu używają standardowego Orleans mechanizmu niezależnie w każdym klastrze. Orleans W samej strukturze następujące klasy ziarna są oznaczone znakiem OneInstancePerClusterAttribute:

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

Wątpliwe aktywacje

Jeśli protokół GSI nie odbiera jednoznacznych odpowiedzi ze wszystkich klastrów po 3 ponownych próbach (lub dowolnej liczbie określonej przez parametr GlobalSingleInstanceNumberRetrieskonfiguracji), tworzy nową lokalną aktywację "wątpliwą" optymistycznie, faworyzując dostępność w związku z spójnością.

Wątpliwe aktywacje mogą być duplikatami (ponieważ niektóre klastry zdalne, które nie odpowiedziały podczas aktywacji protokołu GSI, mogą jednak mieć aktywację tego ziarna). W związku z tym okresowo co 30 sekund (lub cokolwiek interwał jest określony przez parametr GlobalSingleInstanceRetryIntervalkonfiguracji ) protokół GSI jest uruchamiany ponownie dla wszystkich wątpliwych aktywacji. Dzięki temu po przywróceniu komunikacji między klastrami można wykryć i usunąć zduplikowane aktywacje.