6

私のソリューションでは、分散タスクを使用して、ハードウェアインスタンスを一定期間(たとえば10分間)監視します。私は次の場合にいくつかのことをしなければなりません:

  • このモニタリングセッションを開始します
  • このモニタリングセッションを終了します
  • (潜在的に)モニタリングセッション中

セッション全体(10分)で単一のタスクを実行してこれらすべてを実行するのは安全ですか、それともこれらのアクションを独自のタスクに分割する必要がありますか?

私が見ているように、単一のタスクの利点は、タイミング制約の管理と実施が容易になることです。だが:

(ほとんど)眠っている労働者の大規模なプールを運営するのは良い考えですか?たとえば、最大で200のセッションを開くことがわかっている場合、常に利用可能な「セッション」シートがあることを確認するために、500人のワーカーのプールがありますか?

4

1 に答える 1

10

これに対する万能の答えはありません

  • 大きなタスクAを多くの小さな部分(A¹、A²、A³、…)に分割すると、潜在的な同時実行性が向上します。

したがって、10個のワーカースレッド/プロセスを持つ1個のワーカーインスタンスがある場合、Aは、1つのスレッドで順次実行するのではなく、10個のスレッドを使用して並列で実行できるようになりました。

パーツの数は、タスクの粒度(細粒度または粗粒度)と呼ばれます。

  • タスクの粒度が細かすぎると、メッセージングのオーバーヘッドによってパフォーマンスが低下します。

各部分には、タスクメッセージをブローカーに送信するオーバーヘッドを相殺するのに十分な計算/ IOが必要です。タスクメッセージを受け取るワーカー、メッセージを受信するワーカーなどがない場合は、ディスクに書き込む可能性があります(メッセージングに注意してください)。オーバーヘッドを微調整することができます。たとえば、一時的なキュー(メッセージをディスクに永続化しない)を作成し、そこでそれほど重要ではないタスクを送信することができます。

  • 忙しいクラスターは、このすべてを無意味にする可能性があります

ビジーなクラスターがある場合(たとえば、それぞれ10個のスレッド/プロセスを持つ3つのワーカーインスタンス、すべて実行中のタスク)、最大の並列処理がすでに達成されている可能性があります。

その場合、タスクを分割しても多くのメリットは得られませんが、I / Oを実行するタスクは、CPUバウンドタスク(I / O操作によって分割される)よりも改善される可能性が高くなります。

  • 長時間実行されるタスクは問題ありません

労働者は、10分または1時間の長時間実行タスクにアレルギーがありません。

ただし、長時間実行されるタスクは、そのスロットが待機中のタスクを完了するのをブロックするため、理想的でもありません。この人々を軽減するために、ルーティングを使用して、できるだけ早く実行する必要があるタスク用の専用ワーカーを備えた専用キューを用意します。

-

于 2012-09-10T16:14:36.410 に答える