この記事は
- Sidekiqはとてもよくできているワーカサーバなのですが、シングルプロセスでしか動作しません
- さらにRubyは1プロセス1CPUコアしか使えないので、結果
Sidekiqは1コアしか使えないという弱点が発生します - einhornというなんでもかんでもマルチプロセス化してしまう神ライブラリを使うと、簡単にSidekiqの弱点を補えます
einhorn?
- 簡単にいうとUnicornやPumaみたいな、master/worker形式のマルチプロセス化をしてくれるライブラリです
- 今回はSidekiqに使いますが、Rubyに限らず、どんなプログラムでも対応可能です
- サンプルだと
sleepコマンドをマルチプロセス化していて動きが面白いです
インストール
- Rubyでできています
Gemfile
gem 'einhorn'
起動
-
einhornコマンドを頭につけるだけなのでとても簡単です -
-nオプションで生成したいプロセスの数を指定します
bundle exec einhorn -n 2 sidekiq -C config/sidekiq.yml
運用
- 起動すると管理用のmasterプロセスが1個、処理本体のworkerプロセスがn個上がってきます
- workerプロセスが死ぬと、自動でmasterプロセスがworkerプロセスを上げ直してくれます
- masterプロセスへ
SIGTERMを送ると、順次workerプロセスへSIGTERMを伝搬してシャットダウンしてくれます
ちなみに
- SidekiqにはProとEnterpriseという有償版もあり、そちらはマルチプロセスに対応しているのですが、中身はeinhornなんだそうです
- そういう意味では公式お墨付きという感じですね
終わりに
- einhornはpython系サーバとかnode系サーバとか、他にも色々使い道あるかもしれないですね