クライアントサーバと Web の3層構成
クライアントサーバシステムの特徴、2層と3層の違い、Webサーバとアプリケーションサーバの役割分担、密結合と疎結合、分散データベースの透過性について、過去問の正しい選択肢を自力で選べるようになる。
Web サービスや業務システムは、ほぼすべて「頼む側」と「応える側」に分かれた構成で動いている。試験では、どの層がどの仕事を担当するかを入れ替えた選択肢で何度も出題される。
このレッスンで稽古する(用語チェック・過去問)結論:クライアントは頼む側、サーバは応える側
クライアントサーバシステムは、サービスを頼むクライアントと、サービスを提供するサーバが協調して処理を進める分散処理の形態です。機能は「サービス」という単位で分けられ、サーバがそのサービスを提供します。
レストランにたとえると、客(クライアント)が注文し、厨房(サーバ)が料理を作って出します。客が厨房に料理を頼むのであって、逆にはなりません。
試験で押さえる特徴は次の4つです。
- 役割は固定ではない:サーバが処理の一部をさらに別のサーバに頼むことがあり、そのときはそのサーバがクライアントになる
- OS をそろえる必要はない:クライアントとサーバで OS が違っても動く
- 機能ごとに別のマシンに分ける義務はない:ファイルサーバとプリントサーバを1台にまとめてもよい
- 密結合ではない:ネットワークでゆるくつながる分散処理なので、主記憶を共有する密結合システムとは別物
Web ブラウザをクライアントにすると何が楽になるか
専用のクライアントアプリを使う方式では、アプリを各端末に配布し、更新のたびに入れ直す必要があります。Web ブラウザをクライアントにすると、画面も処理もサーバから届くので、配布や更新の手間がなくなります。
そのため、いちばん軽くなる作業はクライアント環境の保守です。サーバの故障復旧、データベースの構築、ログインアカウントの管理はサーバ側の作業なので、クライアントの方式を変えても軽くなりません。
3層クライアントサーバ:表示・処理・データを分ける
3層クライアントサーバシステムは、システムを3つの層に分けた構成です。
| 層 | 担当する仕事 | 置き場所の例 |
|---|---|---|
| プレゼンテーション層 | 入力の受付と結果の表示(GUI) | クライアント(Web ブラウザ) |
| ファンクション層(アプリケーション層) | 業務処理(計算・判断・SQL の組立て) | アプリケーション(AP)サーバ |
| データ層 | データベースの管理 | データベース(DB)サーバ |
flowchart LR
A["クライアント:表示(プレゼンテーション層)"] -->|"HTTP 要求"| B["AP サーバ:業務処理(ファンクション層)"]
B -->|"SQL"| C["DB サーバ:データ管理(データ層)"]
クライアント以外の2層を1台ずつのサーバで作ると、AP サーバと DB サーバの2台になります。認証サーバやプロキシサーバ、全社 AP サーバと部門 AP サーバの組合せにはデータ層がないので、3層構成にはなりません。
2層との比較(よく出ます)
| 観点 | 2層クライアントサーバ | 3層クライアントサーバ |
|---|---|---|
| 業務処理を行う場所 | クライアント | AP サーバ |
| クライアントの仕事 | 表示と業務処理 | 表示だけ |
| ネットワークを流れるもの | クライアントと DB サーバの間で SQL 文 | クライアントと AP サーバの間で画面の要求と結果 |
| 業務処理を変更するとき | 全クライアントにアプリを配り直す | AP サーバを直せば済む |
| クライアント端末 | 処理能力が必要 | シンクライアント(表示だけを担当する軽い端末)でよい |
Web 型の3層構成では、業務処理はサーバ側で動き、ブラウザは HTML(画面の見た目を書いた文書。プログラムではない)に従って結果を表示するだけです。クライアントがサーバからの要求を待ち受けることはありません。
Web サーバと AP サーバを分ける理由
Web サーバは画像や固定ページのような、中身が変わらない静的コンテンツを返すのが得意です。AP サーバはプログラムを動かして、利用者ごとに中身が変わる動的コンテンツを作ります。2つを別の物理サーバにすると、軽い静的リクエストは Web サーバ、重い動的リクエストは AP サーバで処理する、という負荷の分担ができます。
AP サーバ(Web アプリケーションサーバ)の機能は、表示用の HTML 文書を動的に生成することです。ほかのサーバの機能と区別させる問題が出ます。
| 機能 | 担当するもの |
|---|---|
| 表示用 HTML を動的に生成する | Web アプリケーションサーバ |
| データベースを管理する | DB サーバ |
| 外部からの不正なパケットを捨てる | ファイアウォール |
| ホスト名を IP アドレスに変換する | DNS サーバ |
DB を使うリクエストの処理順序
Web サーバが DB を使って画面を返すときは、前の処理の結果がないと次の処理ができないという順番で並べます。リクエストごとに接続と切断を行う場合は、DB に接続 → SQL 文を組み立てる → DB にアクセスする → 結果から HTML を組み立てる → ブラウザに送る → DB を切断する、の順です。下の例題で実際に並べます。
集中処理と分散処理
1台のコンピュータで全部を処理するのが集中処理、複数台に分けて処理するのが分散処理です。クライアントサーバは分散処理の一種です。
| 観点 | 集中処理 | 分散処理 |
|---|---|---|
| 一部の故障の影響 | 全体が止まりやすい | 全体は止まりにくい |
| 拡張 | しにくい | 台数を増やして拡張しやすい |
| セキュリティの確保 | しやすい(1か所を守ればよい) | 難しい(守る場所が多い) |
| 運用管理 | 単純 | 複雑になりやすい |
密結合と疎結合(マルチプロセッサ)
複数のプロセッサ(CPU)を使うシステムは、つながり方で2種類に分けます。見分けるポイントは「主記憶を共有するか」と「OS がいくつあるか」です。
| 観点 | 密結合マルチプロセッサ | 疎結合マルチプロセッサ |
|---|---|---|
| 主記憶(メモリ) | 共有する | プロセッサごとに持つ |
| OS | 1つで全体を制御 | プロセッサごとに別々 |
| 結合の手段 | 主記憶を共有 | 磁気ディスクの共有や通信線 |
| 負荷を分ける単位 | タスク(細かい単位)。どのプロセッサでも実行できる | ジョブやトランザクション(大きなまとまり) |
| 必要になる仕組み | タスク間の同期(同じデータを同時に書き換えない工夫) | — |
たとえるなら、密結合は1枚の作業台(主記憶)を1人の現場監督(OS)の指示で複数の職人が囲む形です。疎結合は、職人それぞれが自分の作業台と監督を持ち、資材置き場(ディスク)や電話(通信線)だけを共有する形です。
信頼性を高める構成も選択肢に混ざります。デュプレックスシステムは片方が待機し、故障したら切り替えます。デュアルシステムは2台が同じ処理を同時に行って結果を照合します。
分散データベースの透過性
透過性とは、データが複数のサーバに分かれていても、利用者やプログラムがそれを意識せずに1つのデータベースのように扱える性質です。どのサーバにアクセスするかをプログラムが知っていなければならない状態は、透過性がありません。
アクセス透過性は、遠くにある資源でも、その場所の処理方式を知らずに、手元の資源と同じ操作で使えることです。分散処理の利点(通信コストの削減、信頼性の向上、組織ごとの運用)は透過性の説明ではないので、取り違えに注意してください。
DB を使うリクエストの処理順序を並べる
ア ③, ②, ⑤, ④, ⑥, ①
イ ③, ④, ②, ⑤, ⑥, ①
ウ ③, ④, ⑤, ②, ⑥, ①
エ ③, ⑤, ②, ④, ⑥, ①
解き方と答えを見る
- 両端を決める。問題文に「リクエスト処理ごとに DB への接続と切断を行う」とあるので、最初は③ DB への接続、最後は① DB の切断になる。選択肢はすべて ③ で始まり ① で終わるので、勝負は真ん中の ②④⑤⑥ の並びになる。
- 依存関係を書き出す。SQL 文がないと DB にアクセスできないので ⑤→②。DB から取った結果がないと HTML を組み立てられないので ②→④。HTML ができていないとブラウザに送れないので ④→⑥。つなげると ⑤→②→④→⑥ になる。
- ⑤→② の条件で選択肢を絞る。ア(③,②,⑤,④,⑥,①)とイ(③,④,②,⑤,⑥,①)は、どちらも ② が ⑤ より前にあり、SQL 文を作る前に DB にアクセスしているので消える。
- ウ(③,④,⑤,②,⑥,①)は ⑤→② を満たしているので、この条件では消えない。しかし ④ が ② より前にあり、DB の検索結果を受け取る前に HTML を組み立てることになるので成り立たない。②→④ の条件でウが消える。
- 残ったエ(③,⑤,②,④,⑥,①)を最後に確かめる。③接続 → ⑤SQL 組立て → ②アクセス → ④HTML 組立て → ⑥送信 → ①切断 となり、すべての依存関係を満たしている。
答え:エ(③, ⑤, ②, ④, ⑥, ①)。「その処理に必要な材料が前にそろっているか」を順番に確かめれば解ける。
要点(試験直前に読む)
- クライアントサーバはクライアントとサーバが協調する分散処理。サーバが別のサーバのクライアントになることもあり、OS の統一や機能ごとのマシン分離は必須ではない。
- Web ブラウザをクライアントにすると、いちばん軽くなるのはクライアント環境の保守。
- 3層は表示(クライアント)・業務処理(AP サーバ)・データ(DB サーバ)。業務処理がサーバ側にあるのでシンクライアントが使える。
- Web サーバは静的コンテンツ、AP サーバは動的コンテンツ(HTML の動的生成)を担当して負荷を分担する。
- 密結合は主記憶を共有し OS は1つで、タスク単位で分担し同期が必要。疎結合は主記憶と OS をプロセッサごとに持ち、ジョブ単位で分担する。
- 透過性は、分散していても1つのものとして同じ操作で使えること。分散処理は運用管理が複雑になる。
ひっかけ
- 「クライアントで業務処理を行う」「SQL 文がクライアントとサーバの間を流れる」は2層の特徴。3層の特徴として出てきたら誤り。
- サーバが要求を出してクライアントが処理する、という役割の逆転に注意。要求を出すのはクライアント。
- 「OS を同一にする必要がある」「必ず別のコンピュータに分ける必要がある」のような「必ず」という言い切りは、クライアントサーバでは誤り。
- 密結合の問題には、疎結合(ディスク共有・個別の OS)、デュプレックス(待機して切替)、デュアル(同時に処理して照合)の説明が並ぶ。「主記憶を共有」「OS は1つ」の2点で選ぶ。
- 処理順序の問題は、その処理に必要な材料(SQL 文や検索結果)が前にそろっているかを1つずつ確かめる。1つの条件だけで消せない選択肢もあるので、条件ごとに確かめる。
用語(16)
サービスを頼むクライアントと、サービスを提供するサーバが協調して処理を進める分散処理の形態。
⚠ 密結合システムと混同しやすい。クライアントサーバはネットワークでゆるくつながる分散処理で、主記憶は共有しない。
サーバにサービスを要求し、その結果を受け取って利用する側のコンピュータやソフトウェア。
⚠ サーバと役割を入れ替えた選択肢に注意。要求を出すのはクライアント。ただし、サーバが別のサーバに頼むときはそのサーバもクライアントになる。
クライアントからの要求を受けてサービスを提供する側のコンピュータやソフトウェア。
⚠ 機能ごとに必ず別のマシンに分ける必要はなく、クライアントと OS をそろえる必要もない。
クライアントが表示と業務処理を担当し、サーバがデータベースを管理する構成。
⚠ 3層との違いは業務処理を行う場所。クライアントで業務処理を行う、SQL 文がネットワークを流れる、と書いてあれば2層の特徴。
プレゼンテーション層、ファンクション層、データ層の3つに分け、クライアントは表示だけを担当する構成。
⚠ 2層と比べる問題が多い。業務処理はサーバ側で行うので、クライアントはシンクライアントでよい。
利用者からの入力を受け付け、結果を画面に表示する層。
⚠ 業務処理は担当しない。業務処理はファンクション層の仕事。
業務処理(計算・判断・データ操作の指示)を行う層で、AP サーバが担当する。
⚠ データの保管はデータ層の仕事なので、ファンクション層と取り違えないこと。
データベースにデータを保管し、管理する層で、DB サーバが担当する。
⚠ 認証サーバやプロキシサーバはデータ層ではない。データ層がない構成は3層にならない。
入出力と画面表示だけを担当し、処理やデータはサーバに任せる、機能を絞った端末。
プログラムを実行し、表示用の HTML 文書を動的に生成するサーバ。
⚠ DB の管理(DB サーバ)、不正パケットの排除(ファイアウォール)、名前と IP アドレスの変換(DNS)とは別の機能。
静的コンテンツは誰が見ても同じ固定の内容、動的コンテンツはリクエストごとにプログラムが作る内容。
⚠ 静的は Web サーバ、動的は AP サーバが担当するのが Web サーバと AP サーバを分けたときの役割分担。
処理を複数のコンピュータに分けて行う方式。
⚠ 集中処理と比べると、故障に強く拡張しやすい一方で、運用管理が複雑になり、セキュリティの確保が難しい。
複数のプロセッサが主記憶を共有し、1つの OS で制御される構成。タスクはどのプロセッサでも実行できる。
⚠ 疎結合はプロセッサごとに主記憶と OS を持つ。「主記憶共有」「単一 OS」「タスク間の同期が必要」と書いてあれば密結合。
それぞれ独立した主記憶と OS を持つ複数のプロセッサを、磁気ディスクの共有や通信線でつなぐ構成。
⚠ 負荷はジョブ単位で分ける。主記憶の共有や単一 OS と書いてあれば疎結合ではない。
デュプレックスは片方を待機させて故障時に切り替える構成、デュアルは2台で同じ処理を同時に行い結果を照合する構成。
⚠ どちらもマルチプロセッサの密結合・疎結合とは別の分類。密結合を問う問題で、ひっかけの選択肢として出る。
資源が離れた場所や複数のサーバにあっても、利用者がそれを意識せず手元の資源と同じように扱える性質。
⚠ 通信コストの削減や信頼性の向上は分散処理の利点で、透過性の説明ではない。アクセス先のサーバを知る必要があるなら透過性はない。
このレッスンの過去問
- クライアントサーバシステムの特徴平成21年度 秋期 基本情報技術者試験 午前 問14
- 3層クライアントサーバの構成(プレゼンテーション・ファンクション・データ)平成28年度 秋期 基本情報技術者試験 午前 問13
- Web/APサーバ分離の負荷分散メリット平成30年度 秋期 基本情報技術者試験 午前 問13
- Webアプリケーションサーバの機能(動的HTML生成)基本情報技術者試験 科目A免除 修了試験 20111218 実施分 問23
- Webサーバのデータベースアクセス処理順序平成26年度 春期 基本情報技術者試験 午前 問13
- 集中処理と分散処理の特徴比較基本情報技術者試験 科目A免除 修了試験 20110702 実施分 問16
- マルチプロセッサシステムの分類(密結合・疎結合)平成23年度 特別試験 基本情報技術者試験 午前 問15
- 分散データベースの透過性平成21年度 秋期 基本情報技術者試験 午前 問35