Unicorn
- Application server
- プロセス上で動作するサーバ
- masterプロセスとworkerプロセスがある
- masterプロセスがアプリケーションのソースコードを保持。これをforkしたworkerプロセス群が実際のリクエストを処理
- ソースコードをロードするのがmasterプロセスのみであるため、起動が早い
- デプロイ時のダウンタイムがない
- プロセスにシグナルを送ることでサーバの起動関連を指示
- masterプロセスがUSR2シグナルを送られると、masterプロセスは自身を再起動。このとき新しいmasterプロセスをforkした新しいworkerプロセス群も生成
Nginx
- クライアントからのリクエストを受け、なんらかの処理(SSLや圧縮など)を行なうWebサーバ
- 開発環境と本番環境の違いはリクエストの数で、unicornはworkerプロセスがせいぜい数個であるのに対し、nginxは数千ものコネクション数が存在
流れ
- Webサーバ(nginxなど)からリクエストがunicornに渡される
- unicornはRackをとおしてRailsアプリケーションのルータに処理を渡す
- Railsアプリケーションの結果をunicornが受け取る
- unicornはこれをWebサーバに渡し、最終的にクライアントへと渡る
Nginx→Unicorn→Rails→Unicorn→Nginx
unicorn-worker-killer(gem)
ActiveRecordのキャッシュなどでメモリを使用すると、プロセス単位のメモリ使用量がどんどん増えてしまう
- メモリ使用量などを基準に自動でworkerプロセスを再起動
Settings