異種サイロの概要
特定のクラスター上で、サイロはさまざまなグレイン タイプのセットをサポートできます。
この例では、クラスターは A
、B
、C
、D
、E
の種類のグレインをサポートしています。
- グレイン タイプ
A
とB
はサイロ 1 と 2 に配置できます。 - グレイン タイプ
C
はサイロ 1、2、または 3 に配置できます。 - グレイン タイプ
D
はサイロ 3 にのみ配置できます - グレイン タイプ
E
はサイロ 4 にのみ配置できます
すべてのサイロは、クラスターの全グレイン タイプのインターフェイスを参照する必要があります。ただし、グレイン クラスを参照するのは、それらをホストするサイロに限定する必要があります。 クライアントは、特定のグレイン タイプをサポートしているのがどのサイロかを認識していません。
重要
特定のグレイン タイプの実装は、それをサポートする各サイロで同じにする必要があります。
次のシナリオは有効では "ありません"。
サイロ 1 と 2:
public class C: Grain, IMyGrainInterface
{
public Task SomeMethod() { /* ... */ }
}
サイロ 3:
public class C: Grain, IMyGrainInterface, IMyOtherGrainInterface
{
public Task SomeMethod() { /* ... */ }
public Task SomeOtherMethod() { /* ... */ }
}
構成
構成は必要ありません。クラスターの各サイロにさまざまなバイナリを配置できます。 ただし、必要に応じて、TypeManagementOptions.TypeMapRefreshInterval プロパティでサポートされる種類の変化について、サイロとクライアントが確認する間隔を変更できます。
テスト目的でプロパティ GrainClassOptions.ExcludedGrainTypes を使用できます。これは、サイロ上で除外する種類の名前の一覧です。
制限事項
- サポートされるグレイン タイプのセットが変更されても、接続済みクライアントには通知されません。 前の例では:
- サイロ 4 がクラスターを離脱した場合でも、クライアントはグレイン タイプ
E
の呼び出しを試みます。 これは実行時に OrleansException で失敗します。 - クライアントがクラスターに接続してからサイロ 4 がそこに参加した場合、クライアントはグレイン タイプ
E
を呼び出すことができません。 これは ArgumentException で失敗します。
- サイロ 4 がクラスターを離脱した場合でも、クライアントはグレイン タイプ
- ステートレス グレインはサポートされていません。クラスター内のすべてのサイロは、同じステートレス グレインのセットをサポートする必要があります。
- ImplicitStreamSubscriptionAttribute はサポートされていないため、Orleans Streams では明示的なサブスクリプションのみを使用できます。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
.NET