[Rumble-jp-dev] キャッシングシステム検討

Back to archive index

Naoki Kurosawa naoki_kuros****@ybb*****
2003年 6月 12日 (木) 21:34:18 JST


黒澤です。

ページ生成のオプティマイズは進めるとして、
生成結果のキャッシングも検討したいと思います。

タスク優先順位やスケジュールは別途検討するとして、
とりあえず実装方式を議論しようと思います。

まずは大前提として、
『キャッシングできるのは「検索処理」のみ』になります。
ここはいいですよね。

次は、キャッシングレベルです。
■1.サーバサイドキャッシュ
サーバサイドで生成したHTMLをファイルか何かに保存しておき、
クライアントからのリクエストに対し、適宜EJB呼び出しをする前に
結果を返してしまう。

メリット:
  a.サーバ負荷はかなり下がる

問題点  :
  b.ネットワークネックは解消できない
  c.キャッシュのExpireの考え方。
    時間でやるか、データ更新をトリガとするか

■2.クライアントキャッシュ
フォーラムの実装(更新のあったフォーラムを強調表示)
で使っている方法の応用。

サーバサイドで生成したHTMLを返す際にContentDateも設定し、
次回以降のブラウザからのリクエストをIf-Modified-Sinceヘッダ付き
のリクエストにさせる。
サーバサイドでは、If-Modified-Sinceヘッダの日付と
データの最終更新日時を比較し、変化がなければ304 Not Modifiedを返す。

メリット:
  d.頻繁にアクセスするユーザの利便性がかなり上がる
  e.頻繁にアクセスするユーザばかりの場合、ネットワークネックが解消できる

問題点  :
  f.キャッシュはクライアントサイドなので、新規ユーザがアクセスしてきたら
    当然キャッシュがないのでデータは作り直し。
    ユーザが多く、かつ更新が多い場合、
    実はあんまりサーバの負荷は下がらない。
  g.laplaceさんがフォーラムの動作について述べていたように、
    明示的にリロードしないと最新表示にならなかったりする現象がおきる。
  h.「データの最終更新日時」をどう定義するか。
    DB上の各行にタイムスタンプつけるとか?
    とすると、更新日時チェックにもそれなりのサーバ負荷がかかる。

■3.組み合わせ(サーバ&クライアントキャッシュ)
1と2を併用。
サーバサイドキャッシュに保存されているHTMLファイルの日付を使って
If-Modified-Sinceのやり取りを行う。

メリット:
  i.サーバ負荷とネットワーク負荷どちらも下がる。
  j.クライアントキャッシュの問題点fとhが解消できるので、
    クライアントキャッシュを実装するなら、このパターンを使うのが一番楽。

問題点:
  k.クライアントキャッシュの問題点fは依然として残るので、
    明示的にリロードしないと最新表示にならなかったりする現象がおきる。



ポイントは、
・キャッシュExpireのタイミングまたはデータ更新判断
・クライアントキャッシュの問題点f
ですね。

頭で「検索系のみ」と前提を置いてしまっているので、
キャッシュは一定時間でExpireするとしちゃって、
設定か何かでページ毎の更新間隔をコントロールする
というのが現実解でしょうかね。

クライアントキャッシュの問題点fは、
フレームを導入して、最新表示にならないと困る部分(メニュー部分)と
ならなくても大丈夫な部分(つまりキャッシュしたい部分)を分ければ
解決しますが、どうかなー。

もう古い情報ですが、
「ウェブデザインの間違いトップ10」
http://www.usability.gr.jp/alertbox/9605.html

「あれから3年、『間違いトップ10』を再検証」
http://www.usability.gr.jp/alertbox/990502.html

トップ1がフレームなんですよ。
なるほどと私も思うし、実際最近フレームを使ったサイトが
以前より減っているので、やっぱりみんなもいまいちだと思っているんじゃ
ないかなぁと。

-- 
Naoki Kurosawa <naoki_kuros****@ybb*****>




Rumble-jp-dev メーリングリストの案内
Back to archive index