基本的な概念

完了

Orleans は、分散型でスケーラブルなアプリケーションの構築プロセスを簡素化します。 Orleans と効果的に連携するためには、理解する必要があるいくつかの主要な概念があります。

Orleans は、1970 年代から存在する確立された設計パターンである「アクターモデル」を中心に構築されています。 Orleans の使用を開始するためにアクター モデルを深く理解する必要はありませんが、より複雑なアプリを構築するにつれてこのパターンに精通することが必要になります。 現時点では、Grain や Silo などのいくつかの重要な概念を基本的に理解していれば、この後の演習を簡単に完了できます。

グレインとは

Grain は、Orleans アプリケーションの最も重要なプリミティブであり構成要素です。 それらはアクター モデルにおけるアクターを表し、ショッピング カートや製品などのエンティティの状態データと動作を定義します。 Grain はそれぞれユーザー定義キーによって識別および追跡され、他の Grain やクライアントからアクセスできます。

A diagram of the anatomy of a grain.

Grain は、Silo (後に探索する) に格納されます。 現在アクティブであり、アプリケーションで使用されている Grain はメモリ内に残りますが、非アクティブな Grain はストレージに保持できます。 アプリで必要な場合や要求されると、Grain は再びアクティブになります。 Grain には管理されたライフ サイクルがあります。つまり、アプリケーションの必要性に応じて Grain のアクティブ化、非アクティブ化、格納、および検出が Orleans ランタイムによって処理されます。 開発者は、これらの懸念事項を自身で管理することを心配することなく、Grain がメモリ内で使用可能であることを前提としてコードを記述できます。

A diagram of the grain life cycle.

Grain はどのように実装されるか

より明確なコーディング用語では、Grain は Grain 基底クラスから継承されるクラスです。 Grain クラスは、Orleans フレームワークを使用して、さまざまな内部動作と統合ポイントを管理します。 Grain クラスでは、以下に示す Grain インターフェイスの種類のいずれかが実装されている必要もあります。 これらの各インターフェイスは、同様のコントラクトを定義していますが、Grain を追跡するために Orleans で使用される識別子に対して異なるデータ型 (stringinteger など) でクラスにマークを付けます。

  • IGrainWithGuidKey
  • IGrainWithIntegerKey
  • IGrainWithStringKey
  • IGrainWithGuidCompoundKey
  • IGrainWithIntegerCompoundKey

次のコードでは、Grain の基底クラスから継承され、識別子インターフェイスのいずれかを実装する単純な Grain クラス定義を示しています。

public class UrlShortenerGrain : Grain, IGrainWithStringKey
{
    // Custom grain implementation details
}

Grain では、通常、カスタム データと動作を管理するために、ユーザーが設計したインターフェイスも実装されます。 URL 短縮サービスのサンプル Grain インターフェイスは、次のコードのようになります。

public interface IUrlShortenerGrain
{
    Task SetUrl(string url);
    Task<string?> GetUrl();
}

IUrlShortenerGrain インターフェイスを実装するには、次の UrlShortenerGrain クラスを検討してください。

public sealed class UrlShortenerGrain
    : Grain, IGrainWithStringKey, IUrlShortenerGrain
{
    public Task SetUrl(string shortenedRouteSegment, string url)
    {
        // TODO: Implementation details
    }

    public Task<string?> GetUrl()
    {
        // TODO: Implementation details
    }
}

Silo とは

Silo は Grain の格納を担当する、Orleans のもう一つの中核的な構成要素です。 Silo には、1 つ以上の Grain を含めることができます。Silo のグループはクラスターと呼ばれます。 クラスターは Silo 間の作業を調整して、あたかもすべてが 1 つのプロセス内で使用可能であるかのように Grain との通信を行うことができます。 さまざまな種類の Grain をさまざまな Silo に格納することによってデータを整理できます。 アプリケーションは、クラスター内での管理方法の詳細を気にすることなく、個々の Grain を取得できます。

A diagram of silo architecture.

クラスターと Silo は、Orleans の初期セットアップの一環として、プロジェクトの Program.cs クラスに構成されます。

builder.Host.UseOrleans(siloBuilder =>
{
    siloBuilder.UseLocalhostClustering();
});

Orleans では、ストリームや ACID トランザクションなど、より具体的または高度なシナリオ向けに、他にも多くの機能がサポートされています。 これらの機能は、より複雑なアプリの構築を開始するときに検討できます。 次に、基本的なアプリケーションを作成し、いくつかの基本的な構成を適用して Orleans の使用を開始します。