情報を蓄積し、要求された時にそれらの情報を提供することに特化したサーバと蓄積された情報を要求し、人間が入力や変更などの操作を直接行う複数の端末(PC)から構成されるシステムをC/S(Client/Server・クライアント/サーバ)システム、クライアントにブラウザを利用するシステムをウェブシステムなどと呼び、昨今のC/Sシステムではウェブシステムが一般的となっています。
クライアントサーバシステムには2層、3層システムと呼ばれる構成があり、クライアントとデータベースサーバ(RDB/リレーショナルデータベース・関係データベース)間のやり取りの論理的な構成を表しています。
2層クライアントサーバシステムは、(.NETではない)VB/VisualBasicやDelphiなど多くの機能が詰まったプログラム言語によるアプリケーションがクライアントとして一般的に利用されていた時代のクライアントサーバ構成においてデータベースサーバ側でデータベース管理とデータベースへのアクセスを行い、その他の処理をほぼ全てクライアントに持たせる形態の事です。
3層クライアントサーバシステムは、クライアントと中間層とサーバ、それぞれ順にプレゼンテーション層、アプリケーション(またはファンクション)層、データベース層という3つの論理構造を持つ形態のクライアントサーバシステムの事です。
前述のブラウザをクライアントとした昨今のウェブシステムは3層の代表例であり、この場合、プレゼンテーション層はブラウザ、アプリケーション層はPerl/Python/PHP/ASP/JSPなどのスクリプトによるCGIやJava、C#(.NET)、C++、C言語などによる実装、データベース層はRDBサーバという構成で、アプリケーション層はサーバ側に実装するサーバサイドプログラミングが一般的です。
アプリケーション層でクライアント要求に対する共通の処理を実装する事でクライアント処理のスリム化を図る事ができ、クライアントとデータベースサーバ間のトラフィック軽減を図る事などができます。
2層C/Sシステムでは、クライアントに機能が集中する事から仕様変更やバグ修正等において全クライアントを対象にそれぞれ修正・更新が必要となる事、クライアントとサーバ間のトラフィックが頻繁である事などから、これらのリスクを軽減(分散)できるというメリットも大きな要因となり3層C/Sへの移行が進みました。
クライアントに共通の情報を処理する為の機能を持たせ過ぎると容量や処理量も多く必要となり高価となるばかりでなく、クライアントを追加したり、端末を交換したりするたびにアプリケーションの再インストールが必要となったり、ひとたび修正・更新などが必要になると数台、数十台、数百台とクライアントの数だけ同じ作業が必要になるなど管理も煩雑になり非効率的です。
また共通の情報を何から何まで各端末に持たせることは矛盾が生じやすくなる可能性を高めることに繋がります。
もちろんメリットばかりでなくデメリットもなくはないですが、一般に端末の台数が多くなればなるほど各クライアントに過大な機能を持たせたり、逆にサーバに集中し過ぎると負荷が高くなりますから、3層C/Sシステムにするメリットが大きくなります。
企業の機密情報保護や個人情報保護の観点からも情報セキュリティの一環としてクライアントに記憶媒体を持たせず、さらに機能を最低限に限定したシンクライアント(thinは英語で「薄い」等の意味でC/Sでは転じて「最低限」というようなニュアンス)によるC/Sシステムも多くなっています。
また、Windowsアプリケーションの操作性を期待するユーザーはブラウザをクライアントとした3層ウェブシステムの場合ユーザーインタフェースとしては物足りない、その為にはリッチクライアント(機能ではなく見栄え重視)化をといった動きもあるようです。
ビジネス用、パーソナル用コンピュータが次々に世に送りだされ、ソフトウェアも比較的豊富になり、互換性なども考慮されるに連れ、様々なメーカーのソフトウェアやハードウェアを組み合わせることでコストパフォーマンス向上を見込める可能性から考案されたC/Sシステムは、オープンシステム・オープン系システムなどとも呼ばれています。