この記事は
- 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系サーバとか、他にも色々使い道あるかもしれないですね