Attributi di coordinamento della granularità
Gli sviluppatori possono indicare quando e come i cluster devono coordinare le directory di granularità relative a una determinata classe di granularità. GlobalSingleInstanceAttribute indica che si vuole lo stesso comportamento dell'esecuzione Orleans in un singolo cluster globale, ovvero instradare tutte le chiamate a una singola attivazione della granularità. Viceversa, l'attributo [OneInstancePerCluster]
indica che ogni cluster può avere un'attivazione indipendente. Ciò è appropriato se la comunicazione tra cluster non è desiderata.
Gli attributi vengono inseriti nelle implementazioni granulari. Ad esempio:
using Orleans.MultiCluster;
[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
// ...
}
[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
// ...
}
Se una classe granulare non specifica uno di questi attributi, per impostazione predefinita è OneInstancePerClusterAttribute o GlobalSingleInstanceAttribute se il parametro di configurazione GlobalConfiguration.UseGlobalSingleInstanceByDefault è impostato su true
.
Protocollo per grani globali a istanza singola
Quando si accede a un livello GSI (Global-Single Instance) e non esiste alcuna attivazione, viene eseguito un protocollo di attivazione GSI speciale prima di attivare una nuova istanza. In particolare, una richiesta viene inviata a tutti gli altri cluster nella configurazione multi-cluster corrente per verificare se hanno già l'attivazione per questa granularità. Se tutte le risposte sono negative, viene creata una nuova attivazione in questo cluster. In caso contrario, viene usata l'attivazione remota (e viene memorizzato nella cache un riferimento nella directory locale).
Protocollo per un'istanza per grani di cluster
Non esiste alcuna comunicazione tra cluster per grani one-instance-per-cluster. Usano semplicemente il meccanismo standard Orleans in modo indipendente all'interno di ogni cluster. All'interno del framework Orleans stesso, le classi di granularità seguenti sono contrassegnate con il OneInstancePerClusterAttribute:
ManagementGrain
SystemTargetBasedMembershipTable
GrainBasedReminderTable
Attivazioni dubbie
Se il protocollo GSI non riceve risposte conclusive da tutti i cluster dopo 3 tentativi (o qualsiasi numero specificato dal parametro di configurazione GlobalSingleInstanceNumberRetries), crea una nuova attivazione locale "dubbia" in modo ottimistico, favorendo la disponibilità rispetto alla coerenza.
Le attivazioni dubbie possono essere duplicate (perché alcuni cluster remoti che non hanno risposto durante l'attivazione del protocollo GSI possono tuttavia avere l'attivazione di questa granularità). Pertanto, periodicamente ogni 30 secondi (o qualsiasi intervallo specificato dal parametro di configurazione GlobalSingleInstanceRetryInterval) il protocollo GSI viene eseguito di nuovo per tutte le attivazioni dubbie. In questo modo, una volta ripristinata la comunicazione tra cluster, è possibile rilevare e rimuovere attivazioni duplicate.