AWSでWEB3層構造の構築①(WEB3層構造の基礎)

未経験からサーバーエンジニアに転職するために、WEB3層構造について勉強しています。WEB3層構造の仕組みについて自分なりの理解をアウトプットし、実践としてAWSでWEB3層構造を構築するまでの過程を記すこととしました。

本記事が、私と同じような初心者エンジニアの方達の手助けとなれば幸いです。

# 1. はじめに

まずは、本題であるWEB3層構造の前提となる知識を以下に示しておきます。

#### 前提知識① ミドルウェア　

ミドルウェアとは、アプリケーションとOSの中間的な処理を行うソフトウェアのことです。OSはサーバを動かす上での基本機能を備え、ミドルウェアをインストールすることで特定の処理や動作が可能になります。
ミドルウェアは単体で動かず、サーバにインストールすることで、後述するWEBサーバ・APサーバ・DBサーバを構築出来るようになります。

#### 前提知識② クライアントサーバシステム

クライアントサーバシステムとは、機能やサービスを提供する「サーバ」と、サービスをリクエストする「クライアント」とで役割を分担したシステムのことです。
クライアントとは、簡単に言えばブラウザ(Chrome・Internet Explorer・Firefox等の、WEBサイトを閲覧するために必要なソフト)を指しています。クライアントサーバシステムでは、以下の流れでデータがやり取りされます。

##### :desktop: クライアントサーバシステムでの処理の流れ

①ユーザーは「あのページを見たい」とクライアントに要求(リクエスト)
↓
②リクエストを受け取ったクライアントが、リクエストをサーバまで送る
↓
③クライアントからのリクエストを受け取ったサーバは、該当ページをクライアントに返す(レスポンス)

**WEB3層構造とはクライアントサーバシステムに含まれる概念のうちの一つ**です。


# 2. WEB3層構造とは

SNSやショッピングサイト等のインターネットを通じて利用できるアプリケーションは、WEBアプリケーションと呼ばれており、以下の3層構造となっています。


|層の名称|層の主な役割|役割を担うサーバ |
|:-----------------|:-----------------|:-----------------|
| プレゼンテーション層  | ユーザーと直接データの受け渡しを行う | WEBサーバ　
| アプリケーション層|JavaやRuby、PHPプログラムの処理を実行する|APサーバ　
| データ層| データの保管を行う|DBサーバ　

上記の**WEBサーバ・APサーバ・DBサーバの3台から構成される構造**を**WEB3層構造**と呼び、WEBサイトを構築する際の基本的な構造となっています。WEB3層構造においては、以下の流れでデータがやり取りされています。

#####  :desktop: WEB3層構造での処理の流れ

①ユーザーがWEBクライアント(WEBブラウザ)を通してWEBサーバにリクエスト・要求を行う。
↓
②WEBサーバがURLを解釈し、利用者からリクエストされたファイルを探す。
(1)利用者からリクエストされたファイルがHTMLファイルや画像ファイルなどの静的ファイルであれば、そのリクエストに応じてクライアントに該当のファイルを返す。
(2)ファイルがJavaやRuby、phpプログラムならAPサーバに解釈・実行を要求する。
↓
③APサーバが②で要求されたプログラムを解釈する。
(1)プログラムを実行してユーザー専用のページを動的に生成する。
(2)データの保存、読み込みが必要な場合はDBサーバにデータ管理を要求する。
↓
④DBサーバがAPサーバからのデータの保存、読み込みの要求に応答。必要なデータを探しAPサーバに返す。
↓
⑤データを受け取ったAPサーバは処理を実行してファイルを動的に生成し、WEBサーバに返す。
↓
⑥WEBサーバが、⑤で受け取った結果をWEBクライアント(WEBブラウザ)が解釈できるHTMLなどの形式にして返す。
↓
⑦WEBクライアント(WEBブラウザ)に表示する。


# 3. WEB3層構造のメリット

まずはメリットについて解説します。

#### メリット①　セキュリティを高める

WEBサーバ、APサーバ、DBサーバが一台にまとまっていると、大切な情報が保管されているDBサーバにアクセスしやすくなってしまいます。

WEB3層構造を用いることで、WEBサーバ、APサーバ、DBサーバはそれぞれローカルのIPアドレス・ポートを指定しながら段階的にデータをやり取りします。

例えば外部ユーザからWEBサーバを通じて不正アクセスされたとしても、サーバ間のファイアウォールで不正アクセスをブロックしたり、WEBサーバからDBサーバへ直接アクセスすることが出来ないため、セキュリティを高めることができます。

#### メリット②　管理がしやすい

1台のサーバにWEBサーバ・APサーバ・DBサーバがまとまっていると、サーバに不具合が発生した場合、システムが全停止となりシステムにアクセス出来なくなります。

WEB3層構造を用いることで、WEB機能がおかしいのであればWEBサーバ故障、アプリケーションエラーが出ているのならAPサーバ故障と、1台に各サーバが集約されている場合と比較して不具合の影響が軽微になります。

例えばサーバの拡張や改修が必要な場合に、該当サーバのみ作業を行う等、他のサーバに影響を及ぼすことなく作業範囲を限定することが可能となります。


#### メリット③　処理速度の向上

WEB３層構造を用いることで、データ処理にかかる負荷が３つに分散されます。静的ファイル（HTML、CSS、画像など）のみ使用する場合はWEBサーバ、動的ファイルを使用する場合のみAPサーバに繋げることで、サーバがそれぞれの機能だけに集中することが出来ます。結果的に処理速度向上に繋がります。

# 4. WEB3層構造のデメリット
デメリットについて解説します。

#### デメリット① 金銭的コストがかかる

