Attributs de coordination de grain
Les développeurs peuvent indiquer quand et comment les clusters doivent coordonner leurs annuaires de grains pour une classe de grain particulière. Le GlobalSingleInstanceAttribute signifie que nous voulons le même comportement que lors de l’exécution d’Orleans dans un seul cluster global, c’est-à-dire router tous les appels vers une même activation du grain. À l’inverse, l’attribut [OneInstancePerCluster]
indique que chaque cluster peut avoir son activation indépendante. Cela est approprié si la communication entre les clusters n’est pas souhaitée.
Les attributs sont placés sur les implémentations de grain. Par exemple :
using Orleans.MultiCluster;
[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
// ...
}
[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
// ...
}
Si une classe de grain ne spécifie aucun de ces attributs, sa valeur par défaut est OneInstancePerClusterAttribute, ou GlobalSingleInstanceAttribute si le paramètre de configuration GlobalConfiguration.UseGlobalSingleInstanceByDefault a la valeur true
.
Protocole pour les grains GSI (Global Single Instance)
En cas d’accès à un grain GSI (Global Single Instance) pour lequel il n’existe pas d’activation connue, un protocole d’activation GSI spécial est exécuté avant l’activation d’une nouvelle instance. Plus précisément, une requête est envoyée à tous les autres clusters de la configuration multicluster pour vérifier s’ils disposent déjà d’une activation pour ce grain. Si toutes les réponses sont négatives, une nouvelle activation est créée dans ce cluster. Sinon, l’activation à distance est utilisée (et une référence à celle-ci est mise en cache dans l’annuaire local).
Protocole pour les grains OIPC (One Instance Per Cluster)
Il n’existe aucune communication intercluster pour les grains OIPC (One Instance Per Cluster). Ils utilisent simplement le mécanisme Orleans standard de manière indépendante dans chaque cluster. Dans le framework Orleans lui-même, les classes de grain suivantes sont marquées avec le OneInstancePerClusterAttribute :
ManagementGrain
SystemTargetBasedMembershipTable
GrainBasedReminderTable
Activations incertaines
Si le protocole GSI ne reçoit pas de réponses concluantes de tous les clusters après 3 nouvelles tentatives (ou toute autre valeur spécifiée par le paramètre de configuration GlobalSingleInstanceNumberRetries), il crée une activation locale « incertaine » de manière optimiste, en favorisant la disponibilité à la cohérence.
Les activations incertaines peuvent être des doublons (car certains clusters distants qui n’ont pas répondu durant l’activation du protocole GSI peuvent néanmoins avoir une activation de ce grain). Ainsi, toutes les 30 secondes (ou tout autre intervalle spécifié par le paramètre de configuration GlobalSingleInstanceRetryInterval), le protocole GSI est réexécuté pour toutes les activations incertaines. Cela permet de garantir la détection et la suppression des activations dupliquées, une fois la communication entre les clusters restaurée.