0

約 1000 ~ 10000 のジョブがあり、1 分ごとに一定の間隔で実行する必要があります。新しい仕事が入ってきたり、キャンセルしなければならないこともありますが、まれなケースです。ジョブはタグ付けされ、特定の種類のジョブのみを処理するワーカー間で干渉する必要があります。

今のところ、cron を使用して、いくつかのブローカー (RabbitMQ または beanstalkd) でジョブのデータベース全体をロードしたいと考えています (どちらを使用するかはまだ決めていません)。

しかし、このアプローチは私には見苦しく (タイマーを使用して無限をシミュレートしたり、データベース全体をロードしたりするなど)、欠点があります。すべてラムし、スワップしてから停止します。

他の可能性はありますか?仕事に適切なパターンを使用していませんか? (キューなどは必要ないかもしれません..?)

psこれが重要な場合、私はpythonを使用しています。

4

2 に答える 2

2

ジョブの最初のバッチを作成し、それらをキューに追加します。それぞれがジョブを実行しているキューの n 個のコンシューマがあります。コンシューマーをキューに追加すると、単純にリッスンしている各コンシューマーへのジョブの分散がラウンドロビン方式で行われるため、任意の水平方向のスケーラビリティーが得られます。

各ジョブは、完了すると、それ自体をキューに再送信する責任があります。これは、ジョブ キューが初期化時の長さを超えて大きくならないことを意味します。マスター ジョブは、必要に応じてサブジョブを生成し、それらをキューに追加できます。

ジョブの種類が異なれば、異なるキューを使用することをお勧めします。こうすることで、さまざまな量/馬力のワーカーがさまざまなキューからジョブを実行することで、より効果的に負荷を分散できます。

Python を実行しているという事実はここでは重要ではありません。それはパターンであり、最初に釘付けにする必要がある言語ではありません。

于 2012-03-05T13:47:07.177 に答える
0

Twistedなどの非同期フレームワークを使用できます

毎分cronデーモンでスクリプトを実行するのも良い考えではないと思います(そしてあなたは理由を述べました)ので、私はあなたにツイストを提供します。スケジューリングのメリットはありませんが、プロセス管理とメモリ共有に柔軟性があります。

于 2012-03-06T05:43:59.273 に答える