Teilen über


Koordinationsattribute von Grains

Entwickler können angeben, wann und wie Cluster ihre Grain-Verzeichnisse in Bezug auf eine bestimmte Grain-Klasse koordinieren sollen. GlobalSingleInstanceAttribute bedeutet, dass wir das gleiche Verhalten wie bei der Ausführung von Orleans in einem einzelnen globalen Cluster wünschen. Das heißt, dass alle Aufrufe an eine einzelne Aktivierung des Grains weitergeleitet werden. Im Gegensatz dazu gibt das [OneInstancePerCluster]-Attribut an, dass für jeder Cluster eine eigene unabhängige Aktivierung möglich ist. Dies ist geeignet, wenn Kommunikation zwischen Clustern unerwünscht ist.

Die Attribute werden in Implementierungen von Grains platziert. Beispiel:

using Orleans.MultiCluster;

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

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

Wenn eine Grain-Klasse keines dieser Attribute angibt, wird sie standardmäßig auf OneInstancePerClusterAttribute oder aber auf GlobalSingleInstanceAttribute festgelegt, wenn der Konfigurationsparameter GlobalConfiguration.UseGlobalSingleInstanceByDefault auf true festgelegt ist.

Protokoll für globale Grains mit Einzelinstanz

Auf ein globales Grain mit Einzelinstanz (Global-Single-Instance, GSI) zugegriffen wird und bekanntermaßen keine Aktivierung vorhanden ist, wird ein spezielles GSI-Aktivierungsprotokoll ausgeführt, ehe eine neue Instanz aktiviert wird. Konkret wird eine Anforderung an alle anderen Cluster in der aktuellen Konfiguration mit mehreren Clustern gesendet, um zu prüfen, ob sie bereits über eine Aktivierung für dieses Grain verfügen. Wenn alle Antworten negativ sind, wird in diesem Cluster eine neue Aktivierung erstellt. Andernfalls wird die Remoteaktivierung verwendet (und ein Verweis darauf im lokalen Verzeichnis zwischengespeichert).

Protokoll für Grains des Typs „Eine Instanz pro Cluster“

Es gibt keine Kommunikation zwischen Clustern für Grains des Typs „Eine Instanz pro Cluster“. Sie verwenden einfach unabhängig voneinander den standardmäßigen Orleans-Mechanismus innerhalb jedes Clusters. Innerhalb des Orleans-Frameworks selbst sind die folgenden Grain-Klassen mit OneInstancePerClusterAttribute gekennzeichnet:

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

Zweifelhafte Aktivierungen

Wenn das GSI-Protokoll nach drei Wiederholungen (oder der im Konfigurationsparameter GlobalSingleInstanceNumberRetries angegebenen Anzahl) keine schlüssigen Antworten von allen Clustern erhält, erstellt es optimistisch eine neue lokale „zweifelhafte“ Aktivierung, wobei es Verfügbarkeit über Konsistenz stellt.

Zweifelhafte Aktivierungen können Duplikate sein (da einige Remotecluster, die während der Aktivierung des GSI-Protokolls nicht reagierten, trotzdem über eine Aktivierung dieses Grains verfügen können). Daher wird das GSI-Protokoll regelmäßig alle 30 Sekunden (oder abhängig vom in Konfigurationsparameter GlobalSingleInstanceRetryInterval angegeben Intervall) für alle zweifelhaften Aktivierungen erneut ausgeführt. Dadurch wird sichergestellt, dass nach Wiederherstellung der Kommunikation zwischen Clustern doppelte Aktivierungen erkannt und entfernt werden können.