Orleans 2.0公式文書-5.5.4クラスタとクライアント->構成ガイド->サービス側構成

7603 ワード

に注意
開発のためにローカルsiloとローカルクライアントを起動する場合は、「ローカル開発構成」章を参照してください.

サービス側構成


Siloは、SiloHostBuilderおよびいくつかの補足オプションクラスによってプログラミング方式で構成される.OrleansのオプションクラスはASPに従う.NETオプションモードは、ファイル、環境変数などでロードできます.
Siloの構成にはいくつかの重要な点があります.
  • Orleansクラスタ情報
  • クラスタプロバイダ
  • silo-to-siloおよびclient-to-silo通信のためのエンドポイント
  • アプリケーション部
  • これは、Azureクラスタを使用してアプリケーションセクションを構成するクラスタ情報を定義するsilo構成例です.
    var silo = new SiloHostBuilder()
        // Clustering information
        .Configure(options =>
        {
            options.ClusterId = "my-first-cluster";
            options.ServiceId = "MyAwesomeOrleansService";
        })
        // Clustering provider
        .UseAzureStorageClustering(options => options.ConnectionString = connectionString)
        // Endpoints
        .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
        // Application parts: just reference one of the grain implementations that we use
        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences())
        // Now create the silo!
        .Build();
    

    この例で使用する手順を分析します.

    Orleansクラスタ情報

        [...]
        // Clustering information
        .Configure(options =>
        {
            options.ClusterId = "orleans-docker";
            options.ServiceId = "AspNetSampleApp";
        })
        [...]
    

    ここで私たちは2つのことをします.
  • ClusterId"orleans-docker"に設定します.これはOrleansクラスタの一意のIDです.このIDを使用するすべてのクライアントとsiloは、直接通信することができます.ただし、異なる導入のために異なるClusterIdを使用することもできます.
  • は、ServiceId"AspNetSampleApp"に設定します.これはアプリケーションの一意のIDであり、永続化プロバイダなどの特定のプロバイダによって使用されます.このIDは、導入時に変更されずに安定している必要があります.

  • クラスタプロバイダ

        [...]
        // Clustering provider
        .UseAzureStorageClustering(options => options.ConnectionString = connectionString)
        [...]
    

    Orleans上に構築されたサービスは、通常、ノードのセットがあるクラスタに配備され、クラスタは専用ハードウェア上でもAzure中でもよい.開発および基本的なテストの場合、Orleansは単一のノードに配置できます.ノードのセットがあるクラスタに配備されると、Orleansは内部でプロトコルのセットを実装し、ノード障害の検出と自動再構成を含むクラスタ内のOrleans siloのメンバーシップの検出と維持を行います.
    クラスタメンバーシップを確実に管理するために、OrleansはAzure Table、SQL ServerまたはApache ZooKeeperを使用してノード同期を行います.
    この例では、Azure Tableをメンバーシッププロバイダとして使用します.

    エンドポイント

    var silo = new SiloHostBuilder()
        [...]
        // Endpoints
        .ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)
        [...]
    

    Orleans siloには、2つの典型的なエンドポイント構成があります.
  • silo-to-siloエンドポイント、同一クラスタにおけるsilo間の通信に用いる
  • client-to-siloエンドポイント(またはゲートウェイ)は、同じクラスタ内のクライアントとsiloとの間の通信
  • に用いる.
    例では、ヘルプメソッド.ConfigureEndpoints(siloPort: 11111, gatewayPort: 30000)を使用して、silo−to−silo通信用のポートを11111に設定し、ゲートウェイ用のポートを30000に設定する.このメソッドは、どのインタフェースをリスニングするかを検出します.
    ほとんどの場合、この方法は十分であるはずですが、必要に応じてさらにカスタマイズできます.以下に、外部IPアドレスを使用して特定のポートに転送する方法の例を示します.
    [...]
    .Configure(options =>
    {
        // Port to use for Silo-to-Silo
        options.SiloPort = 11111;
        // Port to use for the gateway
        options.GatewayPort = 30000;
        // IP Address to advertise in the cluster
        options.AdvertisedIPAddress = IPAddress.Parse("172.16.0.42");
        // The socket used for silo-to-silo will bind to this endpoint
        options.GatewayListeningEndpoint = new IPEndPoint(IPAddress.Any, 40000);
        // The socket used by the gateway will bind to this endpoint
        options.SiloListeningEndpoint = new IPEndPoint(IPAddress.Any, 50000);
    
    })
    [...]
    

    内部では、siloは0.0.0.0:40000および0.0.0.0:50000をリスニングするが、メンバーシッププロバイダに公開される値は172.16.0.42:11111および172.16.0.42:30000になる.

    適用セクション

        [...]
        // Application parts: just reference one of the grain implementations that we use
        .ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ValueGrain).Assembly).WithReferences())
        [...];
    

    この手順は技術的に必要ではありませんが(構成されていない場合、Orleansは現在のフォルダ内のすべてのプログラムセットをスキャンします)、開発者にこの手順を構成することをお勧めします.この手順では、Orleansがユーザー・プログラム・セットとタイプをロードするのに役立ちます.これらのプログラムセットをアプリケーションコンポーネントと呼びます.すべてのgrain、grainインタフェース、シーケンス化器は、アプリケーションコンポーネントを使用して発見されます.
    アプリケーション・コンポーネントは、IApplicationPartsManagerを使用して構成され、IClientBuilderおよびISiloHostBuilderの拡張方法ConfigureApplicationPartsによってアクセスして質問することができる.ConfigureApplicationParts方法は、Actionという依頼を受ける.IApplicationPartManagerは、次の一般的な拡張方法をサポートします.
  • AddApplicationPart(assembly)は、この拡張方法を使用して単一のプログラムセットを追加することができる.
  • AddFromAppDomain()現在AppDomainにロードされているすべてのプログラムセットが追加されます.
  • AddFromApplicationBaseDirectory()現在の基本パスのすべてのプログラムセットをロードして追加します(参照資料AppDomain.BaseDirectoryを参照).

  • 上記の方法で追加されたプログラムセットは、以下の拡張方法を用いて、返されるタイプIApplicationPartManagerWithAssembliesについて補足することができる.
  • WithReferences()追加されたコンポーネントから、参照されるすべてのプログラムセットが追加されます.これにより、転送参照のプログラムセットがすぐにロードされます.アセンブリロードエラーは無視されます.
  • WithCodeGeneration()追加された部品のサポートコードを生成し、部品マネージャに追加します.これは、通常、ランタイムコード生成と呼ばれるMicrosoft.Orleans.OrleansCodeGeneratorパケットをインストールする必要があることに注意してください.

  • タイプ検出には、指定したアプリケーション・コンポーネントに特定のプロパティが含まれます.構築時コード生成パケット(Microsoft.Orleans.CodeGenerator.MSBuildまたはMicrosoft.Orleans.OrleansCodeGenerator.Build)をGrains,Grain Interfacesまたはシーケンス化器を含む各項目に追加することは、これらの属性が存在することを保証する推奨方法である.構築時のコード生成はC#のみをサポートします.F#、Visual Basicその他について.NET言語は、構成中に上記のWithCodeGeneration()の方法でコードを生成することができる.コード生成の詳細については、該当する章を参照してください.