web-dev-qa-db-ja.com

ActiveMQ、RabbitMQ、ZeroMQ、

ActiveMQとRabbitMQとZeroMQの長所と短所の経験を聞きたいです。他の興味深いメッセージキューに関する情報も歓迎します。

646
Abie

編集: 私の最初の回答ではAMQPに重点が置かれていました。私はそれを書き換えてトピックに関するより広い見方を提供することにしました。

これら3つのメッセージングテクノロジは、分散システムを構築する上でさまざまなアプローチを取ります。

RabbitMQ は、(Apache Qpidと共に)AMQPプロトコルの主要な実装の1つです。したがって、ブローカアーキテクチャを実装しています。つまり、メッセージはクライアントに送信される前にセントラルノードでキューに入れられます。ルーティング、ロードバランシング、または永続的なメッセージキューなどの高度なシナリオがわずか数行のコードでサポートされるため、このアプローチによってRabbitMQは非常に使いやすく展開することができます。ただし、中央ノードでは待ち時間が長くなり、メッセージエンベロープが非常に大きくなるため、スケーラビリティが低下し、「低速」になります。

ZeroMq は、金融業界で見られるような、ハイスループット/低レイテンシのシナリオ用に特別に設計された非常に軽量のメッセージングシステムです。 Zmqは多くの高度なメッセージングシナリオをサポートしますが、RabbitMQとは対照的に、フレームワークのさまざまな部分(ソケットやデバイスなど)を組み合わせることでそれらのほとんどを自分で実装する必要があります。 Zmqは非常に柔軟ですが、ガイドの 80ページ程度を研究する必要があります (これ以上Zmqを使用していなくても、分散システムを作成する人には読むことをお勧めします)。 2つのピア間でメッセージを送信するよりも複雑です。

ActiveMQ は真ん中にあります。 Zmqと同様に、ブローカートポロジとP2Pトポロジの両方で展開できます。 RabbitMQと同様に、高度なシナリオの実装は簡単ですが、通常はパフォーマンスが低下します。それは、スイス軍のメッセージのナイフです:-)。

最後に、3つすべての製品:

  • 最も一般的な言語(C++、Java、.Net、Python、Php、Rubyなど)のクライアントAPIがあります。
  • 強力な文書があります
  • 積極的にサポートされています
342
Julien

SparrowStarlingKestrelAmazon SQSBeanstalkdKafkaIronMQ を欠場した理由は何ですか?

メッセージキューサーバー

メッセージキューサーバは、Erlang(RabbitMQ)、C(beanstalkd)、Ruby(StarlingまたはSparrow)、Scala(Kestrel、Kafka)、またはJava(ActiveMQ)のさまざまな言語で利用できます。簡単な概要を見つけることができます ここ

スズメ

  • alex MacCawによって書かれた
  • SparrowはRubyで書かれた「memcacheを話す」という軽量のキューです。

ムクドリ

チョウゲンボウ

  • robey Pointerによって書かれました。
  • Scalaで書かれたStarlingクローン(RubyからScalaへのStarlingの移植版)
  • キューはメモリに格納されていますが、ディスクにログオンしています

ウサギMQ

  • RabbitMQはErlangのMessage Queueサーバーです
  • ジョブをメモリ(メッセージキュー)に格納します

Apache ActiveMQ

  • ActiveMQは、Javaのオープンソースのメッセージブローカーです。

Beanstalkd

Amazon SQS

カフカ

  • LinkedInのScalaで書かれた
  • すべてのページおよび他のビューの処理をオフロードするためにLinkedInによって使用されます
  • デフォルトでは永続性を使用し、ホットデータ用にOSディスクキャッシュを使用します(永続性が有効になっている上記のいずれよりもスループットが高くなります)。
  • オンライン処理とオフライン処理の両方をサポート

_ zmq _

  • 並行処理フレームワークとして機能するソケットライブラリ
  • クラスタ化された製品とスーパーコンピューティングのためにTCPより高速
  • インプロセス、IPC、TCP、およびマルチキャストを介してメッセージを搬送します。
  • ファンアウト、pubsub、パイプライン、要求 - 応答を介してNとNを接続
  • スケーラブルなマルチコアメッセージパッシングアプリケーションのための非同期I/O

EagleMQ

  • EagleMQ は、オープンソースの高性能で軽量なキューマネージャです。
  • Cで書かれて
  • すべてのデータをメモリに保存し、永続性をサポートします。
  • 独自のプロトコルがあります。キュー、ルート、チャンネルでの作業をサポートします。

