0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

EinhornでSidekiqをマルチプロセス化する

Posted at

この記事は

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?