プログラミング初学者がまとめる〜webサーバーとアプリケーションサーバーの流れについてまとめてみようと思う。ざっと理解する編〜
*自身の言葉で書いてますので、間違っていることもあるかと思いますが、ご了承ください。訂正のコメントを頂けるとありがたいです。*
今回は前回の続きで、webサーバーとアプリケーションサーバーの流れに焦点を絞ってまとめていこうと思います!!railsアプリを前提に書いていくのでご了承ください。
◯Rack
今回の話をするにあたり一つ紹介したいのがRackについて知っておいて欲しいです!
Rackは簡単に言うと、アプリケーションサーバーとアプリケーションを橋渡しの役割を果たしているものです。
もっと具体的に言うと、RackはRailsのようなRuby製のwebフレームワークとアプリケーションサーバーの両方が話せる共通言語のようなものだと考えてください。両者は別々の言語で書かれており、直接会話ができません。しかしRackは両者の共通言語を理解できるので、RailsはUnicornと話せますし、UnicornはRailsと話せるので、railsがアプリとして機能するわけです。
◯再度流れを確認する
1.webリクエストはwebサーバーが受け取ります。
2.リクエストが静的コンテンツであれば、webサーバーがレスポンスを返す。
3.webサーバーが処理できない場合は、アプリケーションサーバーにリクエストを送る。
4.アプリケーションサーバーからRackを通して、アプリケーションにリクエスト(←NEW)
5.アプリで処理を行った後、Rackを通じてアプリケーションサーバーへレスポンスを返す(←NEW)
6.アプリケーションサーバーからwebサーバーへレスポンス、webサーバーがクライアントにレスポンスを返す
◯流れに具体名を入れてみる
1.webリクエストはwebサーバーが受け取ります。(Nginx・Apache)
2.リクエストが静的コンテンツであれば、webサーバーがレスポンスを返す。(Nginx・Apache)
3.webサーバーが処理できない場合は、アプリケーションサーバーにリクエストを送る。(Nginx・Apache→Unicorn・Puma)
4.アプリケーションサーバーからRackを通して、アプリケーションにリクエスト(Unicorn・Puma→Rack→アプリ)
5.アプリで処理を行った後、Rackを通じてアプリケーションサーバーへレスポンスを返す(アプリ→Rack→Unicorn・Puma)
6.アプリケーションサーバーからwebサーバーへレスポンス、webサーバーがクライアントにレスポンスを返す(Unicorn・Puma→Nginx・Apache)
◯なぜwebサーバーとアプリケーションサーバーを構築する必要があるのか?
これまでを聴いていると万能なRackだけあれば、うまく処理できるように思えるかもしれません。
しかしRackだけだとWebサーバがなく、高速な処理や高負荷に耐えることができなません。nginxやunicornといったwebサーバを用意することでうまく負荷分散をして、大勢のクライアントからのアクセスに対応できるようにしている。
◯まとめ
今回はwebサーバーとアプリケーションサーバーの流れについて少し細かくまとめてみました。
普段なんとなくサーバーを立ち上げていますが、裏ではこんなことが起きているんですね!
次回からはwebサーバーやアプリケーションサーバーについて細かく書いてみようと思います!
最後まで読んで頂きありがとうございました!!