2016-09-22 2 views
1

ジョブから複数のジョブを生成することは安全ですか?ワーカーは空いているジョブの作業を開始できますか?複数のキューを持つBeanstalk設定ワーカー:別のジョブを生成するジョブ

現在、私のセットアップは次のようなものです。私は20人の労働者がどんな仕事が押されるのを待っている。仕事の1つは、IOSのプッシュ通知、iOSの問題を送信することです、あなたは一括メッセージを送信することはできません。

Current:私が作ったのは、特定のユーザーのリストをバッチで取得し、dbから各デバイストークンを取得して通知を送信するジョブでした。

シナリオ:1つのトピックに1000人のユーザーがいる場合、1000人のユーザーとそのデバイスをすべて取得し、各デバイスで送信を開始する必要があります。これは私の待ち行列に新しい仕事を押しつけ、1人の労働者はそれを選ぶだろうが、他の労働者は空いており、入ってくる仕事を待っている。ある時間仕事がない場合、ワーカー1はすべての仕事をしなければならなかったのですが、

私は今働いています。その大きな仕事が代わりに別の仕事を作り、空いている他の労働者がそれを持ち上げて仕事をすることは安全ですか?

P.Sすべてのジョブが1つのチューブで実行されています。

答えて

1

これは私にとってかなり妥当で、多くの労働者の間で負荷が分散しています。

適切な優先度を設定するなど、注意が必要なことがいくつかあります。数十、または数百ものタスクを作成したタスクの方が、実際に送信しているジョブよりも優先度が高い場合、すぐに数十万のジョブが発生する可能性がありますが、ワーカーは実行していない可能性があります。いっぱいになる。

優先順位の間に大きなギャップを残しておくと、本当に重要なジョブをスロットに入れることができます。より重要な顧客は、ゼロに近い優先順位を持つことができ、したがって処理され、より小さい顧客より先に送信されることがあります。

その他の考慮すべき事項には、レート制限されたアカウントが含まれています.1秒あたり10通の通知に限定されていれば、20人の従業員を実行することは非スターターになります。

私は仕事の新しいグループを新しいチューブに入れます(数十本のチューブは高価ではありません)。一度に多数のチューブを見ることができます(いずれかから最も重要な仕事を得ています)。しかし、1つのチューブ内で異なる種類のジョブをカウントすることはできません。したがって、タイプを異なるキューに分割すると、各タイプのジョブがいくつ実行されているか。したがって、送信プロセスが増えている場合は、しばらくの間、分割ジョブが作成されるのを遅らせるか、しばらくの間、より低い優先順位としてそれらをマークすることができます。

最後に、バッチ処理の利点を維持し、オーバーヘッドを避けるために、ジョブをジョブごとに1000 +オフから多分25-50通知のパケットに分割する可能性があります。

関連する問題