どうも。
Railsを触ってます。突然ですが、Webサーバーとアプリケーションサーバーの違いをよく理解できていなかったです。概要をまとめておきます。
【Rails】Webサーバーとアプリケーションサーバーの違い
結論
Webサーバー
- NginxやApacheなどが有名
- ユーザーからのリクエストを受け取って、それに対応するHTMLファイルをユーザーに返す
アプリケーションサーバー
- PumaやUnicornなどが有名
- Railsのアプリケーションを動かしているサーバーそのもの
- DBにアクセスして、リクエストされたデータを探してきて、Webサーバーに返すとかもやってくれる
Railsでの処理の流れ
ざっくりとWebサーバーとアプリケーションサーバーを通してのRailsのリクエスト処理の流れについてをまとめておきます。
- クライアントPCからリクエストがくる
- まずはWebサーバーでリクエストを受け取る。そのリクエストをアプリケーションサーバーに渡す
- アプリケーションサーバーはそのリクエストをRackに伝える
- RackはRailsのルーティングにリクエストを伝える。対応するコントローラーが動作する。
まずは私たちのPCですね、そこからリクエストが来ます。例えばYoutubeのページを表示してくれー、といった感じですね。
続いてそのリクエストをWebサーバーで受け取ります。なぜ最初にWebサーバーで受け取るかというと、リクエストの処理を素早くさばけるからです。
例えば、Youtubeのページを表示する人って、あなただけではないですよね?同時接続で、それこそ何万と言う人が一緒にリクエストを送信してくることがあります。
それをさばけるのがWebサーバーの特徴です。他にも色々やってくれるのですが、とりあえずWebサーバーで最初にリクエストを受けると言うことがポイントです。
続いてWebサーバーで受け取ったリクエストを、アプリケーションサーバーに渡します。
アプリケーションサーバーは、Railsのアプリケーションを動かしているサーバーです。ここにあなたの作ったRailsアプリケーションがのっかています。
例えば、development環境でRailsアプリケーションって動かしますよね?基本的には困ることなく動きますよね。それはつまりアプリケーションサーバー上でリクエストの処理とかを全てをやっていると言うことです。
じゃあ、アプリケーションサーバーだけでよくない?と思いませんでしたか?私もそう思いました。
ですが本番環境はWebサーバーをかませることが多いです。やはりリクエストを素早くさばけるWebサーバー君がいてくれた方が良いからです。ページの表示時間などが短縮されるというような、良いパフォーマンスが出せるからです。
ちなみにアプリケーションサーバーは、DBへのアクセスが必要だったら、やってくれたりもします。
続いてアプリケーションサーバーからRackへとリクエストは伝達していきます。Rackはご存知でしょうか?簡単に例えると、プログラミング版ほんやくコンニャクみたいなものです。
アプリケーションサーバー側で使われている言葉と、Railsの言葉は違います。タガログ語と日本語みたいなものです。
Rackはそのどちらの言葉も理解しています。なのでアプリケーションサーバーからの話を、Rackが理解してくれて、Railsに伝えてくれます。逆方向も問題ないです。
そしてRackのリクエストはRailsのルーティングに伝わって、適切なコントローラーが動き出します。
こんな感じで理解しておけば大丈夫なんじゃないかと思ってます!わからないとこも多いですが!間違ってましたら、コメントくださいませ!では!