IronMQ

  • IronMQ
  • 囲碁で書かれた
  • 完全管理キューサービス
  • クラウド版とオンプレミスの両方で利用可能

これが私たちに役立つことを願っています。 ソース

174

あなたが知りたいと思うより多くの情報:

http://wiki.secondlife.com/wiki/Message_Queue_Evaluation_Notes


更新

パウロがコメントに追加したことを詳しく述べているだけです。上記の ページ は2010年以降には使用されなくなっているので、ちょっとした塩で読んでください。多くのものが3年で変更されました。

History of Wiki Page

83
FlySwat

それは本当にあなたのユースケースに依存します。

0MQとActiveMQまたはRabbitMQを比較することは公平ではありません。 ActiveMQとRabbitMQは、インストールと管理が必要なメッセージングシステムです。彼らは機能的にZeroMQ以上のものを提供しています。彼らは本当の永続的なキュー、トランザクションのサポートなどをしています。

ZeroMQは軽量のメッセージ指向のソケット実装です。インプロセス非同期プログラミングにも適しています。 ZeroMQ上で "エンタープライズメッセージングシステム"を実行することは可能ですが、あなた自身で多くを実装しなければならないでしょう。

そう:

ActiveMQ、RabbitMQ、Websphere MQ、およびMSMQは「エンタープライズメッセージキュー」です。

ZeroMQはメッセージ指向のIPC Libraryです。

71
sanosdole

RabbitMQとActiveMQの比較があります ここ 。箱から出してすぐに、ActiveMQはメッセージ配信を保証するように設定されています - 信頼性の低いメッセージングシステムと比べて印象が遅くなる可能性があります。あなたが望むなら、あなたはいつでもパフォーマンスのために設定を変えることができ、少なくとも他のメッセージングシステムと同じくらい良いパフォーマンスを得ることができます。少なくともあなたにはその選択肢があります。フォーラムやActiveMQ FAQには、拡張性、パフォーマンス、高可用性のための設定に関する情報がたくさんあります。また、ActiveMQは、STOMPなどの他のワイヤフォーマットとともに、仕様が確定したときにAMQP 1.0をサポートします。

ActiveMQのもう1つの利点は、そのApacheプロジェクトです。そのため、開発者コミュニティには多様性があります - そしてそれは1社に縛られていません。

34
Rob Davies

私はActiveMQやRabbitMQを使ったことはありませんが、ZeroMQを使いました。私がZeroMQとActiveMQなどの間で見ている大きな違いは、0MQはブローカーがなく、メッセージ配信の信頼性が組み込まれていないことです。多くのメッセージングパターン、トランスポート、プラットフォーム、および言語バインディングをサポートする使いやすいメッセージングAPIを探しているなら、0MQは間違いなく一見の価値があります。あなたが本格的なメッセージングプラットフォームを探しているなら、0MQは法案に合わないかもしれません。

0MQの使用方法の例については、 www.zeromq.org/docs:cookbook を参照してください。

私は電気使用量監視アプリケーションでメッセージの受け渡しに0MQを使用することに成功しました( http://rwscott.co.uk/2010/06/14/currentcost-envi-cc128-part-1/ を参照)

22
Bob Scott

私はzeroMQを使っています。私は単純なメッセージパッシングシステムが欲しかったし、ブローカーの複雑さも必要ありません。巨大なJava指向のエンタープライズシステムも欲しくありません。

あなたが速くて単純なシステムを望み、あなたが複数の言語をサポートする必要があるなら(私はCと.netを使います)、0MQを見ることをお勧めします。

14
Nick

私はActiveMQについて私の2セントしか追加できませんが、これは最も人気のあるものの1つなので。

あなたが書きたい言語は重要かもしれません。 ActiveMQにはほとんどの場合クライアントがありますが、それらのC#実装はJavaライブラリと比べて完全には程遠いです。

これはいくつかの基本的な機能が不安定であることを意味し(フェイルオーバープロトコルは...まあ...いくつかのケースでは失敗し、再配信はサポートされません)、それ以外はありません。 .NETはプロジェクトにとってそれほど重要ではないと思われるので、開発はかなり遅く、リリース計画はありません。トランクは壊れていることが多いので、これを考慮した場合、何かを進めたい場合はプロジェクトへの貢献を検討することをお勧めします。

それから、たくさんのNice機能を持つActiveMQ自体がありますが、いくつかの非常に奇妙な問題もあります。安定性のためにFuse(Progress)バージョンのactivemqを使いますが、それでもあなたが心に留めておきたい奇妙な "バグ"がいくつかあります。

  • 場合によってはメッセージの送信を停止するブローカー
  • キューを作成したジャーナルエラーに、もう存在していないメッセージが表示される(それらはコンシューマに配信されませんが、それでもまだ)
  • 優先順位はまだ実装されていません(人間の種類の開始以来の問題リストにあります)
  • など.

結局のところ、それはあなたがその問題と一緒に暮らすことができればそれはかなりいい製品です:

A).NETを使うときに積極的に参加することを恐れない
B)Javaで開発する;-)

