2016-08-26 3 views
0

私は、5分の処理時間を要するリクエストのストリームを処理できるシステムを構築しようとしています。私の目標は、最小限のリソース占有量で要求処理をスピードアップし、時にはメッセージのバーストにすることです。Akka.netロードバランシングとスパンアウト処理

service busのようなものを使用して、リクエストをキューに入れ、メッセージを購読して処理を開始できる複数のプロセス(akkaのアクター)を持つことができます。また、サービスバスの待ち行列の長さを調べ、より多くの俳優/俳優システムを作成したり、いくつかを停止したりするウォッチドッグを持つこともできます。

もし私がAkka.netのようなActorシステムでこれをやりたいのであれば、どうすればいいのですか?このような何かを言う:

  • 私は

  • 私の要求キューの長さに基づいてアップ/新しいリモート俳優・システムを停止スピンにしたいことがあり可能な役者のいずれかにメッセージを送ります送信側で処理する帯域幅を持つ人物を確認することなく処理を開始できます。

  • メッセージは失われてはならず、アクターが失敗した場合は、次に使用可能なアクターに渡す必要があります。

これはAkka.netで行うことができますが、これはアクターシステムの有効な使用例ではありません。ある人がいくつかの考えを共有したり、私が詳細を知ることができるリソースを教えてください。

+0

すでにシステムの前にServiceBusのようなものがある場合、私はあなたが探している利点は何もわかりません。 1. Akka.NETはツールキット/ライブラリです。それはあなたのプロセス内から使用されることを意図していますが、必要に応じて他のマシンを起動させることはありません。それにはリソースマネージャが必要です。 2.&3.サービスバス自体で解決することができます。 – Horusiath

+0

@ Horusiath:できるだけ早くWindowsサービスバス1.1から移行したいと思います。特にシステムがインターネットにアクセスできない場合は、当社のソリューションの一部として展開するのが苦痛です。 「akka.clustering」と呼ばれるものがあることがわかります。それがここを助けることができるかどうかを確かめてみてください。 – Kiran

答えて

0

私は私の要求キューの長さ

これはAkka.Clusterで箱から出してサポートされていないに基づいて新しいリモート俳優・システムを/スピンアップを停止することをお勧めします。あなたはそれのために何かカスタムを構築する必要があります。

しかし、Akka .NETには、設定可能なパラメータに従って自動的にサイズ変更できるpool routersがあります。あなたはそれらの周りに何かを構築することができるかもしれません。

送信側で処理する帯域幅を持つユーザーを確認せずに処理を開始できる利用可能な俳優のいずれかにメッセージを送信します。

Akka .NET Routersを見ると、作業を割り当てるためのさまざまな方法があります。 SmallestMailboxはおそらくあなたが行っていることに最も近いでしょう。

メッセージは失われてはならず、アクターが失敗した場合は、次の使用可能なアクターに渡す必要があります。

Akka .NETは、一度に配信します。詳細についてはin the docsまたはat the Petabridge blogをご覧ください。

+0

ありがとう、BTWルーターがルータからの通知ではなく、Perodic Askを行った解決策についてどう思いますか?すなわち、俳優が自由に多くの仕事を引き受けるときはいつでも、利用可能な仕事を親の俳優に処理して作業を依頼することができる。これは使用可能なパターンですか?どのような意味でも大きな落とし穴があります – Kiran

+1

要求/応答を行うことはスループットに影響を与えるため、通常はお勧めできません。理想的にはプッシュの観点から設計する。また、ルートを管理するルータである必要があります。実際には逆の関係にすべきではありません。プールルータを使用している場合は、そこにルートがいくつあるかを正確に知ることさえできません(自動的に管理されます)。 – Gigi

+0

もう一度、あなたのコメントに基づいていくつかの進歩を遂げましたが、プールアクターが負荷に基づいて成長することはありません。私は別の質問をしましたhttp://stackoverflow.com/questions/39205189/akka-net-why-are-my-pool-actors-not-scaling-up-or-down-based-on-loadあなたは私を助けてください? – Kiran

0

あなたはAkkaクラスターであなたの目標のいくつかを達成するかもしれませんが、私はそれをアドバイスしません。あなたの要求から、あなたの懸念事項は次のように明確に述べられています。

  • 信頼性の高いメッセージ配信(サービスバスとメッセージキューが最適なオプション) MassTransit、NServiceBus、またはキュー(RabbitMQ)のニーズに応じて、ここでは多くのソリューションがあります。
  • スケーリング作業者(インフラストラクチャの問題で、アクターフレームワーク自体では解決できません)。あなたが言ったことから、あなたはクラスターさえ必要ない。

ワーカーのようなメッセージ処理ロジックを構築するためにakkaを使用できます。しかし、私が言ったように、あなたの目標が既存のサービスバスを置き換えることであれば、それは必要ありません。

+0

私はhttp://prochera.com/blog/2014/07/15/building-a-scalable- akka-load-balancing-revisited/revisited /私が探しているのと同じことを説明しているので、なぜあなたはAkkaがこの種の要求に使用できないと思っているのか不思議です – Kiran

+0

私は、 Akkaがこの要件に使用できないと言っているわけではありませんが、akkaクラスタを使用することは、たとえばXが同じキュー/サービスバスからデータを引き出す相関関係のないアクタシステムを持つよりも複雑であるということです。また、記事をリンクすると、キューを使用したことは言及されていません(一部の抽象的な「外部ソース」のみ)。 – Horusiath

+0

信頼できるメッセージ配信にakka.netが適していないのはなぜですか? –

関連する問題