Web三層構造
概要
三層構造
三層構造とは、ネットワークにおけるクライアント・サーバーシステムを「プレゼンテーション層」、「アプリケーション層」、「データ層」に分割して構成されるシステムのことである。
三層アーキテクチャ、または三層構成とも呼ばれる。
Web三層構造
Web三層構造とは、三層構造をWebアプリケーションに適用したものであり、プレゼンテーション層、アプリケーション層、データ層をそれぞれWebサーバ、AP(アプリケーション)サーバ、DB(データベース)サーバに分割して構築される。
三層構造プレゼンテーション層
アプリケーション層
データ層
↓
↓
↓
Webサーバ
APサーバ
DBサーバ
現在、世界中のWebサイトのほとんどがこの構成なので、もしあなたがWebアプリを作ろうとしているのなら、これに従っておけば間違いないであろう。
なぜ三層構造にする?
背景
ではなぜWeb三層構造が産まれたのか、その背景について少し触れよう。
Web三層構造が考え出される前は、Webアプリケーションは二層構造だった。
二層構造ではWebサーバ・APサーバ・DBサーバが使われるという点では三層構造と同じだが、WebサーバとAPサーバを同じサーバ上に配置していた。
この構成だとどうなるかというと、クライアントからのリクエストに対して毎回プロセスが発生することになる。このプロセスは一回あたり数ミリ秒かかることになる。
アクセスの少ないWeb黎明期ではこの構成でもよかったのだが、やがてインターネットは急速に発達し、人気のWebサイトには1日に数万アクセスもされるようになってきた。
こうなると、数ミリ秒が重なり、サーバに負荷がかかってしまうことになる。
ここで処理速度の向上・負荷軽減などのために、WebサーバとAPサーバを分割する三層構造が考えられたのである。
メリット
三層構造のメリットは、上であげたものを合わせて以下の4つある。
- 処理速度の向上
WebサーバとAPサーバを分けることでプログラムを動かす頻度を減らして、処理速度の向上が期待できる。
- セキュリティ向上
DBサーバを二層構造よりも一層深いところに配置できる。サーバを分けることにより、ウイルス感染などのリスクを分散できる。
- 耐障害性向上
どこか一つのサーバがダウンした際に、Webサイト全て使えなくなるということがなくなる。例えば、APサーバがダウンしただけならWebサーバで静的コンテンツのレスポンスには応えられし、DBサーバは他のAPサーバのリクエストに応答できる。(DBサーバは複数のAPサーバから利用されることもある。)
- コスト削減
システムのアップデータが必要になった際に、一部のサーバの更新だけで済む。また、Webサイトに問題が発生した場合の原因がわかりやすい。
Web三層構造を詳しく見てみよう
三層構造について詳しく見ていこう。
Webサーバ・APサーバ・DBサーバの担当・例・通信相手・通信の流れはそれぞれ以下の通りである。
Webサーバ
- 担当
・Webクライアントとのやり取り
・静的コンテンツ
・動的コンテンツのリクエストを受け取ったら、APサーバへ渡す。
- 具体例
・Apache
・NginX
- 通信相手
・Webクライアント
・APサーバ
- 通信の流れ
・Webクライアントから静的コンテンツのリクエストを受け取った場合、そのまま結果をクライアントへ返す。
・Webクライアントから動的コンテンツのリクエストを受け取った場合、APサーバへ渡す。その結果がAPサーバから返ってきたら、それをWebクライアントへ返す。
APサーバ
- 担当
・Webサーバから動的コンテンツについてのリクエストを受け取る
・動的コンテンツ
・DBサーバのデータ操作命令
- 具体例
・puma
・Unicorn
・Tomcat
- 通信相手
・Webサーバ
・DBサーバ
- 通信の流れ
・Webサーバから動的コンテンツについてのリクエストを受け取り、その結果を返す。
・DBサーバへのアクセスが必要ならDBサーバへデータ操作命令を送り、 返ってきたデータをHTML等に埋め込んでからWebサーバへ返す。
DBサーバ
- 担当
・APサーバからDB操作命令を受け取り、その結果を返す。
・DB操作命令の通りにDBを操作する。
- 具体例
・Mysql
・sqlite
・MariaDB
・NoSQL
- 通信相手
・APサーバ
- 通信の流れ
・APサーバからDB操作命令を受け取り、その通りにDBを操作する。 結果を得られたら、それをAPサーバへ返す。
三層構造の通信の特徴まとめ
・Webクライアントからのリクエストは全てWebサーバが受け取り、WebサーバへのレスポンスはWebサーバが全て行う。
・Webクライアントからのリクエストが「静的コンテンツ」の時、動くのはWebサーバのみである。
・Webクライアントからのリクエストが「DBへのアクセスの必要がない動的コンテンツ」の時、動くのはWebサーバとAPサーバの2つである。
・Webクライアントからのリクエストが「DBへのアクセスの必要のある動的コンテンツ」の時のみ、Webサーバ、APサーバ、DBサーバの全てが動く。