まさ@ブログ書き込み中

まさ@ブログ書き込み中

まさの旅、英語、プログラミング、プライベートについて、色々記録しています。

Webシステムの三層構成【Web技術入門5】

 

こんにちは。

 

ついにこの本の第5章までのまとめを終えようとしているまさです。

 

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか

 

 

早速のこの「Web技術入門」シリーズを締めくくる第5章についてまとめていきます。

 

 

サーバサイドはもっと複雑

 

これまで、WebクライアントとWebサーバのやりとりとしてWebアプリケーションを捉えて来ました。CGIだってサーブレットだってJSPだって、CookieだってセッションIDだって、HTTP通信だって、WebクライアントとWebサーバのお話とざっくり括っていたわけです。

 

しかし、Webクライアントのリクエストに応えるためにサーバサイドが処理しなければならないことはもっと複雑です。実は、サーバサイドでは複数のコンピュータが役割分担してクライアントのリクエストに応えられるよう頑張っているのです。

 

もう少しこのサーバサイドの役割分担についてもう一度WebサーバとWebクライアントの歴史を遡りながら見ていきましょう。

 

 

Webサーバの役割の進化

 

WWWの黎明期

WWWが生まれた時は、以前お話しした通り、WebクライアントのリクエストはHTMLのみで書かれた静的なコンテンツを表示するだけなので

 

Webブラウザ ⇆ Webサーバ

(「⇆」はリクエスト・レスポンスなどの通信の関係、「⇆」を介するものはそれぞれの別のコンピュータを表しています。)

 

という関係でした。

 

CGIの時代

そしてCGIという仕組みが発明されて、Webページを動的に生成するようになりましたね。しかし、この段階ではコンピュータの台数が増えるわけではありません。

 

ややこしいですが、Webサーバというコンピュータの中でWebサーバというソフトウェアとCGIで呼び出されるWebアプリケーションという2種類のソフトウェアが動作していただけです。

 

こんな感じです。

 

Webブラウザ ⇆ Webサーバ【Webサーバ ⇆ (Perlインタプリタ→ Webアプリケーション)】

(【】内は1つのコンピュータの中のソフトウェアを指しています。また、【】内の「⇆」はソフトウェアやプロセス同士の通信を指していて、【】内の()は1つのプロセスです。)

 

しかし、このままCGIを利用すると毎回(Webアプリケーションを動作させるための)Perlインタプリタなどのプロセスを起動することになり非効率なので、このパターンの最終形ではWebサーバの中でPerlPHPのプログラムを直接実行できるようになりました。

 

Webブラウザ ⇆ Webサーバ【(Webサーバ ⇆ Webアプリ)】

 

データベースサーバの登場

そして、Webアプリケーションが高度化してくると、データベースが必要になって来ます。

 

そのデータベースはどのノード(コンピュータ)で動作すべきなのか。一番簡単なのはWebサーバの上で異なるプロセスとして動作させることです。

 

Webブラウザ ⇆ Webサーバ【(Webサーバ ⇆ Webアプリ)⇆ データベース】

 

データベース(以下DB)が大きくなったら、DBだけを別のコンピュータで動かせばいい。

 

Webブラウザ ⇆ Webサーバ【(Webサーバ ⇆ Webアプリ)】⇆データベース

 

アプリケーションサーバの登場

実は、CGIの問題点を解決するために現れた(以前の記事を参照)ServletJSPは、Webサーバとは別のプロセスなんです。

 

でも、CGIの問題点はWebサーバからCGIPerlC言語のプログラムを呼び込むことで、一々別のプロセスを起動させることでしたね。

 

(以下参照)

(既出)CGIの仕組み

Webブラウザ ⇆ Webサーバ【Webサーバ ⇆ (Perlインタプリタ→ Webアプリケーション)】

 

じゃあServletJSPCGIによるWebアプリケーションと同じなのか?

 

いいえ、違います。

 

CGIと大きく違う点は、アプリケーションサーバと呼ばれるソフトウェアが常に動作していて、ServletJSPを動かし続けているので、CGIでプログラムを一々動かす(「使い捨てモデル」と言います。)より早く動作するのです。

 

要するに、こんな感じ。

 

Webブラウザ ⇆ Webサーバ【Webサーバ ⇆ 《Java VM + アプリケーションサーバ + Webアプリケーション(Servlet/JSP)》】

 

ちなみに、PHPPerlなどはWebサーバ内にモジュールという拡張機能として、それらのスクリプトを実行するプログラムが組み込まれています。(P95)

これは先ほど説明したWebアプリケーションの最終形態(上の青文字参照)のことです。

 

Webサーバの機能を持ったアプリケーションサーバ

実は、ほとんどのアプリケーションサーバはWebサーバとしての機能も持っています。

 

なので、規模の大きくないWebシステムや、Webアプリケーションの開発環境であれば、以下のような構成が採用されます。

 

Webブラウザ ⇆ Webサーバ【JavaVM + Web/アプリケーションサーバ + Webアプリケーション(Servlet/JSP)】

 

 

Webシステムの三層構成

 

ここまで説明して来た内容からわかる通り、WebアプリケーションにおけるサーバサイドはWebサーバ、アプリケーションサーバ、データベースサーバの3種類が構成要素として出てきます。

 

現代のWebシステムは、これら三つの要素をどのノードに配置するかによってさまざまな構成をとります。

 

それが、Webシステムの三層構成というわけです。

 

(50min)