Orleans 2.0公式文書-5.5.4クラスタとクライアント->構成ガイド->サービス側構成
7603 ワード
に注意
開発のためにローカルsiloとローカルクライアントを起動する場合は、「ローカル開発構成」章を参照してください.
Siloは、
Siloの構成にはいくつかの重要な点があります. Orleansクラスタ情報 クラスタプロバイダ silo-to-siloおよびclient-to-silo通信のためのエンドポイント アプリケーション部 これは、Azureクラスタを使用してアプリケーションセクションを構成するクラスタ情報を定義するsilo構成例です.
この例で使用する手順を分析します.
ここで私たちは2つのことをします. は、
Orleans上に構築されたサービスは、通常、ノードのセットがあるクラスタに配備され、クラスタは専用ハードウェア上でもAzure中でもよい.開発および基本的なテストの場合、Orleansは単一のノードに配置できます.ノードのセットがあるクラスタに配備されると、Orleansは内部でプロトコルのセットを実装し、ノード障害の検出と自動再構成を含むクラスタ内のOrleans siloのメンバーシップの検出と維持を行います.
クラスタメンバーシップを確実に管理するために、OrleansはAzure Table、SQL ServerまたはApache ZooKeeperを使用してノード同期を行います.
この例では、Azure Tableをメンバーシッププロバイダとして使用します.
Orleans siloには、2つの典型的なエンドポイント構成があります. silo-to-siloエンドポイント、同一クラスタにおけるsilo間の通信に用いる client-to-siloエンドポイント(またはゲートウェイ)は、同じクラスタ内のクライアントとsiloとの間の通信 に用いる.
例では、ヘルプメソッド
ほとんどの場合、この方法は十分であるはずですが、必要に応じてさらにカスタマイズできます.以下に、外部IPアドレスを使用して特定のポートに転送する方法の例を示します.
内部では、siloは
この手順は技術的に必要ではありませんが(構成されていない場合、Orleansは現在のフォルダ内のすべてのプログラムセットをスキャンします)、開発者にこの手順を構成することをお勧めします.この手順では、Orleansがユーザー・プログラム・セットとタイプをロードするのに役立ちます.これらのプログラムセットをアプリケーションコンポーネントと呼びます.すべてのgrain、grainインタフェース、シーケンス化器は、アプリケーションコンポーネントを使用して発見されます.
アプリケーション・コンポーネントは、
上記の方法で追加されたプログラムセットは、以下の拡張方法を用いて、返されるタイプ
タイプ検出には、指定したアプリケーション・コンポーネントに特定のプロパティが含まれます.構築時コード生成パケット(
開発のためにローカルsiloとローカルクライアントを起動する場合は、「ローカル開発構成」章を参照してください.
サービス側構成
Siloは、
SiloHostBuilder
およびいくつかの補足オプションクラスによってプログラミング方式で構成される.OrleansのオプションクラスはASPに従う.NETオプションモードは、ファイル、環境変数などでロードできます.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つの典型的なエンドポイント構成があります.
例では、ヘルプメソッド
.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()
の方法でコードを生成することができる.コード生成の詳細については、該当する章を参照してください.