HTTP

インターネットでWebアクセスする時などに使用されるのがHTTPHyper Text Transfer Protocol

WebクライアントとWebサーバ間で通信する際のプロトコルです。

  • Webクライアント Internet ExplorerIE)、FirefoxChromeなどのWebブラウザ
  • Webサーバ Apache HTTP ServerInternet Information ServicesIIS)などのWebサーバソフト

     f:id:aolaniengineer:20190804150857p:plain

HTTPでは、Webクライアントが一つのファイルをリクエストし、Webサーバがファイルを返信するという、1回毎のやり取りで完了します。

複数のファイルがある場合は、その都度、やり取りするのが基本です。

このことをステートレスな通信と言う

  • ステートレス:接続相手の情報や状態を保持しないこと。
  • ステートフル:接続相手の情報や状態を保持し、同じ相手からの通信であることを認識する

ステートレスな通信であるHTTPは、接続相手を認識するような処理には向きません。

  • 例えば、ショッピングサイトで複数の商品を購入する場合、商品毎の購入に関する通信がそれぞれ分断されるため、同一ユーザとして扱うことができない

HTTPを擬似的なステートフルにすることができます。

それがCookieという仕組み

  • クライアントからのアクセスがあるとサーバはCookieを送信する
  • クライアントはCookieをリクエストに含めて送信する
  • サーバは同じユーザからのアクセスであることを認識する

     f:id:aolaniengineer:20190804151226p:plain

一般的にはステートフルな通信の場合はサーバ側で接続相手の情報を保持しますが、Cookieの場合はクライアント側で保持します。

  • ステートフルな通信では通信相手の情報保持で負荷がかかる
  • Webアクセスのような大量アクセスがある場合はステートフルは向かない 

大量のアクセスを処理するWebサーバでは、複数のサーバで処理を分散することができる

  • ステートレスであることから可能な仕組み

実現方法は、サーバの手前に負荷分散装置を挿入して複数のサーバに振り分けます。振り分け方法はいくつかあります。

  • ラウンドロビン方式:アクセスの順番で振り分ける
  • 負荷状態を監視して、負荷が低いサーバに振り分ける

     f:id:aolaniengineer:20190804151604p:plain

     f:id:aolaniengineer:20190804151626p:plain