次の方法で共有


グレインの調整属性

開発者は、クラスターが特定のグレイン クラスに関してグレイン ディレクトリを調整するタイミングと方法を示すことができます。 GlobalSingleInstanceAttribute は、単一のグローバル クラスターで Orleans を実行する場合と同じ動作が必要であることを意味します。つまり、すべての呼び出しをグレインの単一のアクティブ化にルーティングします。 逆に、[OneInstancePerCluster] 属性は、各クラスターが独立したアクティブ化を行うことができることを示します。 これは、クラスター間の通信が望ましくない場合に適しています。

属性はグレイン実装に配置されます。 次に例を示します。

using Orleans.MultiCluster;

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

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

グレイン クラスでこれらの属性のいずれかが指定されていない場合、既定値は OneInstancePerClusterAttribute に設定され、構成パラメーター GlobalConfiguration.UseGlobalSingleInstanceByDefaulttrue に設定されている場合は GlobalSingleInstanceAttribute に設定されます。

グローバル シングル インスタンス グレインのプロトコル

グローバル シングル インスタンス (GSI) グレインにアクセスし、アクティブ化が存在しない場合は、新しいインスタンスをアクティブ化する前に特別な GSI アクティブ化プロトコルが実行されます。 具体的には、現在のマルチクラスター構成内の他のすべてのクラスターに要求が送信され、既にこのグレインのアクティブ化があるかがチェックされます。 すべての応答が否定の場合は、このクラスターに新しいアクティブ化が作成されます。 それ以外の場合は、リモート アクティブ化が使用されます (また、それに対する参照はローカル ディレクトリにキャッシュされます)。

クラスターごとに 1 つのインスタンスのグレインのプロトコル

クラスターごとに 1 つのインスタンスのグレインのクラスター間通信はありません。 これらは、各クラスター内で独立して標準 Orleans メカニズムを使用するだけです。 Orleans フレームワーク自体の内部では、次のグレイン クラスは OneInstancePerClusterAttribute でマークされます。

  • ManagementGrain
  • SystemTargetBasedMembershipTable
  • GrainBasedReminderTable

疑わしいアクティブ化

GSI プロトコルは、3 回の再試行 (または構成パラメーター GlobalSingleInstanceNumberRetries で指定された数値) の後にすべてのクラスターから決定的な応答を受信しない場合、新しいローカルの "疑わしい" アクティブ化をオプティミスティックに作成し、一貫性よりも可用性を優先します。

疑わしいアクティブ化が重複している可能性があります (GSI プロトコルのアクティブ化中に応答しなかった一部のリモート クラスターで、このグレインがアクティブ化される場合があるため)。 そのため、疑わしいすべてのアクティブ化に対して、定期的に 30 秒 (または構成パラメーター GlobalSingleInstanceRetryInterval で指定された間隔) ごとに GSI プロトコルが再度実行されます。 これにより、クラスター間の通信が復元されると、重複したアクティブ化を検出して削除できるようになります。