セロリを使用する複数のプロジェクトに同じredisデータベースを使用することは可能ですか?キープレフィックスを使用するキャッシュとして、複数のプロジェクトに同じデータベースを使用するようなものです。または、インストールごとに個別のデータベースを使用する必要がありますか?
2 に答える
この役立つブログ投稿から要約すると:http://kfalck.net/2013/02/21/run-multiple-celeries-on-a-single-redis
- プロジェクトごとに異なるデータベース番号を指定します(例:redis:// localhost / 0およびredis:// localhost / 1)
- プロジェクトごとに異なるキュー名を定義して使用します。タスク側でCELERY_DEFAULT_QUEUEを定義し、ワーカーを起動するときに-Qパラメーターを使用してそのキューを指定します。ルーティングの詳細については、http://docs.celeryproject.org/en/latest/userguide/routing.htmlをご覧ください。
セロリにredisバックエンドを使用しましたが、同じredisデータベースにプレフィックス付きのキャッシュデータを使用しました。私は開発中にこれを行っていましたが、タスクをキューに入れずに結果バックエンドにredisのみを使用し、本番デプロイメントはすべてAMQP(キャッシュ専用のredis)になりました。私は何の問題もありませんでしたし、なぜそうなるのかわかりません(パフォーマンスの問題を除いて)。
タスク定義が異なる複数のセロリプロジェクトを実行する場合、問題は、それぞれがジョブタイプのサブセットしか処理できない2つの異なるタイプのワーカーがある場合に発生すると思います。個別のデータベースがないと、ワーカーがどのジョブを処理できるかをどのように判断できるかわかりません。
おそらく、すべてのワーカーにすべてのタスクタイプが定義されていて、何でも処理できることを確認するか、個別のプロジェクトを個別のデータベースに保持する必要があります。これには余分なものをインストールする必要はありません。セロリプロジェクトの1つでREDIS_DB=1を指定するだけです。これを行う別の方法があるかもしれません。複数のDBが必要かどうかはわかりませんが、それは理にかなっています。
結果のバックエンドにredisのみを使用している場合は、1つのredisデータベースに複数のセロリプロジェクトがある場合に機能する可能性があります...よくわかりません。