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.