グレインの調整属性
開発者は、クラスターが特定のグレイン クラスに関してグレイン ディレクトリを調整するタイミングと方法を示すことができます。 GlobalSingleInstanceAttribute は、単一のグローバル クラスターで Orleans を実行する場合と同じ動作が必要であることを意味します。つまり、すべての呼び出しをグレインの単一のアクティブ化にルーティングします。 逆に、[OneInstancePerCluster]
属性は、各クラスターが独立したアクティブ化を行うことができることを示します。 これは、クラスター間の通信が望ましくない場合に適しています。
属性はグレイン実装に配置されます。 次に例を示します。
using Orleans.MultiCluster;
[GlobalSingleInstance]
public class MyGlobalGrain : Orleans.Grain, IMyGrain
{
// ...
}
[OneInstancePerCluster]
public class MyLocalGrain : Orleans.Grain, IMyGrain
{
// ...
}
グレイン クラスでこれらの属性のいずれかが指定されていない場合、既定値は OneInstancePerClusterAttribute に設定され、構成パラメーター GlobalConfiguration.UseGlobalSingleInstanceByDefault が true
に設定されている場合は GlobalSingleInstanceAttribute に設定されます。
グローバル シングル インスタンス グレインのプロトコル
グローバル シングル インスタンス (GSI) グレインにアクセスし、アクティブ化が存在しない場合は、新しいインスタンスをアクティブ化する前に特別な GSI アクティブ化プロトコルが実行されます。 具体的には、現在のマルチクラスター構成内の他のすべてのクラスターに要求が送信され、既にこのグレインのアクティブ化があるかがチェックされます。 すべての応答が否定の場合は、このクラスターに新しいアクティブ化が作成されます。 それ以外の場合は、リモート アクティブ化が使用されます (また、それに対する参照はローカル ディレクトリにキャッシュされます)。
クラスターごとに 1 つのインスタンスのグレインのプロトコル
クラスターごとに 1 つのインスタンスのグレインのクラスター間通信はありません。 これらは、各クラスター内で独立して標準 Orleans メカニズムを使用するだけです。 Orleans フレームワーク自体の内部では、次のグレイン クラスは OneInstancePerClusterAttribute でマークされます。
ManagementGrain
SystemTargetBasedMembershipTable
GrainBasedReminderTable
疑わしいアクティブ化
GSI プロトコルは、3 回の再試行 (または構成パラメーター GlobalSingleInstanceNumberRetries で指定された数値) の後にすべてのクラスターから決定的な応答を受信しない場合、新しいローカルの "疑わしい" アクティブ化をオプティミスティックに作成し、一貫性よりも可用性を優先します。
疑わしいアクティブ化が重複している可能性があります (GSI プロトコルのアクティブ化中に応答しなかった一部のリモート クラスターで、このグレインがアクティブ化される場合があるため)。 そのため、疑わしいすべてのアクティブ化に対して、定期的に 30 秒 (または構成パラメーター GlobalSingleInstanceRetryInterval で指定された間隔) ごとに GSI プロトコルが再度実行されます。 これにより、クラスター間の通信が復元されると、重複したアクティブ化を検出して削除できるようになります。
.NET