たいきゅんの日記

ITエンジニアの積み上げ日記

プログラミング初学者がまとめる〜Unicornについてまとめてみようと思う。ざっと理解する編〜

*自身の言葉で書いてますので、間違っていることもあるかと思いますが、ご了承ください。訂正のコメントを頂けるとありがたいです。*

 

今回は前回の続き?でアプリケーションサーバーの一つである、Unicornについて紹介します。最後の方にpumaとの比較も書いてみようと思います。

 

Unicornとは

 

Unicornとはアプリケーションサーバーの一つです。(アプリケーションサーバーの説明は前の記事を参照してください。)

 

Unicornの特徴

 

・マルチプロセス型である

Unicornはプロセスごとに通信処理をおこなうので、重たい通信があった場合そこでブロックされて全体が重くなってしまうことがある。

 

・起動の速さ、デプロイする際にダウンタイムが発生しない。

Unicornは、プロセスがmaster1つと複数個のworkerに別れていて、masterがソースコードを保持しており、実際に動くのはmasterのプロセスのコピーを持ったworkerプロセス群である。よって、ソースコードを読み込む必要があるのがmasterだけであり、起動が早くデプロイ時のダウンタイムもない。

また、Nginxがつなぐのはmasterのみなので、masterは各workerにロードバランサーのような形で負荷分散をしながらリクエストを送ることができる。

(ダウンタイムとは、常時動いていることが期待されるアプリなどが、停止・中断している時間のことを言う。)

 

・実際Webサーバとしても起動できる

UnicornとRackだけでRailsを動かすことも可能。しかし、プロセス数が少ないため、大勢のアクセスへの対処が難しいのが現実である。よって、プロセス数が多いwebサーバと合わせて使うことが理想である。またUnicornのドキュメントでもnginxと組み合わせることを推奨している。

 

 

unicorn と puma の違い

 

unicorn はマルチプロセス、puma はマルチスレッド型である。(説明略)

スレッド(master)はメモリを共有し、プロセス(worker)はメモリを共有しません。通常、httpサーバーは複数のリクエストを独立に処理し、永続的なデータはデータベースに保存するので、マルチプロセスモデルの方が相性が良いです。しかし、マルチプロセスよりはマルチスレッドの方が一般にパフォーマンスは高いのです。

 

・レスポンスの差があるかも?

レスポンスを返すまでに数秒間かかるようなアプリケーションの場合、 unicorn を使用していると急激に遅くなるケースがあります。 そういう場合には puma などを使用するのが良さそうです。

 

◯では実際どちらを選ぶべきか?

今の私の知識・経験では、正直どちらの方がいいのか100点の回答を出すことができません!笑

しかし比較して分かったのは、アプリケーションの種類にもよるけど、pumaがマルチスレッド型なので処理が遅くなる可能性が低いと言うことがわかりました。PF見せる時を想定すると、処理が遅くなる可能性があるUnicornよりnginxの方がいいのでは?と言う結論に至りました。実際にどちらも導入してデプロイをしたことがあるのですが、肌感で差は感じませんでした。。。

 

◯まとめ

今回はUnicornについてと、webサーバーについての現時点のまとめを考えてみました!

もっと学習しないと性能を存分に発揮できないと感じたので、機会があればもっと深く勉強しようと思います。

今回も最後まで読んで頂き、ありがとうございました!!