インターネットでWebアクセスする時などに使用されるのがHTTP(Hyper Text Transfer Protocol)
WebクライアントとWebサーバ間で通信する際のプロトコルです。
- Webクライアント :Internet Explorer(IE)、Firefox、ChromeなどのWebブラウザ
- Webサーバ :Apache HTTP Server、Internet Information Services(IIS)などのWebサーバソフト
HTTPでは、Webクライアントが一つのファイルをリクエストし、Webサーバがファイルを返信するという、1回毎のやり取りで完了します。
複数のファイルがある場合は、その都度、やり取りするのが基本です。
このことをステートレスな通信と言う
- ステートレス:接続相手の情報や状態を保持しないこと。
- ステートフル:接続相手の情報や状態を保持し、同じ相手からの通信であることを認識する
ステートレスな通信であるHTTPは、接続相手を認識するような処理には向きません。
- 例えば、ショッピングサイトで複数の商品を購入する場合、商品毎の購入に関する通信がそれぞれ分断されるため、同一ユーザとして扱うことができない
HTTPを擬似的なステートフルにすることができます。
それがCookieという仕組み
- クライアントからのアクセスがあるとサーバはCookieを送信する
- クライアントはCookieをリクエストに含めて送信する
- サーバは同じユーザからのアクセスであることを認識する
一般的にはステートフルな通信の場合はサーバ側で接続相手の情報を保持しますが、Cookieの場合はクライアント側で保持します。
- ステートフルな通信では通信相手の情報保持で負荷がかかる
- Webアクセスのような大量アクセスがある場合はステートフルは向かない
大量のアクセスを処理するWebサーバでは、複数のサーバで処理を分散することができる
- ステートレスであることから可能な仕組み
実現方法は、サーバの手前に負荷分散装置を挿入して複数のサーバに振り分けます。振り分け方法はいくつかあります。
- ラウンドロビン方式:アクセスの順番で振り分ける
- 負荷状態を監視して、負荷が低いサーバに振り分ける