Ruby 1.9.3p125
Rails 3.2.8
sidekiq 1.2.1
--
Sidekiqって?
ひとことで言ってしまうと、Resqueのマルチスレッド版。
Resqueはマルチプロセスで動くけど、
Sidekiqはシングルプロセスでマルチスレッド。
Sidekiq
http://mperham.github.com/sidekiq/
Sidekiqの特徴って?
- Resqueに比べてリソースの節約が出来る。
- Redis上のスキーマがRedisと同じなので移行が楽
- Jobの再試行がわりときれいに実装されてると思う。(個人の感想)
- お金払えば、Sidekiq Proなんていう高機能なのが使える。(知らなかったw)
Sidekiqの大変なところは?
Resqueに比べると、
- スレッドセーフなコードを書かないといけないのが少し手間かも。
くらいだろうか?
Sidekiqの導入につまづいたところ
Railsのautoloadはスレッドセーフじゃない
autoload_pathsに追加されているPathでSidekiqで使うところは、
eager_load_pathsに書き換え(or併記)しないといけない。
最初に全部読み込まないといけない。
Resqueでよく使うActiveRecord::Base.verify_active_connections!もだめ
ActiveRecord::Base.verify_active_connections!
上記のコードは除去する。
これ、ただ消すだけでいいのかねえ。
thread unsafeだって言われたから消したけど、
実際SidekiqにしてからMysql gone away!みたいに怒られたりはしていない。
感想
浅い記事で申し訳ないのだけど、眠いのでここまで。
Sidekiqのパフォーマンスにはとても満足してます。
今も開発が活発で、関連プロジェクトなども出てきているのでチェックするといいかも!