Unicorn の特徴について初歩的なことを書いておく

アプリサーバー対決 パート1:主なRubyアプリケーションサーバーの機能比較 [和訳] - Engine Yard Blog を読んで、Unicorn がわかった。

  • 高速クライアント用と呼ばれる理由
  • ホットデプロイをどのように実現しているか

Unicorn はmasterプロセスとそれをforkしたワーカが処理を行う仕組みになっている。 masterプロセスは監視役に徹していて、ワーカが死んだりした場合そいつを殺し、自分自身をforkしてくれる。

高速クライアントにむいている(むしろそれ以外では使っちゃダメ)な理由としては

Unicornは、デフォルト設定ではワーカープロセスが30秒を超えて処理を継続している場合、そのプロセスをSIGKILL経由で終了させる設計になっています。これが「高速クライアント用」と呼ばれる所以です

ということで、master プロセスは各ワーカを監視して、リクエストに時間がかかりすぎているようなものは処理途中でもあっさり殺してしまうのだ。そうして、自分自身をforkして、後から来るリクエストに備える。

また、ホットデプロイをどのように実現しているかについても簡単に理解できる。 コードをデプロイしたあとそれを元にmasterプロセスを一つ起動するだけで、あとはそいつがよしなにforkして指定した分だけワーカを起動し、問題ないか確認した上で、古いmasterプロセスを殺してくれる仕組みになっているからだ。

この辺りの初歩的なことでも理解しておくと選定の時に役に立ったり、デプロイの時にあたふたするのが減りそう。

reference