1. ホーム
  2. python

[解決済み] CeleryとRQを比較した場合のメリットとデメリット【終了しました

2022-09-11 03:40:56

質問

現在、私はいくつかのバックグラウンドジョブ(主にメール送信と大量のデータベース更新)を実装する必要があるPythonのプロジェクトに取り組んでいます。私はタスクブローカーにRedisを使用しています。そこで、現時点では2つの候補があります。 セロリ RQ . 私はこれらのジョブキューを使った経験がありますが、皆さんにこのツールの使用経験を共有してもらいたいと思います。というわけで。

  1. CeleryとRQの使い分けのメリットとデメリットについて。
  2. CeleryとRQを使い分けるのに適したプロジェクト/タスクの例があれば教えてください。

Celeryはかなり複雑に見えますが、フル機能のソリューションです。実際、私はこれらの機能すべてが必要だとは思っていません。一方、RQは非常にシンプルですが(例:設定、統合)、いくつかの便利な機能(例:タスクの取り消し、コードの自動リロード)が欠けているように思えます。

どのように解決するのですか?

このまったく同じ質問に答えようとして、私が見つけたものは以下のとおりです。おそらく包括的ではなく、いくつかの点では不正確かもしれません。

要するに、RQ は全体的によりシンプルになるように設計されています。Celery は、より堅牢になるように設計されています。どちらも優れています。

  • ドキュメンテーション。 RQのドキュメント は複雑でなく包括的であり、プロジェクト全体のシンプルさを反映しているので、迷ったり混乱したりすることはないでしょう。 Celeryのドキュメント も包括的ですが、最初にセットアップするときに、あまりに多くのオプションがあるため、かなり再確認することになるでしょう。
  • モニタリング。 セロリの花 と、その RQダッシュボード は、どちらも設定が非常に簡単で、あなたが必要とするすべての情報の少なくとも90%を与えてくれます。

  • ブローカーのサポート。Celeryが明らかに勝者で、RQはRedisのみをサポートしています。これは、「ブローカーとは何か」についてのドキュメントが少ないことを意味しますが、将来的にRedisが機能しなくなった場合にブローカーを切り替えることができないことも意味します。例えば インスタグラムでは、CeleryでRedisとRabbitMQの両方を検討しました。 . ブローカーによって保証が異なるため、これは重要です。例えば、Redis (執筆時点では)メッセージの配信を100%保証することはできません。

  • 優先キュー RQsの優先キュー・モデルは、シンプルで効果的です -。 ワーカーはキューから順番に読み込む . Celeryでは、異なるキューから消費するために複数のワーカーをスピンアップする必要があります。どちらのアプローチも動作します。

  • OSのサポート。RQは以下のOSをサポートするシステムでのみ動作するため、ここではCeleryが明らかに勝者となります。 fork 例:Unixシステム

  • 言語のサポート。RQはPythonしかサポートしていませんが、Celeryはある言語から別の言語へタスクを送ることができます

  • APIです。Celeryは非常に柔軟ですが(複数の結果バックエンド、素敵な設定フォーマット、ワークフローキャンバスのサポート)、当然ながらこのパワーは混乱を招く可能性があります。対照的に、RQのAPIはシンプルです。

  • サブタスクのサポート。Celeryはサブタスクをサポートしています(既存のタスクの中から新しいタスクを作成するなど)。RQがそうであるかは知らないが

  • コミュニティと安定性。Celeryの方がより確立されていると思われますが、どちらも活発なプロジェクトです。この記事を書いている時点で、Celery は Github で ~3500 のスターを持ち、RQ は ~2000 で、両方のプロジェクトが活発な開発をしていることがわかります。

私の意見では、Celeryはその評判が信じるほど複雑ではありませんが、RTFMする必要があります。

では、なぜ誰もが (間違いなくよりフル機能の) Celery と RQ を交換しようとするのでしょうか。私の考えでは、すべてはシンプルであることに尽きます。Redis+Unixに限定することで、RQはよりシンプルなドキュメント、よりシンプルなコードベース、そしてよりシンプルなAPIを提供します。つまり、あなた(とあなたのプロジェクトに貢献する可能性のある人)は、タスクキューシステムについての詳細をワーキングメモリに保持する代わりに、あなたが気になるコードに集中することができるのです。私たちは皆、一度にどれだけの詳細を頭の中に入れることができるかという限界を持っています。タスク・キューの詳細を頭の中に入れておく必要性を取り除くことによって、RQはあなたが関心を持つコードに戻ることができるのです。このシンプルさは、言語間タスク キュー、幅広い OS サポート、100% 信頼できるメッセージ保証、およびメッセージ ブローカーを簡単に切り替えられる機能などの機能を犠牲にしています。