WEB３層構造では、WEBサーバ・APサーバ・DBサーバの3つを用意する必要があり、1台構成のサービスと比べ導入コストがかかってしまいます。

#### デメリット②　オーバーヘッド
オーバーヘッドとは、簡単に言えば『付加的な処理のこと』です。WEB３層構造では、３つのサーバがやりとりを行うため、1台構成と比べると余分なやり取りが増えてしまいます。


# 5. WEBサーバとは
WEBブラウザなどフロントエンドを通じ、ユーザーと直接データの受け流しを行うサーバです。

**WEBサーバの役割**
:white_check_mark: クライアントからのリクエストに対して静的コンテンツを見せる
:white_check_mark: APサーバに動的コンテンツを要求し、返ってきた結果を見せる

**WEBサーバの種類**
Apache、Nginx、IISの3種類で全体のおよそ80％近くのシェアを占めているそうです。

| WEBサーバ名| 説明 |
|:-----------------|:-----------------|
| Apache HTTP Server  | 幅広い動作環境に対応しており、単にApacheとも称されている。             |
| nginx(エンジンエックス)|処理能力や同時接続数などの負荷への耐久力は、Apacheよりも高いと言われている。|
| IIS| Microsoftが提供するWindows用WEBサーバ|


# 6. APサーバとは
WEBサーバからのリクエストに対し、JavaやPHPなどのプログラミング言語によって処理を行うサーバです。システムの規模によっては、WEBサーバとAPサーバを１つにすることもあります。

**APサーバの役割**
:white_check_mark: WEBサーバからのリクエストを元に、JavaやPHPなどで作成されたアプリケーションを実行して動的コンテンツを生成する
:white_check_mark: 必要に応じDBサーバへリクエストを行い、返ってきたデータを加工して動的コンテンツに埋め込む

##### APサーバの種類
扱うプログラミング言語によって、使うAPサーバが変わってきます。

| APサーバ名|扱うプログラミング言語
|:-----------------|:-----------------|
| Tomcat | Java|
| Puma|Ruby|
| Unicorn| Ruby|

※PHPはApache(WEBサーバ)のモジュールを使用することで、APサーバの仕組みを導入することが出来ます。

# 7. DBサーバとは
WEBサイトに必要なデータを保管・管理するサーバです。重要なデータや個人情報など格納されているため、接続時には認証が必要になることが大半です。

**DBサーバの役割**
:white_check_mark: APサーバのリクエストに従って「SQL」と呼ばれるデータベース言語を実行し、その結果をAPサーバに返す

##### DBサーバの種類

DBサーバは、大きく分けて**RDBMS**と**NoSQL**の2つが存在します。

### RDBMS
SQL(データベースに対して命令を出す際に使用される、プログラミング言語の一種のようなもの)を利用してリレーショナルデータベース(列と行で構成されている表のようなデータベース)を管理するシステムです。

**代表的なRDBMS**

| 名称 | 概要 |
|-----------------|------------------------------------------------------------------------|
| Oracle Database | 世界初の商用データベースで、高い堅牢性を持つと言われており、数多くのユーザーが同時に利用しても、動作に影響が出にくいのが特徴。有償での提供となる分、ベンダーのサポート体制が充実しており、世界的に高いシェアを持っている。|
| MySQL |基本無料で利用できる、Oracle社管理のオープンソース型データベース管理システム。大容量データの高速処理が可能で、検索エンジンや数多くのレンタルサーバーなどで利用されていることから、世界で最も有名なデータベース管理システムとも言われている。|
| Amazon Aurora | AWSが、クラウド向けに開発したリレーショナルデータべース。処理能力が高く、互換性のあるMySQLに比べ5倍、PostgreSQLに比べ3倍の処理能力がある。ストレージが必要に応じて最大64TBまで自動で拡張される拡張性も特徴で、データベース保護のセキュリティも複数段階用意されており、移動中のデータも暗号化されるため安心して使用可能。|

### NoSQL
**RDBMS**以外のデータベースのこと。

**代表的なNoSQL**

| 名称 | 概要 |
|-----------------|------------------------------------------------------------------------|
| MongoDB | 自由に構造を変更することができ、拡張性や処理速度が速いなどの特徴がある。MongoDBはNoSQLの中では最も多く採用されており、クラウド型のアプリやブロックチェーンのデータベースとして活用されている。|
| Amazon ElastiCache|AWSのサービスの中で最も高速なデータベースサービスで、インデータメモリストアというHDDやSSDのデータを読み込まず、メモリ上で動作する特徴がある。これにより飛躍的に早い応答を実現しており、リアルタイム入札やオンラインゲームのランキング表示など、多数の人がアクセスし、リアルタイムで情報が入れ替わるものに利用されている。|


# 8.まとめ
大規模システムは多くの人たちが利用するものです。多少お金がかかってもセキュリティの高さや管理のしやすさという点でWeb3層構造が採用されているのです。

次の記事で、実際にWEB3層構造を構築していきます。

- [AWSでWEB3層構造の構築②(VPC、サブネット、NW設定、インスタンス起動、SSH接続)](https://qiita.com/lucifer22/items/2e5850e1b851de5629d6)

### 参考

https://www.infraexpert.com/info/server15.html

https://swooo.net/dev/webapp-server_2/

https://thinkit.co.jp/article/11837

https://qiita.com/mk185/items/e914683410fd4ecaf0af

https://it-biz.online/it-skills/3-tier/

https://kitsune.blog/web-system-structure

https://gyroibaraki.com/web-system-structure/

https://tedaeri.com/knowledge-web-three-tier-structure/ 

https://it-trend.jp/database/article/89-0066

https://tokku-engineer.tech/network-web3-server/

https://meetsmore.com/product-services/databases/media/99426