Webブラウザ(パソコン)に保存されるもの
キャッシュ( Cache )⇒
何度も見るWebページがある場合に、2回目以降の閲覧時の表示スピードを上げるため、ページ内の画像やアイコンといったデータをパソコン内に保存する仕組み(またはその保存されたデータ自体)。
Webページまるごとの情報。
2回目以降はファイルのダウンロードをせずに、パソコン内にキャッシュ(貯蔵)されたデータでWebページを再現するため、表示スピードが早くなります。
クッキー( Cookie )⇒
Webブラウザ利用者の情報記録のこと。
記録される履歴情報は、ユーザーが入力したID、パスワード、そのWebページを訪れた日時、訪問回数など。
クッキーを使用しているサイトにアクセスすると、サイトの情報と一緒にクッキーファイルも利用者のパソコンにサイトから送信され、特定のフォルダに保存されます。
セッションクッキー( Session Cookie )⇒
Webブラウザのメモリーに保存されるもの。
Webブラウザを閉じれば破棄するようにできます。
履歴 ⇒
自分が閲覧したWebページのURL。
Webサーバーに保存されるもの
セッション( Session )⇒
パソコンに保存させておきたくない情報( Session )で、サーバーに保存されるもの。
Sessionの流れ
ユーザーが、Webページにアクセス( WebサーバーにHTTPリクエストを送る。)。
⇩
Webサーバーは、
- 『セッションID』と
- 『セッション・オブジェクト( セッションを管理するデータを書き込むためのもの )』
を作り、Webページの情報(データファイル)と共にセッションIDをユーザーに返す。( HTTPレスポンス )。
⇩
この時にセッションIDをユーザーに渡す方法は3つあります。
- Cookieに書き込んで
- リンクのURLに埋め込む
- Webページのフォーム・データに埋め込む
⇩
パソコンにセッションIDという値が保存され、これを基に次からのアクセス( HTTPリクエスト )はサーバー側に保存された情報( セッション・オブジェクト )を参照したやりとりを可能にします。
・「セッション管理」のすべて-ステップ1 [基本のしくみ] Webブラウザに情報を預けて,アクセス時に送信させる:ITpro
HTTPの仕組みとセッション
HTTPはステートレスなプロトコル( 通信手順 )です。
ステートレス( stateless )
サーバーはクライアントのセッション情報を保持しません。
◯ メリット
- クライアントのリクエストは状態に依存せず、常にリソースに対する操作に必要十分な情報となります
- よってサーバーが増えてもそのままのリクエストでいつも同じリソースに対する操作ができます
- このためスケールアウトに向いています
- また処理がクライアントの状態に依らないので処理がシンプルになります
☓ デメリット
- やり取りが冗長になりがちです
- またリソースへの操作が必要になる度にそのやり取りを繰り返す必要があります
- これによりネットワークの帯域を消費し、処理も遅くなります
- サーバーが状態を保持していないのでエラーが起きたときのハンドリングが複雑になりがちです
ステートフル( stateful )
サーバーはクライアントのセッション状態を保持しています。
◯ メリット
- やり取りが完結に済みます
- それによりネットワークの帯域を節約できます
☓ デメリット
- クライアントの状態を都度把握しておかなければいけないのでクライアントが増えると負荷も増えます
- サーバーを複数台設置する場合にはそれぞれのサーバー間でクライアントの状態を同期しなければいけません
- これらの理由によりスケールアウトには向いてません
スケールアウト 【 scale out 】
スケールアウトとは、サーバの数を増やすことで、サーバ群全体のパフォーマンスを向上させること。
1台のサーバが仮に10人のユーザしか処理できないとしても、サーバを2台に増やして負荷を分散すれば20人のユーザに対応できる、という理屈である。
スケールアウトした場合、複数のサーバを連携して動作させることになるため、メンテナンスや障害発生時にもサービスを完全に停止させる必要がない点が利点となる。
反面、サーバの台数が増えるために管理の手間が増大し、ソフトウェアのライセンス料金も高額になりがちなことが欠点とされている。
複製や同期が容易であり、また複製しても問題の起きないデータを扱う場合には、1台のサーバで機能や性能を強化する「スケールアップ」よりもスケールアウトの方が適していると言われる。
スケールアップ 【 scale up 】 スケールイン / scale in
スケールアップとは、既存のサーバを機能強化してパフォーマンスを向上させること。
CPUやメモリなどの強化によってサーバの能力を上げ、より高い負荷に耐えられるように拡張する。より強力な新しいサーバに交換することもある。
1台のサーバでサービスを提供するため、複数台で運用するよりソフトウェアライセンスの料金が安く済む点や、構成が単純で管理しやすい点、拡張方法によっては台数を増やすよりも投資効果が高い点などが利点とされる。
その反面、複数台運用でないためスケールアップ時にはいったんサーバを停止しないといけない点や、障害発生時に回復までの時間がかかるなどの欠点がある。
複製や分割が困難なデータを扱う場合には、サーバの台数を増やす「スケールアウト」より、スケールアップの方が望ましいとされている。
エラーハンドリング 【 error handling 】
エラーハンドリングとは、本来の処理が正常に終了しなかった際に発生するエラーをトラップし、プログラムを正常な状態に復帰させる処理。
プログラムは周りのプログラムや人間が与えるデータに従って動作するが、常に外部のプログラムや人間が期待した通りのデータを用意してくれるとは限らない。
エラーハンドリングは、このように外部から期待していない内容のデータが送られてきた場合に、何らかの方法でプログラムの誤動作を防止し、必要に応じてデータに問題があることを外部に伝えるなどの処理を行うことである。
エラーハンドリングが適切に行われていないと、予想外のデータが入力されたときにプログラムが暴走したり、外部からシステムへの侵入を許してしまうなどの事態を招く危険性があるため、高い質のプログラムを作成するためにはエラーハンドリングは非常に重要になる。