30

と に基づく分散アーキテクチャがrabbitMQありCeleryます。問題なく複数のタスクを並行して起動できます。スケーラビリティは良好です。

ここで、タスクをリモートで制御する必要があります: PAUSE、RESUME、CANCEL。私たちが見つけた唯一の解決策は、Celery タスクで、DB 要求の後にコマンドに応答する別のタスクへの RPC 呼び出しを作成することです。Celery タスクと RPC タスクは同じマシン上になく、RPC タスクのみが DB にアクセスできます。

それを改善し、進行中のタスクと簡単にコミュニケーションをとる方法について何かアドバイスはありますか? ありがとうございました

編集: 実際には、下の図のようなことをしたいと考えています。Blue構成またはを行うのは簡単ですが、Orange両方を同時に行う方法はわかりません。 ここに画像の説明を入力 ワーカーはコモンにサブスクライブしており、各ワーカーは交換でJobs queue独自に宣言されています。Admin queue

編集: でこれが不可能な場合はCelerypython-rq.

4

2 に答える 2

3

のように見えますControl Bus pattern

スケーラビリティを向上させ、RPC 呼び出しを減らすために、ロジックを逆にすることをお勧めします。状態のPAUSE, RESUME, CANCEL変化が発生すると、コマンドは制御バスを介して Celery タスクにプッシュされます。Celery アプリは、Celery アプリの現在の状態をストアに保存します (メモリ内、ファイルシステム上など)。アプリの停止/開始後もタスクの状態を維持する必要がある場合、両方のアプリの同期を維持するために、より多くの作業が必要になります (例: 起動時の同期)。

于 2015-05-28T06:30:33.333 に答える