はじめに
最近、Railsを学ぶなかでPumaというサービスについて学びました。
PumaとはHTTPプロトコルに対応できるWebサービスとしての役割とRubyを実行することができる役割を持つサービスで、学習していく中でWebアプリケーションについて忘れているところがあるなぁと思ったので、今回は初心に戻ってWebアプリケーションの動作フローについて復習も兼ねて記事にしてみました。
Web三層構造の動作フロー
基本的には以下の通りWebサーバー⇒アプリケーションサーバー⇒データベースサーバーという三層で構成されており、処理は以下の画像の通りになると思います。
※Pumaについて学んだのですがPumaのアイコンで良いのがなかったので画像には記載してないです。
しかもPumaって発音がプーマではなくてピューマなんですね。
➀HTTPプロトコルを使用してWebサーバへリクエストを送る。
Webサーバーを使用しなくてもHTTPプロトコルをサポートしているアプリケーションに対しては
直接リクエストを送ることは可能だが、ポート番号の指定やセキュリティ面の危惧、その他にもWebサーバーを経由しないときよりも高負荷になるといったデメリットがあるので基本はWebサーバーを用いた三層構造を推奨。
➁動的なデータのリクエスト処理を要求する。
Webサーバー単体としては静的なデータ(決められた画像や文字)をレスポンスとして返すことは可能。
しかしクライアントのリクエストに応じて、リアルタイムでデータ生成や更新がされる動的なデータを返すことはできないのでAPPサーバーに処理を要求する。
Webサーバーがバックエンドのサーバーに処理を任せることをリバースプロキシともいう。
➂データベースへ処理に必要なデータを要求
APPサーバーでデータを処理する際、必要となるデータをデータベースから取得するように要求する。
④データベースサーバーからAPPサーバーへデータを送信。
データベースからAPPサーバーへデータを送信。
⑤APPサーバーで処理を行う
データベースから得たデータを基にAPPサーバーが処理を行う。
これにより➀でリクエストされたデータに対してのレスポンスデータ作成されるのでWebブラウザ上に表示させる。
⑥レスポンスデータをWebブラウザに表示する
⑤で作成したデータをWebブラウザに表示する。
といった感じですかね。
APPサーバー内のサービスの中でもHTTPプロトコルに対応していないphp-fpmやUnicornなどのHTTPプロトコルをサポートしているものがあり、HTTPプロトコルをサポートしているUnicornやPumaは最悪Webサーバーを経由しなくても通信は可能です。
※基本はWebサーバーを経由する設定を推奨
まとめ
久しぶりにWebの3層構造について復習しました。
やはり動作フローなどを図として自分で整理するのはアウトプットとしてとても効果的だなと思いました。
こういう基本的な部分は資格勉強や本などで勉強することが多いのですが、
どうしても「あれ、これってどういうフローで動作してるんだっけ?」ってなることがあります。
こういった基本的な部分はしっかり頭に定着させておきたいですね。