2009-04-06 8 views
38

Railsアプリケーションで使用されているメッセージキューは何ですか?そして、それを選択する原動力は何ですか?既存のキューStarlingの最新のTwitterの宣伝は、既存の設計上の意思決定に影響を与えますか?Ruby on Railsのメッセージキュー

私はこれの多くを行っていない、いくつかのバックグラウンドタスクを処理するために、メッセージキューが必要になりますアプリに取り組んでいますし、私が過去に見てきたものの大部分はスターリングとWorklingについてされている、と正直言ってアプリケーションはそれほど大きくはないでしょうが、このソリューションでは十分でしょうが、私はある時点で大きなアプリケーションに統合することができると確信しています。

Railsアプリケーションにはどのようなメッセージキューがありますか?

編集:ありがとうございます、私は今週末のいくつかを見ていきます。

EDIT Again:私は周りを見ていて、選択肢には少し圧倒される。しかし、RabbitMQとWorklingを統合して、構築しているアプリケーションに入れようとすると、高速キューに関する知識が必要な場合は、これを持って自分のニーズに合っているかどうかを知ることになります。

EDIT:DJが私にはうまく合っていますが、現場でこれ以上成長していれば、私は頭がおかしくなると思います。

EDIT:(2014年12月)私はこれを尋ねて以来長い時間がかかっていますが、それでもいくつかの意見や票を得ていることがわかりましたので、私のアプローチで今更新しています背景の労働者の選択。

現在のところ、Rubyでバックグラウンドジョブを実行する最善の方法は、Sidekiqを使用することです。 Sidekiqの前に使っていたResqueよりもかなり少ないメモリを使うことができる、従業員一人一人のプロセスではなくスレッド化されたworkerだから、多くの人が本当にSidekiqを賞賛しています。これはいいですが、私にとってこれはキラー機能ではありませんでした。 Sidekqと一緒にSidetiqを使うことで、仕事のスケジューリングがとても簡単で、私が使い慣れた仕事をはるかに簡単にスケジューリングすることができ、それを振り返ったことはありません。ここで

答えて

16

- GitHubのではなく、遅延型ジョブのRedisの上Resqueに移動しました。しかし、彼らはまだ小さいセットアップのためdelayed_jobをお勧めします。私は今、遅れジョブに移動した

https://github.com/resque/resque

4

は、いくつかのRuby/Railsのソリューション、これらの1つ以上は、ニーズに応じて、良いフィットかもしれ以下のとおりです。

http://xph.us/software/beanstalkd

http://rubyforge.org/forum/forum.php?forum_id=19781

http://backgroundrb.rubyforge.org

そして、A Ruby/Railsと大規模システムの他のコンポーネント間で共有するための大きな待ち行列を作る、Amazonのホスト型ソリューション:

http://aws.amazon.com/sqs

希望します。

9

githubのChris Wanstrathさんが最近SF Ruby meetupに参加し、キューについて話していました。彼らは、Shopifyのdelayed_jobで解決する前に、Starling、beanstalk、およびいくつかの変形を試みました。彼らはバックグラウンドを使用することでかなり積極的です。

blog post from last yearは、DJへの移行について語っています。

私はここ数年前に自分自身を巻き込んでいますが、私はDJのアイディアを取り入れて扱い方を改善しています。

+0

が、それは私がやっている何のために最善のようだ、簡単にセットアップして使用します。推薦された。 – nitecoder

+2

それ以来、彼らはResque(http://github.com/blog/542-introducing-resque)に移りました。クリスはまだ仕事が遅れているとは言いたいことがたくさんありますが、Resqueは彼らのニーズをよりよく満たしています。私にとっては、仕事が遅れている方がまだ良いです。 –

2

Rany Keddoは、昨年RailsConf EuropeでStarling + Worklingについてuseful presentationを寄付しました。彼は当時利用可能なさまざまなソリューションを比較しました。

Starling + WorklingからのTwitterの最新の動きは、おそらく通常のレールアプリにはあまり意味がありません。彼らにはスケールの問題が多くあり、現在の実装を超えてスケ​​ーリングすることを防ぐために、データストアに関する従来の問題がある可能性があります。

Beanstalkdはデーモンとして実行され、他のスクリプト言語のラッパーを持っているためです(将来的に方向を変更したり、別の言語で書かれたコンポーネントを持っている場合)。

このlinkには、利用可能なさまざまなレールソリューションの利点もあります。

1

delayed_jobがデータベースベースのキューであるbackground_jobを使用します。

データベースは、あまりにも多くのトラフィックを出入りしない限り、OKキューを作成します。

私はbackground_job(とdelayed_job)が好きな理由は、彼らは別のプロセスを必要としないということです。彼らはcronを実行することができます。私のメッセージングのニーズは、私の貧弱なシステム管理者のスキルよりも簡単なので、これは重要です。

9

負荷が重くないと思われる場合は、delayed-jobをデッドシンプルなソリューションとしてお勧めします。利点:セットアップが簡単で、監視が簡単で、シンプルなコードで、外部依存関係はありません。これまではActiveMessaging(ActiveMQとstomp)を使用していましたが、プロジェクトにとっては残酷でしたので、単純化のためにdelayed_jobに切り替えました。

非常に成熟した速い解決策が必要な場合は、ActiveMQが非常に適しています。あなたが本当に必要としない本格的なメッセージキューイングソリューションを維持するのにあまりにも多くの時間を費やしたくなければ、delayed_jobは行く方法です。 ActiveMQでのScribdエクスペリエンスについてはgood articleです。

+0

私はdelayed_jobが大好き!非常にシンプルで使いやすい! – ep3static