テクノロジー

2024年10月1日

Webアプリケーションを支えるサーバの種類

Webアプリケーションを支えるサーバの種類について、Webサーバ、アプリケーションサーバ、データベースサーバの役割と機能を解説。
各サーバがどのように連携してクライアントのリクエストを処理し、動的・静的なコンテンツを効率的に提供するか学べます。

ゴール

  • Webアプリケーションに関連するサーバの種類とはたらきを理解する

サーバの種類を学ぶ

すでに学習したように、サーバとは、クライアントコンピュータからの要求に対し、サービスを提供する役割を持つアプリケーションであり、それを実装したコンピュータのことです。
サーバは常にクライアントとの関係で成り立ちます。
クライアントがインターネットを通してサーバを利用するとき、相互のアプリケーションをつなぐのは、TCP/IPのアプリケーション層プロトコルになります。
なぜなら、インターネット上でアプリケーションのメッセージを運ぶのは、TCP(UDP) とIPのプロトコルだからです。
逆に言うと、アプリケーション層のプロトコルは、インターネット上で利用できるそれぞれのサーバに対応します。

以下の図は、アプリケーション層のプロトコルの一部です。
これらは、インターネットを通してクライアントサーバのやり取りを担うことで、サーバのアプリケーションサービスを提供します。
つまり、アプリケーション層のプロトコルの数だけサーバが存在します。

Image from Gyazo

  • Webサーバ:Webサービスを提供する
  • メールサーバ:メール送受信機能を提供する
  • DNSサーバ:ドメイン名解決を行う
  • SSHサーバ:SSH接続サービスを提供
  • FTPサーバ:ファイル転送機能を提供
  • NTPサーバ:時刻同期を行う

ここでは、Webアプリケーションに直接的に関わるサーバについて詳しく説明していきます。

Webアプリケーションは、以下の図のように、ブラウザからの要求に対して、Webサーバを通してアプリケーションを実行し、その結果をブラウザに返す仕組みです。

Image from Gyazo

しかし、Webサーバは、個々のアプリケーションを呼び出し、実行制御する仕組みを持っていません。
そこで、Webサーバからの要求を、個々のアプリケーションに連携し、制御する仕組みが必要となります。

サーバの構成について

Webアプリケーションは、一般的に、以下のWeb3層構造で構成されています。

サーバ 役割
Webサーバ クライアントのWebブラウザとのやり取りを担当する。 プレゼンテーション層(本来はクライアントに相当)
アプリケーションサーバ Webサーバの指示でアプリケーションを実行制御する。 アプリケーション層(ファンクション層)
データベースサーバ アプリケーションサーバの指示で、必要なときにデータベースの役割を果たす。 データベース層

Image from Gyazo

それぞれのサーバがクライアントとなり、以下のようにやりとりを行います。

Image from Gyazo

  クライアント サーバ プロトコル
Webブラウザ Webサーバ HTTP/HTTPS
Webサーバ アプリケーションサーバ アプリケーションサーバに依存
アプリケーションサーバ データベースサーバ データベース操作のSQLに対応

次に、これらのサーバの役割について、詳しく説明していきます。

Webサーバ

Webサーバは、HTTPサーバとも言います。
すでに学習したように、ブラウザからのHTTPリクエストを受け取り、対応する結果をHTTPレスポンスとして返す役割を持つからです。

Webサーバは、HTTPリクエストのURLで指定された該当リソース(データ)を取得し、クライアントへ返すことが目的です。
リソース(データ)は、通常、HTML形式のファイルデータとして用意しておきます。
Webページの場合、ブラウザは受け取ったHTML形式のファイルデータを使ってブラウザの画面上に内容を表示します。

Image from Gyazo

用意するファイルデータを変えなければ、同じURLに何度リクエストしても、常に同じ内容が表示されます。
これを静的コンテンツ(静的ページ)といい、Webサーバは、静的コンテンツを返す役割を持ちます。
したがって、静的コンテンツを返すWebページであれば、アプリケーションサーバは必要ありません。

Webサーバの代表的なものとして、Nginx(エンジンエックス)Apache(アパッチ) があります。

アプリケーションサーバ

Webサーバから届いたリクエストに従って内部で処理を実行し、その結果をWebサーバに返すのがアプリケーションサーバです。

たとえばFacebookにログインすると、自分専用の画面が表示されます。
「Facebookで自分専用の画面を表示したい」というHTTPリクエストがクライアントから送られてきたらどうなるでしょうか。
Webサーバは、静的コンテンツ(いつ誰が見ても同じ内容のもの)専門ですから、対応ができません。

その場合、Webサーバはアプリケーションサーバに対応を依頼します。
アプリケーションサーバは、Webサーバから届いたリクエストに従って内部で処理をはじめます。
自分専用の画面表示であれば、そのユーザ専用の画面を組み立てて、レスポンスとしてWebサーバに返します。
レスポンスを受け取ったWebサーバは、クライアントに返します。

Image from Gyazo

このように、アクセスする人やタイミングによって異なるコンテンツのことを 動的コンテンツ といいます。
アプリケーションサーバは、動的コンテンツを担当 します。

アプリケーションサーバの代表的なものとして、Unicorn(ユニコーン)Puma(ピューマ)Tomcat(トムキャット)などがあります。

Webアプリケーションを自分のPCで開発しているときには、Webサーバを使わずに、アプリケーションサーバだけですべて処理をさせることがほとんどです。
逆に、WebアプリケーションをWeb上で実際に稼働させる場合には、Webサーバとアプリケーションサーバで役割分担させることが多いです。役割を分担させることで、多くの人がアクセスをしても負荷の分散が可能になるためです。

データベースサーバ

アプリケーションサーバが、アプリケーションを実行する上で、データベースに保存している情報を取り出したり、リクエストされた情報をデータベースに登録したりすることが必要になります。
このようなときは、アプリケーションサーバは、データベースサーバと連携して処理を行います。

Image from Gyazo

先のFacebookの例で、要求された人の情報を処理したいとき、アプリケーションの中にはそのような情報はありません。
要求された情報を返す役割を担うのがデータベースサーバです。
データベースサーバは、データベース管理のソフトウェアDBMS(DataBase Management System)によって構築されます。
DBMSの代表的なものとして、無償で利用できるオープンソースのPostgreSQL(ポストグレスキューエル)MySQL(マイエスキューエル)MariaDB(マリアデービー)があります。

まとめ

  • Webアプリケーションを支える代表的なサーバには、Webサーバ、アプリケーションサーバ、データベースサーバがある。
  • Webサーバは、クライアントからのリクエストを受け取り、静的コンテンツを提供する役割がある。
  • アプリケーションサーバは、Webサーバからの依頼で処理をし、動的コンテンツを提供する役割がある。

関連記事

代表的なプロトコル

ダイビックのことをもっと知ってみませんか?