Web3層アーキテクチャって何のこと?
詳しく教えて!
Webシステムの構成について表現した言葉だよ!
アーキテクチャの構成について解説していくね!
Web3層アーキテクチャとは?
Web3層アーキテクチャとはWebシステムの構成要素を「プレゼンテーション層」、「ファンクション層(アプリケーション層)」、「データ層」の3層に分割し、独立したモジュールとして設計するアプリケーションのことです。
3層アーキテクチャを採用することによって、ユーザインタフェース、ビジネスロジック、データベースの相互依存を抑え、変更の容易性、拡張性を高めることができます。
Web3層アプリケーションはプレゼンテーション層を担当する「Webサーバー」、ビジネスロジックを担当する「アプリケーションサーバー」、データ層を担当する「DBサーバー」によって構築されることが多いです。
- 3層を独立したモジュールとして設計することにより相互依存性が抑えられる
- 各層にセキュリティ製品を配置できるためセキュリティを高めることができる
- 不具合があったとしても対象のサーバのみ対応すればよく影響範囲も抑えられる
- 不具合があったときに影響範囲を抑えることができる
- 物理サーバーを購入する費用がかかる
- アプリケーションやライブラリ自体に致命的なバグがあると階層を分けてもシステムを守ることができない
プレゼンテーション層
ブラウザからのHTTP通信を処理する層です。必要に応じてファンクション層に処理を渡します。
ブラウザから閲覧したいページのリクエストを受け取ると、そのページの情報を返します。
画面の表示処理をする層で、ブラウザに表示する内容のレイアウトや文字の処理をします。
プレゼンテーション層はWebサーバーで構成されていて、ApatchやNginxなどが利用されています。
ファンクション層
プレゼンテーション層からのリクエストに応じてビジネスロジックを処理する層です。
プレゼンテーション層で入力されたデータを処理します。
必要に応じてデータ層にアクセスして、データの検索や作成・更新などを行います。
プログラミングをして作成したアプリケーションを動かすためのアプリケーションサーバーによって構成されています。
データ層
データを管理する層で、ファンクション層に対してデータの検索、抽出、保存などのインタフェースを提供します。
DBサーバーにより構成されていて、PostgreSQL、MySQLなどが利用されています。
ミドルウェアとは?
各層に名前の違うサーバーが出てきたけど、サーバーにも種類があるの?
サーバーの中で動いているソフトウェアによって、
サーバーの種類が変わるよ。
そのソフトウェアを「ミドルウェア」と言うよ!
ミドルウェアとはアプリケーションとOSの中間的な処理を行うソフトウェアのことです。
OSはサーバーを動かす上で必須ですが、あくまで基本機能しか持っていません。
そのためOSのみでは業務で求められる機能を備えていません。
ミドルウェアをインストールすることで特定の処理や複雑な動作が可能となり、
アプリケーションと比べて汎用的な機能を提供することができます。
またミドルウェアは単体では動きません。
- アプリケーション:Railsアプリ、Laravelアプリなど
- ミドルウェア:Nginx、Unicorn、PostgreSQLなど
- OS:Linux、Ubuntu、CentOSなど
- ハードウェア:HDD、SDDなど
主なミドルウェア
サーバー名 | ミドルウェア |
---|---|
Webサーバー | Apache HTTP Server, Nginx |
アプリケーションサーバー | Unicorn, Passenger, JBoss, TomcatUnicorn, Passenger, JBoss, Tomcat |
DBサーバー | PostgreSQL, MySQL |
表のようなミドルウェアをインストールしているサーバーが「Webサーバー」や「アプリケーションサーバー」、「DBサーバー」と呼ばれます。
ミドルウェアにはいくつか種類がありますが、サーバーとしてはどれも同じ役割をします。
しかし、ミドルウェアによって使える機能やできる処理が違うので注意しましょう。
インストールされているミドルウェアによって、
サーバーの呼び方が変わるんだね!
サーバーの種類
各層で使われるサーバーについて解説するね!
Webサーバー
Webサーバーはブラウザからリクエストされた情報を返します。
ブラウザに表示されているのはWebサーバーから送られてきた文字や画像の集合体です。
その文字や画像をブラウザに表示する処理をしています。
Webサーバには、主にクライアントからのリクエストに対して2つの役割があります。
「静的コンテンツを見せること」と「アプリケーションサーバに動的コンテンツを要求し、返ってきた結果を見せること」の2つです。
- 誰が見ても常に同じ内容を表示するもの
- 例えば企業ホームページのトップ画像や事業内容のページ
- 静的コンテンツはWebサーバー内のディスクに保存されている
- 見る人や時間などによって内容が変わるもの
- 例えば銀行の残高やECサイト(Amazonなど)のショッピングカート
- 動的コンテンツはクライアントからリクエストされる度に新たに作成される
アプリケーションサーバー
アプリケーションサーバーはWebサーバーから受けたリクエストを元に、
RubyやPHPなどで作成されたアプリケーションを実行して動的コンテンツを生成します。
必要であればDBサーバーへリクエストを行い、返ってきたデータを加工して動的コンテンツとして扱います。
- 四則演算をするアプリケーションがあるとき、
クライアントが「1+1」を求めるリクエストをWebサーバーへ送る - Webサーバーはこれを動的コンテンツと判断して、
アプリケーションサーバーに「1+1」を求めるのリクエストを送る - 「1+1」を受け取ったアプリケーションサーバーは四則演算の計算をしてWebサーバーに結果を返す
- Webサーバーは「1+1」の結果を表示させる
- 「リンゴとバナナの合計金額」を計算するアプリケーションがあるとき、
クライアントが「リンゴとバナナの合計金額」を求めるリクエストをWebサーバーへ送る - Webサーバーはこれを動的コンテンツと判断して、
アプリケーションサーバーに「リンゴとバナナの合計金額」を求めるリクエストを送る - アプリケーションサーバーにはリンゴとバナナの価格データが存在しないので、
DBサーバーにリクエストをして価格を取得する - DBサーバーよりリンゴとバナナの価格を受け取ったアプリケーションサーバーは、
合計金額の計算をしてWebサーバーに結果を返す - Webサーバーは「リンゴとバナナの合計金額」の結果を表示させる
DBサーバー
DBサーバーはストレージに新たなデータを書き込んだり、必要なデータを引き出したり更新したりします。
DBなのでデータが大量に保管された場所を想像するかもしれないが、それはストレージの役割です。
SQLと呼ばれるデータベース言語を実行し、その結果をアプリケーションサーバーに返します。
それぞれのサーバーの種類と役割について分かったよ!
まとめ
Web3層アーキテクチャの構成について解説したよ!
- Web3層アーキテクチャとは「プレゼンテーション層」、「ファンクション層(アプリケーション層)」、「データ層」の3層に分割したもの
- 各層に分かれているため相互依存性が抑えられる
- 各層にセキュリティ製品を配置できるため、Web3層構造にするとセキュリティが向上する
- 3層に分かれているため管理がしやすい
- 不具合があったとしても対象のサーバーのみ対応すればいいため影響範囲を抑えることができる
- 物理サーバ購入に費用がかかるので注意が必要
- アプリケーションやライブラリ自体に致命的なバグがあると階層を分けてもシステムを守ることができない
3層に分けておくことでメリットを多く受けられるね!