商用データベースに匹敵するWebシステム構築手法 6

HTTPキャッシュと出力キャッシュ

Webシステムの高性能化とキャッシュ   Webシステムの高性能化では、スケールアウト可能な設計を行い利用可能なキャッシュをできる限り活用することが重要です。Webシステム構築で意識しながら利用しなければならないキャッシュは表1の通りです。

大垣 靖男

2005年5月9日 20:00

Webシステムの高性能化とキャッシュ

   Webシステムの高性能化では、スケールアウト可能な設計を行い利用可能なキャッシュをできる限り活用することが重要です。Webシステム構築で意識しながら利用しなければならないキャッシュは表1の通りです。

HTTPキャッシュ HTTP 1.1ではキャッシュ機能が強化され、より細かいキャッシュコントロールが可能
出力キャッシュ 動的に生成したページをディスクなどに保存し、DBクエリ、ページ生成負荷を軽減
クエリキャッシュ DBサーバーへのクエリ結果をキャッシュし、クエリ数を削減
表1:キャッシュの種類


   一般に、HTTPキャッシュ、出力キャッシュ、クエリキャッシュの順番で効果が期待できます。キャッシュが活用可能な場合、スケールアウトによりさらに効率の良い高性能化を期待できます。

 

HTTPキャッシュ

   スケールアウトを行う際、リバースプロキシが効果的に導入可能な場合は、Webサーバーを増やすより、リバースプロキシを導入した方が高い効果を得られます(図19)。

リバースプロキシを利用したスケールアウト
図19:リバースプロキシを利用したスケールアウト

   リバースプロキシを導入する場合は、キャッシュコントロールを考慮することが必須です。リバースプロキシ構成は小規模なWebシステムで、プロキシサーバーとWebサーバーが同一のコンピュータで動作していても十分効果を期待できます。

   環境によって設定ファイルを変更する必要がありますが筆者のテスト環境で動作するsquid.confは、リスト5、リスト6のとおりです。


リスト5:squid.confの設定例−SquidサーバーとWebサーバーが別のホストの場合

http_port 80
cache_dir diskd /var/cache/squid 100 16 256
cache_effective_user squid
visible_hostname test.example.jp
httpd_accel_host 192.168.100.2………キャッシュするWebサーバー
httpd_accel_port 80………Webサーバーのポート
httpd_accel_single_host on
httpd_accel_with_proxy on
httpd_accel_uses_host_header off

acl all src 0.0.0.0/0.0.0.0
http_access allow all

coredump_dir /var/cache/squid
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

リスト6:squid.confの設定例−SquidサーバーとWebサーバーが同じホストの場合

http_port 80
cache_dir diskd /var/cache/squid 100 16 256
cache_effective_user squid
visible_hostname test.example.jp
httpd_accel_host localhost………同じホストなのでlocalhost
httpd_accel_port 81………Webサーバーのポート
httpd_accel_single_host on
httpd_accel_with_proxy on
httpd_accel_uses_host_header off

acl all src 0.0.0.0/0.0.0.0
http_access allow all

coredump_dir /var/cache/squid
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log

キャッシュとログ

   HTTPレベルでキャッシュさせてしまうと、ログが取れないので困るのではないか?と思われる方 がいるかもしれません。実際には、通常のWebアプリケーションでは、ページをキャッシュしたせいでログが取れなくて困ることはほとんどありません。アク セスログ収集用にキャッシュ不可に設定した、小さなイメージファイルをページに埋め込み、そのイメージの読み込みログを解析することにより、ほとんどのア クセスログを収集できるからです。収集できないログは、テキストブラウザなどを利用しているユーザーのログです。しかしイメージファイルを読み込まないブ ラウザを利用しているユーザーは、ごく少数であると考えられます。アクセスログは、個別のユーザーのアクセスを把握する目的ではなく、統計情報として利用 されるため、このようなことで困ることはほとんどないでしょう(商用のアクセス解析サービスでも、そのページにイメージファイル、JavaScript、 Javaアプレットを埋め込むことによって、アクセスログを収集し解析しています)。

 

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る