10
Noctris

RabbitMQ ActiveMQとQPIDの機能とパフォーマンスの比較は次のとおりです。
http://bhavin.directi.com/rabbitmq-vs-Apache-activemq-vs-Apache-qpid/

個人的に私は上記の3つすべてを試しました。 RabbitMQは私によれば最高のパフォーマンスですが、フェイルオーバーとリカバリのオプションはありません。 ActiveMQはほとんどの機能を持っていますが、遅いです。

更新情報: HornetQ も検討できるオプションです。JMSに準拠するソリューションを探しているのであれば、それはJMSの苦情です。

8
sheki

ZeroMQは本当にキューがゼロです。それは本当に間違いです!キュー、トピック、永続性はありません。これはソケットAPI用のミドルウェアです。それがあなたがクールに見えているものであるならば!そうでなければそれを忘れて! activeMQやrabbitmqとは異なります。

8
Angek

私は約3年間、運用環境でActiveMQを使用しています。それが仕事を成し遂げる一方で、正しく動作してバグのないバージョンのクライアントライブラリを並べることは問題になる可能性があります。現在RabbitMQへの移行を検討していました。

6
Kelly

AMQP、Qpid、ZeroMQに関する私の最初の経験についてはここに書いています: http://ron.shoutboot.com/2010/09/25/is-ampq-for-you/

私の主観的な意見は、あなたが本当に永続的なメッセージング機能を必要としていて、ブローカーがボトルネックになるかもしれないということをあまり心配していないのであればAMQPは問題ないということです。また、C++クライアントは現在AMQPに欠けています(Qpidは私のサポートを勝ち取っていませんでしたが、ActiveMQクライアントについてはよくわかりません)が、おそらく進行中の作業です。それ以外の場合は、ZeroMQを使用することができます。

6
ron

このブログ記事 のコメントに、Twitterが独自のメッセージキューを書くことについての議論がありますが、これは興味深いかもしれません。

SteveはActiveMQ、RabbitMQなどの負荷とストレステストを広範囲に行っています。ActiveMQは実際には非常に遅く(Kestrelよりはるかに遅く)、RabbitMQは非常に多くのプロデューサーと少なすぎるコンシューマーと常にクラッシュします。

あなたはおそらくTwitterのようなロードを最初は持っていないでしょう:)

5
crb

ActiveMQほど多くのチューニング構成を持つアプリケーションはほとんどありません。 ActiveMQを際立たせるいくつかの機能は次のとおりです。

設定可能なプリフェッチサイズ設定可能なスレッド化設定可能なフェイルオーバープロデューサへの設定可能な管理通知...詳細

http://activemq.net/bloghttp://activemq.Apache.org

5
cobrien

商用の実装にも興味があるなら、 my-channels からNirvanaを見てください。

Nirvanaは、大規模で低遅延の取引および価格配布プラットフォームのために、金融サービス業界で多用されています。

企業、Web、モバイルの各分野で、幅広いクライアントプログラミング言語がサポートされています。

クラスタリング機能はきわめて高度であり、透過的なHAまたは負荷分散が重要な場合には一見の価値があります。

Nirvanaは開発目的で無料でダウンロードできます。

0
eddie mcdaid

Abie、それはすべてあなたのユースケースに帰着します。他の人のユースケースの説明に頼るのではなく、あなたのユースケースをrabbitmq-discussionメーリングリストに投稿してください。 Twitterで尋ねるといくつかの回答も得られます。ご協力ありがとうございます

0

ZeroMQ、別名0MQについては、ご存知かもしれませんが、1秒あたりのメッセージ数が最も多いのはこれです。ドキュメンテーションは存在しません。サーバーの使用方法はもちろんのこと、サーバーの起動方法を見つけるのは難しいでしょう。私はまだ誰も0MQについてまだ貢献していないのもその理由の一部だと思います。

楽しむ!

0
Charle