Nginx + Rubyのアーキテクチャ
-
Nginx + Unicorn + Ruby
とNginx + Passenger + Ruby
の違いについて
Unicornとは、Nginxの違いとは
- 一言でいうと、Webサーバーとアプリケーションサーバーの違い
- Webサーバー
- 代表的なものだと Nginx、Apacheなど
- リクエストを送った時に、レスポンスを返す
- アプリケーションサーバー
- Rails用だと Unicorn、Sinatra、Thin、Pumaなど
- webサーバーから受けたレスポンスをwebサーバーに返す
Rackとは
- RubyでWebサーバーを立ち上げるためのインターフェース
- 指定したミドルウェアやアプリケーションを組み合わせ、Webサーバを立ち上げるためのライブラリを提供する
- これを用い、任意のアプリケーションサーバーでRailsやSinatra等のアプリケーションを動かすことができる
Unicornとは
- Rackに対応するために作られたアプリケーションサーバー(Rack Webサーバー)
- RubyアプリケーションとWebサーバをつなぐための中間サーバーのこと
- 通常のWebサーバはRackのような機能をサポートしていないため、この中間サーバーが必要になる
- Rack Webサーバー単体でも機能するがレスポンス処理が弱く、ApacheやNginxなどと組み合わせて使われることが一般的
「Nginx + Unicorn + Ruby + Rails」 における処理の流れ
- Nginx → Unicorn → Rack → Rails となる
Passengerとは
- 正式にはPhusion Passenger
- Railsで作成したアプリケーションをWEBサーバー上で動かすためのApacheやNginxのモジュール
- モジュールとしてWEBサーバーに組み込むことで、(アプリケーションサーバー無しに)RailsのWEBアプリケーションを動かすことができる一方、アプリケーションサーバーとして利用することもできる。
Nginx + Unicorn + Ruby のメリット
-
Web3層アーキテクチャという設計に基づいた
- Webサーバ層/アプリケーション層/データベース層
- メリット
- いずれかの層に変更があった場合、疎結合なのでメンテナンスが容易になり、対応コストを低く抑えられる
- 層を分離することで処理の負荷分散がされ、より多くの処理が可能
Rubyフレームワーク比較
Ruby on Rails
- 簡単にWebアプリケーションを作ることができるフレームワークが作られたことをきっかけに、プログラマーに圧倒的な指示を受けて活発に使われるようになった
- GitHub、Airbnb、Hulu、Basecampと言った多くの企業が採用している優秀なフレームワーク
Railsにおける原則
-
DRY(Don't Repeat Yourself)
- 「同じことを繰り返さない」という意味
- 同じコードや似たようなコードを何度も書くのは、効率が悪いし、変更に弱い為やめるべきだという発想
-
COC(Convention Over Configuration)
- プログラマーの意思よりも「規約(決められたルール)を優先する」という意味
- アプリケーションを開発するにあたる最善の方法を、ある程度事前に決めてくれている
Sinatra
- DSL(Domain-Specific Language : 特定の目的に特化した言語)を利用
-
小規模なアプリケーションを簡潔に記述することを目指したフレームワーク
- 単純なサイト構成なものに使い、逆に複雑なものにはあまり向いていない
- アップル、BBC、イギリス政府、GitHub等の企業や団体によって利用されており、Railsの次に人気が高い
参考文献
- アプリケーションサーバってなに?Webサーバとの違い : https://www.marketingbank.jp/special/cat02/173.php
- ApacheとNginxとPassengerとUnicornの違い【すごい初心者向け】 : http://fujiike.hateblo.jp/entry/2015/08/20/170751
- Railsを動作させるアプリケーションサーバunicornとは?概要やnginxとの違いなど : http://post.simplie.jp/posts/82
- Rails開発におけるwebサーバーとアプリケーションサーバーの違い(翻訳) : https://qiita.com/jnchito/items/3884f9a2ccc057f8f3a3
- Passenger vs Unicorn : https://techmedia-think.hatenablog.com/entry/20120922/1348240737
- Rackとは何か : https://qiita.com/k0kubun/items/248395f68164b52aec4a
- Ruby on Railsだけじゃない!Rubyフレームワーク6選 : https://eng-entrance.com/ruby-framework
- 東京暑いからRailsとSinatraの違いについて熱く語る : http://masa-world.hateblo.jp/entry/2017/07/08/161243