キャッシュ機構

キャッシュ

ネットワーク上の負荷分散を目的としてたサーバやキャッシュ機構について。
1つのページに対して静的ファイルがかなり多い。静的ファイルはどこからDLされようが同じなので、キャッシュする機構が使われることが多い。

Webブラウザのキャッシュ
Webブラウザはキャッシュされたファイルへのアクセスがあると、いったんWebサーバにリクエストを投げる。
この付帯情報から更新の有無を判断して返却するレスポンスを変えます。

If-Modified-Since ファイルが更新されてなければキャッシュをそのまま使う
If-None-Match 指定したエンティティタグに一致しない場合のみコンテンツを返却する

Proxyサーバによるキャッシュ
LANの中での話。
大企業ではリクエストが重複することが起き得るので、Proxyサーバをたてて静的ファイルをキャッシュさせ、Proxyサーバからレスポンスを返す。
※セキュリティ向上や監査(2ちゃん閲覧禁止)などの目的で使われることも多い

③リバースプロキシ
Webサービスを提供する側。
静的コンテンツをキャッシュさせることで、WebAPサーバのI/O軽減にもなる。

※インターネットからみてクライアントよりなものがProxy、サービスに近いものがリバースプロキシである。
※Proxyがインターネットへの通信を減らすのが目的、リバプロは自社コンテンツのWebサーバの負荷を下げるのが目的である。

CDN
AkamaiなどのCDNはリバースプロキシのアウトソージング化。

⑤ロードバランシング

ブラウザキャッシュ

メリット
1.自分のHDDを利用するので通信速度が速くなる
2.Webサービスの負荷軽減にもなる

デメリット
ブラウザ側の実装により思ったようにキャッシュされないこともある

キャッシュが行われる条件

1.ブラウザのキャッシュ機構が有効である
2.GETリクエストであること 【重要】
3.リクエストパラメーターまで同じであること
4.レスポンスヘッダに Last-Modifiedが含まれる ※レスポンス側で必要
5.サーバ側でキャッシュを無効にしていないこと

キャッシュされたときのレスポンス

1.キャッシュされたとき 304 Not Modified
2回めのアクセス以降で、304 Not Modifiedがかえってくればファイルに変更なしということ。
2.キャッシュされていないとき 200 OK

※Ctrl + F5 でキャッシュを使わない更新。開発では重要。

Proxyサーバの機能

1.コンテンツキャッシュ
2.フィルタ機能
3.経由変更
4.匿名性確保

プロキシサーバ

1.Squid もっとも多く使われている
2.Apache mod_proxyモジュール
3.Delegete

リバースプロキシ

サービス提供側のネットワークにおくプロキシサーバ。
1.コンテンツキャッシュ機能
2.ロードバランサ機能 ※負荷分散も行う
3.アクセス代行
4.SSLアクセラレータ ※SSL通信時の複合化をWepAPで行うのではなくリバプロで行うと全台で行う必要がなく便利。

リバースプロキシサーバ

1.nginx リバースプロキシやロードバランサとして利用可能
2.Apache
3.Squid
4.Varnish Cache

使いどころ

1.静的コンテンツの通信料が多い
2.処理ごとに別のサーバンリクエストしたい スペックや処理の違いによって振り分け先を変える

まとめ

ApacheやBIG-IPで鉄板だとされてきた部分のリプレースに使えるかも

ロードバランサ

複数の同じような処理を行うサーバに使える。

1.ロードバランサ機能
2.Cookie
3.冗長構成
4.SSLアクセラレータ
5.アクセス代行

いろいろなロードバランサ

1.F5 BIG-IP
2.他社製のアプライアンス
3.LVS
4.Pound
5.nginx
6.Apache

ロードバランサ使いどころ

1.分散処理を行いたい
2.冗長性を確保したい
スケールアップではなくスケールアウト。

バランスアルゴリズム

1.L4負荷分散 (トランスポート層)
2.L7の負荷分散 (アプリケーション層) HTTPのみ。
1.URLによるふりわけ
2.User-Agentによるふりわけ
3.Cookieによるセッション維持
4.HTTPヘッダによる振り分け

パフォーマンス障害

1.振り分けは出来ているか
2.コネクションテーブルの残留 きり戻しても、サーバにアクセスがこない場合がある

CDN

Contents Delivery Network
世界的なネットワークが必要。再大手がakamai

世界的な企業が利用した場合サーバのリソースを節約出来る。

Akamai

CDNといえばAkamai

HDDの負荷分散

RAID
RAIDはいろいろなレベルがありますが、商用ではRAID0+1を使う。
HDDどうしはSAN(StrageAreaNEtwork)を構築し、SCASIコマンドがやりとりされる。
SANは高い。

IP-SAN(iSCASI)

iSCASIというプロトコルを使ってSANを構築できる。
しかし実用的でなく、せいぜい1GbEレベル。
10GbE(ギガビットイーサ)の機器は出回ってない。

ストレージ装置の問題への対応

アプリケーション側のアプローチ
1.分散処理系HadoopなどのHDFSを使う
2.シーケンシャルリード、シーケンシャルライトになるように設計する
3.データ量を整理する

インフラ
SSDを使う

PCIe経由のSSD

SSDは高速