Webシステムの高性能化とキャッシュ
Webシステムの高性能化では、スケールアウト可能な設計を行い利用可能なキャッシュをできる限り活用することが重要です。Webシステム構築で意識しながら利用しなければならないキャッシュは表1の通りです。
| HTTPキャッシュ | HTTP 1.1ではキャッシュ機能が強化され、より細かいキャッシュコントロールが可能 |
| 出力キャッシュ | 動的に生成したページをディスクなどに保存し、DBクエリ、ページ生成負荷を軽減 |
| クエリキャッシュ | DBサーバーへのクエリ結果をキャッシュし、クエリ数を削減 |
一般に、HTTPキャッシュ、出力キャッシュ、クエリキャッシュの順番で効果が期待できます。キャッシュが活用可能な場合、スケールアウトによりさらに効率の良い高性能化を期待できます。
HTTPキャッシュ
スケールアウトを行う際、リバースプロキシが効果的に導入可能な場合は、Webサーバーを増やすより、リバースプロキシを導入した方が高い効果を得られます(図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アプレットを埋め込むことによって、アクセスログを収集し解析しています)。