「依頼する側」と「応答する側」を分ける
Webページを開くとき、手元のブラウザは必要なデータを求めるメッセージを送ります。それを受け取ったWebサーバは、要求を調べ、HTMLや画像などを応答として返します。このように、クライアントが要求(リクエスト)を出し、サーバが応答(レスポンス)を返す流れが基本です。Web以外でも、メールソフトとメールサーバ、スマートフォンのアプリとそのサービスのサーバなどに、同じ役割分担が見られます。
ここで分けられているのは、主にコンピュータの役割です。クライアントは画面の表示や入力の受け付けなど、利用者に近い処理を担います。サーバはデータの保存や検索、利用者の確認、複数のクライアントから届く要求の処理などを担います。どの処理をどちらに任せるかは、サービスの設計によって異なります。表示の一部をブラウザ内で計算するWebアプリもあれば、計算の大半をサーバで行い、結果だけを返すサービスもあります。
両者が正しくやり取りするには、メッセージの形式や順序について共通の約束が必要です。その約束がプロトコルです。役割を分ける考え方と、通信方法を定める約束は、互いに関係しますが同じものではありません。
ブラウザの一回の要求を追ってみる
ブラウザにWebサイトの名前を入力した場合、まずドメイン名とDNSの仕組みによって、通信先を示すIPアドレスが調べられます。次に、ブラウザはWebサーバへ要求を送ります。ネットワーク上では、送るデータは扱いやすい大きさに分けられ、パケットとして運ばれます。サーバは要求された場所や内容を確認し、該当するデータや処理結果を応答します。ブラウザは受け取った内容を組み立て、文字、画像、ボタンなどを画面に表示します。
一つのページを表示するために、要求が一回だけ送られるとは限りません。最初に受け取ったHTMLに画像やスタイルシートなどの参照先が書かれていれば、ブラウザはそれらについても要求します。また、検索や商品の在庫確認のように、入力内容に応じてサーバがデータベースを調べ、その時点の結果を作って返す場合もあります。画面では一続きの操作に見えても、背後では複数の要求と応答が進んでいるのです。
一台に見えるサービスを複数のサーバで支える
サーバは必ず一台だけとは限りません。多くの要求を扱うサービスでは、入口で要求を複数のサーバへ振り分けたり、Webページを返す処理とデータを保存する処理を別々のサーバに任せたりできます。利用者からは一つのサービスに見えても、内側では複数の役割が連携している場合があります。要求が増えたときに処理を担当するサーバを増やせば、負荷を分散できます。
反対に、一台のサーバが複数種類のサービスを提供することもできます。同じ機器でWebサーバ用とファイル共有用のソフトウェアを動かす、といった構成です。つまり、サーバという言葉だけでは、機器の台数や形までは決まりません。サービスを提供するソフトウェア、そのソフトウェアが動くコンピュータ、あるいは両方を指して使われるため、文脈を確かめることが大切です。
集中管理の強みは停止時の弱みにもなる
データや主要な処理をサーバ側にまとめると、クライアントごとに同じデータを持たせる必要が少なくなります。内容の更新、利用権限の設定、バックアップなども集中的に管理しやすくなります。クライアント側は必要なときに最新の情報を受け取れるため、多数の利用者へ同じサービスを提供する仕組みに向いています。
ただし、サーバやそこまでの通信に障害が起きれば、クライアントはサービスを利用できなくなることがあります。一か所へ要求が集中し、処理能力を超えれば、応答が遅くなることもあります。そのため、重要なサービスでは、処理の分散、予備の機器、データの複製などを組み合わせ、故障しても全体が止まりにくい構成を検討します。
通信相手が正しいか、途中で内容を読まれたり書き換えられたりしないかにも注意が必要です。Webでは通信を暗号化する仕組みが利用されますが、それだけでサーバに保存された情報や利用者の入力がすべて安全になるわけではありません。サーバ側のアクセス制御、更新、記録の確認なども含めて守る必要があります。
サーバとクライアントは機械の固定名ではない
「高性能なコンピュータがサーバで、手元の端末がクライアント」と覚えると、例外を説明できません。大切なのは性能や大きさではなく、その通信でどちらの役割を果たしているかです。一般的なパソコンでも、ファイルをほかの端末へ提供していれば、その機能についてはサーバとして働きます。反対に、サーバ用の機器も、別のサーバへ時刻情報などを要求する場面ではクライアントになります。
さらに、サーバとクライアントは同じコンピュータの中にも置けます。開発中のWebサイトを自分のコンピュータ上のWebサーバで動かし、同じコンピュータのブラウザから接続する構成がその例です。ネットワークを介して要求と応答を交わす役割分担は保たれているため、物理的に別の機器であることはクライアントサーバモデルの条件ではありません。この点を押さえると、「機器の種類」ではなく「サービスを求める側と提供する側の関係」を表す用語だと理解できます。