次の方法で共有


異種サイロの概要

特定のクラスター上で、サイロはさまざまなグレイン タイプのセットをサポートできます。

Heterogeneous silos overview diagram.

この例では、クラスターは ABCDE の種類のグレインをサポートしています。

  • グレイン タイプ AB はサイロ 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 で失敗します。
  • ステートレス グレインはサポートされていません。クラスター内のすべてのサイロは、同じステートレス グレインのセットをサポートする必要があります。
  • ImplicitStreamSubscriptionAttribute はサポートされていないため、Orleans Streams では明示的なサブスクリプションのみを使用できます。