2011-07-05 4 views
33

私はバックグラウンドでより多くの作業を開始したいので、時間がかかります。過去に私は通常のバックグラウンドタスクを行うためにCeleryを使用しましたが、これはうまくいきました。Celeryによるメッセージ配信の保証方法

このアプリケーションと以前に行ったこととの唯一の違いは、これらのメッセージが処理され、失われないことを保証する必要があることです。

このアプリケーションでは、メッセージキューの速度についてあまり心配していません。信頼性と耐久性が必要です。安全を期すために、私は2つのキューサーバーを持ちたいと思っています。どちらかが間違っている場合は別のデータセンターに、もう1つはバックアップしてください。

セロリを見ると、さまざまなバックエンドをサポートしているように見えます。 redisとRabbitMQのような2つの最も人気のある外観なので、私はそれらをさらに調べるために少し時間をかけました。

のRabbitMQ: は耐久性のあるキューとクラスタリングをサポートしていますが、彼らは今日のクラスタリングを持っている方法に問題がクラスタ内のノードを紛失した場合、あなたがオンラインに戻し、そのノードを持って来るまでは、そのノード内のすべてのメッセージが利用できないということです。クラスタ内の異なるノード間でメッセージを複製せず、メッセージに関するメタデータを複製した後、元のノードに戻ってメッセージを取得します。ノードが実行されていない場合は、S.O.Lです。理想的ではない。

これを回避する方法は、第2のサーバーをセットアップし、DRBDを使用してファイルシステムを複製し、ペースメーカのようなものを実行してクライアントを必要に応じてバックアップサーバーに切り替えることです。これはかなり複雑なようですが、良い方法があるかどうかはわかりません。誰でも良い方法を知っていますか?

のRedis: が読み取りスレーブをサポートし、これは私が緊急事態の場合のバックアップを持つことができるようになるが、それはマスター・マスターの設定をサポートしていない、そしてそれはマスターの間でアクティブなフェールオーバーを処理する場合、私はわからないんだけどスレーブ。それはRabbitMQと同じ機能を持っていませんが、設定と保守がずっと簡単です。

質問:

  1. それはメッセージ 処理を保証するようにセットアップセロリ するための最良の方法は何ですか。

  2. 誰もこれまでに行ったことはありますか?もしそうなら、 はあなたがしたことを分かち合いますか?

+2

rabbitmqフェイルオーバーに関しては、私はすぐに何か簡単に利用できるという噂が聞こえてきました! – asksol

+1

append_only設定を行うと、Redisは耐久性があります。しかし、redisは依然としてメッセージ確認をサポートしていません。つまり、ワーカーがそれを確認しないと、メッセージが再配信されます。 Celery Redisサポートはこれをエミュレートしますが、クライアント側でのみ実行可能です。つまり、ワーカーが突然殺されたり、電源障害が発生した場合に、未解決のメッセージが失われる可能性があります。 http://ask.github.com/celery/faq.html#should-i-use-retry-or-acks-late – asksol

+2

を参照してください。CELERY_DISABLE_RATE_LIMITS = Trueに設定した場合、メッセージを失うことなく離れても、CELERYD_PREFETCH_MULTIPLIER = 1、CELERY_ACKS_LATE = Trueに設定し、ソロプールで実行します。しかし、それを確認する必要があります。 – asksol

答えて

0

私は、この提案のためにアマゾンSQSを使用して良い結果を持っています。キューから削除するまでメッセージを受信し、必要に応じてアプリを成長させることができます。

+0

Amazon SQSはredisやrabbitMQに比べて遅く、セロリとは違いますが、私は間違っている可能性があります。 –

+0

セロリはAmazonSQSをサポートしていますが、この投稿は質問に答えません。メッセージの順序は保証されていますか?分散システムなどで複製が作成/処理されないことを保証できますか? –

1

私は、既存のバックエンドにバインドされたセロリが、必要な信頼性保証のための間違った解決策であると考えます。

耐久性と信頼性が高い分散キューイングシステムを望むなら、私はそのようなシステム(存在しているもの)を探し、Pythonでバインドする最良の方法を考え出すことから始めます。それはセロリー&経由で新しいバックエンドかもしれません。

+0

ありがとう、耐久性と信頼性の保証された分散キューイングシステムを持つシステムの名前は知っていますか?私はそれらをチェックしたいと思います。 –

+0

Amazon SQSは1つです。他の私は知らない - しかし、おそらくGoogleのあなたの友人は今質問することを知っている –

+0

[MQSeries]を見てください(http://publib.boulder.ibm.com/infocenter/wmqv6/v6r0/index.jsp?topic= %2Fcom.ibm.mq.csqzae.doc%2Fic10770_.htm)および類似の製品。 – michaelok

0

分散レンダリングシステムを使用していますか?通常はHPCのために予約されていますが、多くの概念は同じです。 QubeまたはDeadline Renderをチェックしてください。他にもオープンソースのソリューションがあります。一部のレンダリングで高度な複雑さと障害の危険性があり、画像シーケンスフレームごとに数時間かかる可能性があるため、すべてのフェールオーバーが念頭に置かれています。

3

あなたは、IronMQをチェックアウトしたいと思うかもしれません、それはあなたの要件(耐久性、高可用性など)をカバーし、ゼロのメンテナンスなので雲のネイティブソリューションです。セロリのブローカーはhttps://github.com/iron-io/iron_celeryなので、セロリの設定を変更するだけですぐに使い始めることができます。

+0

私はそれをチェックしなければならないだろうが、私が見ているものから、それは法案に合うかもしれないように見える。ありがとう。 –

5

OPから多くの変更がありました!ハイアベイラビリティ(別名「ミラーリング」キュー)オプションが追加されました。これは、あなたが説明した問題を解決するためにはるかに進んでいます。 http://www.rabbitmq.com/ha.htmlを参照してください。

関連する問題