0

複数のワーカーを使用して手続き型コードの一部を処理する場合と、負荷全体を処理する場合の固有の利点はありますか?

つまり、ワークフローが次のようになっているとします。

  1. queue0 から作業を取得し、A を実行します
  2. A からの結果を queue1 に格納する
  3. キュー 1 から結果を取得して B を実行
  4. B からの結果を queue2 に格納する
  5. queue2 から結果を取得し、C を実行します

それぞれが作業の一部を行う 3 人のワーカーに対して、それぞれがプロセス全体を行う 3 人のワーカーを使用することには固有の利点がありますか (ワーカー 1 は 1 と 2 を行い、ワーカー 2 は 3 と 4 を行い、ワーカー 3 は 5 を行います)。

実行中の作業 (ステップ 5 で終了) のみに関心がある場合は、同じようにスケーリングするように見えます (少なくとも 3 つのワーカーを使用している場合)。そのセットアップのワーカーはボトルネックの問題が少ないため、大きな仕事の方が良いのではないでしょうか?

4

2 に答える 2

1

@smarxの発言に追加:

  • もちろん、「多目的」ワーカーのモデルはより一般的です。したがって、特殊なタイプ (上記で使用した追加の RAM の例のように) が必要な場合でも、その特定のロールに 1 つのタスクしかありません。

  • コストの追加の観点があります。「タスク密度」(タスク/インスタンスのように)を増やす経済的インセンティブがあります。M種類の作業があり、それぞれを別のワーカーに割り当てると、 Mインスタンスに対して料金が発生します。

これについては以前ブログに書きましたが、ガイドのトピックの 1 つです(「06 week3.docx」の章)。

多くのフレームワークとサンプル (私たちのものを含む) は、このアプローチを使用しています。

于 2010-05-27T18:26:26.713 に答える
1

一般に、ジョブが小さいほど、プロセスがクラッシュしたときに失われる作業が少なくなります。また、ジョブが小さいほど、作業を均等に分散できます。(ある時点で 1 つのワーカー インスタンスが長いジョブを実行し、他のすべてのワーカー インスタンスがアイドル状態になるのではなく、すべてのワーカー インスタンスが小さな作業を実行するようにします。)

作業を細かく分割する方法は別として、それぞれが 1 種類の作業しか実行できない複数のワーカー ロールが必要か、それともすべてを実行できる単一のワーカー ロール (ただしインスタンスは多数) が必要かという問題があります。私はデフォルトで後者 (すべてを実行でき、すべてのキューをチェックして何を行う必要があるかを確認するコード) を使用しますが、前者を使用する理由があります。たとえば、ある種類の作業にさらに RAM が必要な場合は、そのワーカーにより大きな VM サイズを使用できます。もう 1 つの例は、さまざまな種類の作業を個別にスケーリングする場合です。

于 2010-05-19T21:37:57.213 に答える