Partager via


Attributs de coordination des grains

Vous pouvez indiquer quand et comment les clusters doivent coordonner leurs répertoires de grains pour une classe de grain particulière. Cela GlobalSingleInstanceAttribute signifie que vous souhaitez le même comportement que lors de l’exécution Orleans dans un seul cluster global : routez tous les appels vers une seule activation du grain. À l’inverse, l’attribut [OneInstancePerCluster] indique que chaque cluster peut avoir son activation indépendante. Cela est approprié si vous ne souhaitez pas communiquer entre les clusters.

Placez les attributs 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 pas l’un de ces attributs, elle est par défaut OneInstancePerClusterAttribute. Toutefois, elle est définie sur GlobalSingleInstanceAttribute par défaut si vous définissez le paramètre de configuration GlobalConfiguration.UseGlobalSingleInstanceByDefault sur true.

Protocole pour les grains à instance unique globale

Lorsque vous accédez à un grain GSI (Global-Single-Instance), et qu’aucune activation n’existe, Orleans exécute un protocole d’activation GSI spécial avant d’activer une nouvelle instance. Plus précisément, il envoie une demande à tous les autres clusters dans la configuration multi-cluster actuelle pour vérifier s’ils ont déjà une activation pour ce grain. Si toutes les réponses sont négatives, Orleans crée une nouvelle activation dans le cluster actuel. Sinon, il utilise l’activation à distance (et met en cache une référence à celui-ci dans le répertoire local).

Protocole pour des grains à instance unique par cluster

Il n'y a pas de communication inter-clusters pour les grains qui sont limités à une seule instance par cluster. Ils utilisent simplement le mécanisme standard Orleans indépendamment au sein de chaque cluster. À l'intérieur du cadre Orleans lui-même, les classes de grain suivantes sont marquées avec le OneInstancePerClusterAttribute :

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

Activations douteuses

Si le protocole GSI ne reçoit pas de réponses concluantes de tous les clusters après 3 nouvelles tentatives (ou le nombre spécifié par le GlobalSingleInstanceNumberRetries paramètre de configuration), il crée de façon optimiste une nouvelle activation locale « douteuse », ce qui favorise la disponibilité par rapport à la cohérence.

« Douteux » signifie que l’activation peut être dupliquée, car un cluster distant qui n’a pas répondu pendant le protocole GSI peut toujours avoir une activation pour ce grain. Par conséquent, régulièrement, toutes les 30 secondes (ou l’intervalle spécifié par le GlobalSingleInstanceRetryInterval paramètre de configuration), Orleans exécute à nouveau le protocole GSI pour toutes les activations douteuses. Ce processus garantit qu’une fois la communication entre les clusters restaurée, le système peut détecter et supprimer des activations en double.