クライアントサーバシステムとは ― 2層と3層の違い
クライアントサーバ
クライアントサーバシステムとは
ブラウザで開くネットショップも社内の業務システムも、多くは画面を出すコンピュータと処理をするコンピュータが分かれています。このように、処理を頼む側と引き受ける側にコンピュータの役割を分けたシステムを、クライアントサーバシステムと呼びます。頼む側をクライアント、引き受けて結果を返す側をサーバと呼びます。
役割の分け方には2層と3層があり、違いは業務の処理をクライアントに置くか、専用のサーバに置くかです。この違いが、処理を変えるときの手間や、ネットワークを流れるものの差になります。
役割を分けずに端末どうしが対等につながる構成は、P2Pと呼びます。処理を複数のコンピュータで分け合う分散処理と、1台に集める集中処理の違いは、バッチ処理とリアルタイム処理の記事で比べています。1つの大きな計算を多くのコンピュータに分けて配る方式は、グリッドコンピューティングです。
処理を3つの層に分ける
ネットショップで注文を受ける処理を例にします。この処理は、画面で注文を受け付ける部分と、金額や在庫を計算する部分と、データベースを読み書きする部分に分けられます。
画面の表示と入力を受け持つ部分を、プレゼンテーション層と呼びます。業務の処理を受け持つ部分は、ファンクション層です。データベースへの読み書きを受け持つ部分は、データベースアクセス層です。
資料によっては、ファンクション層をアプリケーション層、データベースアクセス層をデータ層と呼びます。ここでのアプリケーション層は、OSI参照モデルの第7層とは別のものです。
2層と3層の違いは、この3つの層をそれぞれどのコンピュータに載せるかの違いです。
2層クライアントサーバシステム
2層クライアントサーバシステムでは、クライアントがプレゼンテーション層とファンクション層を受け持ちます。サーバはデータベースを管理するDBサーバ1種類で、データベースアクセス層を受け持ちます。
クライアントは、業務の処理に必要なSQL文をDBサーバに直接送ります。SQL文は、データベースへの命令です。構成が単純で、コンピュータの種類も少なく済みます。
その代わり、業務の処理を変えると、全クライアントのプログラムを入れ替える必要があります。処理を受け持つ分だけ、クライアントには性能も求められます。後で説明するシンクライアントと対比して、このようなクライアントをファットクライアントと呼ぶ資料もあります。
3層クライアントサーバシステム
3層クライアントサーバシステムでは、3つの層を別々のコンピュータに載せます。クライアントはプレゼンテーション層だけを受け持ちます。ファンクション層はAPサーバ、データベースアクセス層はDBサーバが受け持ちます。
APサーバは、業務のプログラムを動かすアプリケーションサーバです。クライアントはAPサーバに要求を送り、SQL文はAPサーバがDBサーバに送ります。次の図のとおり、2層と3層の違いはファンクション層の位置だけです。
次の図で処理を選ぶと、2層と3層のそれぞれで、受け持つコンピュータが光ります。
- クライアント受け持つ
- DBサーバ
- クライアント受け持つ
- APサーバ
- DBサーバ
- クライアント受け持つ
- DBサーバ
- クライアント
- APサーバ受け持つ
- DBサーバ
- クライアント
- DBサーバ受け持つ
- クライアント
- APサーバ
- DBサーバ受け持つ
業務の処理がサーバ側に集まるので、処理を変えるときはAPサーバを直せば済みます。クライアントはDBサーバに直接つながらないため、データベースへの接続をAPサーバに限ることもできます。利用者が増えたときは、APサーバを増やして処理を分け合えます。
APサーバを増やしたときに要求を振り分ける仕組みは、ロードバランサの記事で説明しています。一方で、コンピュータが1種類増えるため、構成は2層より複雑になります。
2層と3層の違い
ここまでの違いを、観点ごとに並べます。見分けるときは、業務の処理がクライアントにあるかどうかを最初に見ます。
| 観点 | 2層 | 3層 |
|---|---|---|
| コンピュータ | クライアントと | クライアントと |
| 業務の | クライアント | APサーバ |
| SQL文を | クライアント | APサーバ |
| 処理を | 全クライアントを | APサーバだけを |
| クライアントの | 処理を | 表示と |
| 構成 | 単純で | 台数が |
SQL文がクライアントから流れるのは2層です。3層では、クライアントとAPサーバの間を流れるのは要求と結果だけです。
Webシステムは3層の形
ブラウザで使う業務システムやネットショップの多くは、3層の形で作られています。ブラウザがクライアントで、プレゼンテーション層を受け持ちます。業務の処理はWebサーバやAPサーバが実行し、データはDBサーバが管理します。
サーバは処理の結果をHTMLにして返し、ブラウザはその記述に従って画面を表示します。業務の処理を変えても、サーバ側を直せば済みます。利用者の端末に専用のプログラムを配る必要はありません。
ブラウザとサーバの間のやり取りは、HTTPとHTTPSのリクエストとレスポンスです。
ストアドプロシージャとは
注文1件を処理するには、在庫を確かめるSQL文や注文を記録するSQL文など、いくつかのSQL文を続けて実行します。1つずつ送ると、SQL文の数だけネットワークを往復します。
よく使う一連のSQL文を、手続としてDBサーバに登録しておく仕組みがあります。これをストアドプロシージャと呼びます。呼び出す側は手続の名前を指定して1回呼ぶだけで、中のSQL文はDBサーバの中で続けて実行されます。
次の図は、注文1件でSQL文を3つ実行する例です。SQL文は1つずつ送って結果を待つ前提で、構成とストアドプロシージャの有無を選ぶと往復の回数が出ます。
- クライアントと
DBサーバ SQL文を1つずつ 3往復
- クライアントと
DBサーバ 手続を呼び出す 1往復
- クライアントと
APサーバ 注文の要求 1往復 - APサーバと
DBサーバ SQL文を1つずつ 3往復
- クライアントと
APサーバ 注文の要求 1往復 - APサーバと
DBサーバ 手続を呼び出す 1往復
2層では、ストアドプロシージャで往復が3回から1回に減ります。3層でも、APサーバとDBサーバの間の往復が同じように減ります。往復が減る分だけ、ネットワークを流れる量と待ち時間が減ります。なお、手続の中身はSQLで書くので、SQLを使わなくなるわけではありません。手続の登録と呼び出しの書き方は、ストアドプロシージャとトリガの記事にまとめています。
RPCとは
別のコンピュータにある手続を、自分の中の手続と同じように呼び出す仕組みを、RPCと呼びます。Remote Procedure Callの略で、日本語では遠隔手続呼出しです。
呼び出す側は、手続の名前と引数をサーバに送り、結果が返るまで待ちます。サーバは手続を実行して、結果を返します。RPCは、クライアントがサーバの処理を使う方法の1つです。ストアドプロシージャの呼び出しも、同じく手続を名前で呼ぶ形です。
この呼び出しの流れは、RFC 5531がONC RPCという方式の仕様として定めています。
シンクライアントとの関係
クライアントには画面の表示と入力だけを任せ、処理とデータをサーバ側に置く方式を、シンクライアントと呼びます。3層クライアントサーバシステムでは、クライアントの受け持ちが表示と入力だけになるので、シンクライアントを使えます。
端末にデータを残さないため、端末をなくしても情報が漏れにくくなります。守る対象をサーバに集められる点も利点です。サーバの中の仮想マシンをデスクトップとして使う形は、仮想化の使い方の1つであるVDIです。シンクライアントの方式の違いは、シンクライアントとVDIの記事で比べています。
3層スキーマとの違い
データベースの3層スキーマは、名前が似ていますが別のものです。3層スキーマは、データの定義を外部・概念・内部の3段に分ける考え方です。3層クライアントサーバシステムは、処理をどのコンピュータに載せるかの構成です。
ネットワーク機器の階層構成でいう2層・3層も、クライアントサーバシステムとは別の話です。機器の階層構成は、スパインリーフの記事で3階層構成と比べています。
練習問題(全5問)
正解:ファンクション層
業務の
解説記事:
正解:クライアントは
3層では
解説記事:2層と
正解:3層クライアントサーバシステム
3層では
解説記事:3層クライアントサーバシステムの
正解:クライアントと
一連の
解説記事:ストアドプロシージャの
正解:1回
まとめる
解説記事:ストアドプロシージャの
選んでから「採点する」を押すと、解説つきで答え合わせができます。