4

Sidekiq wikiには、次のように記載されています。

  1. ジョブを小さくシンプルに

シンプルになり、冪等性とトランザクション性が向上しますが、何が小さいのでしょうか? おそらく必要なメモリと計算時間は良い尺度ですか?私の Sidekiq ジョブは 10 秒から 30 分かかります

10秒でもいいと思いますが、30分という長時間のタスクはどうでしょうか。データベースから特定のタイプのすべてのデータをメモリにロードし、それらに対して長い計算を実行してから、結果を書き戻しています。1 つのワーカー ジョブで 3 つのすべてを実行できます。

それでいいですか?それとも、小さな計算を実行する複数のワーカー ジョブをワーカー ジョブから呼び出す必要がありますか? 問題は、これらの小さな計算には、計算を行うためにいくつかの複雑なハッシュ テーブルが必要になる場合があり、Redis ではこれを保持せず、小さな単純な値のみを保持することが提案されていることです。

4

1 に答える 1

7

それは、どのくらいの頻度でジョブを呼び出したい/呼び出さなければならないか、およびジョブに時間がかかることを許容できるかどうかによって異なります。

完了するまでにかかる間隔よりも短い間隔でジョブを実行すると、確かに長すぎます。

複数のワーカーに分割することは、合計実行時間を改善できる場合にのみ役立ちます (たとえば、一部を同時に実行できる場合)。

したがって、いつものように、ニーズに合っいる限り、問題ありません。

でも:

  • 長いジョブでは、ジョブが何らかの理由 (サーバーのクラッシュなど) で実行中に失敗する可能性があることを考慮する必要があります。
  • この時間のかかる作業を続行できますか、それとも適切にロールバックされますか?
  • また、ジョブの実行中にデータが変更された場合はどうなりますか?
于 2013-07-18T15:43:45.490 に答える