unoh.github.com

データキャッシュを利用したウェブサーバの高速化

Fri Jan 19 01:54:17 -0800 2007

こんにちは satoです

Aapcheでproxyサーバを利用している場合、頻繁にアクセスされて、なおかつ
更新の少ないデータ、(フォト蔵や mixiでいう マイピクチャーなど)
は proxyサーバにキャッシュするとレスポンスが良くなります。

mod_proxy_balancerと mod_disk_cache を利用して、proxyサーバに
データをキャッシュする手順を紹介します


<VirtualHost * *:443>
    ServerName example.com   
    ProxyPass /img ! # cssやイメージファイルは proxyしないでローカル参照
    ProxyPass /css !
    <Proxy balancer://web>
        AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
        BalancerMember http://10.0.0.1 loadfactor=10 keepalive=On
        BalancerMember http://10.0.0.2 loadfactor=10 keepalive=On
        BalancerMember http://10.0.0.3 loadfactor=10 keepalive=On
        BalancerMember http://10.0.0.4 loadfactor=10 keepalive=On
    </Proxy>
    ProxyPass / balancer://web/ timeout=2
    # キャッシュの設定
    <IfModule mod_cache.c>
        <IfModule mod_disk_cache.c>
           CacheRoot /usr/local/apache2/cache
           CacheIgnoreCacheControl On
           CacheIgnoreHeaders Set-Cookie
           CacheEnable disk /bin/my_pic/
           CacheMaxFileSize 1024000
           CacheMinFileSize 64
           CacheDefaultExpire 86400
           CacheDirLevels 5
           CacheDirLength 3
        </IfModule>
    </IfModule>
</VirtualHost>



CacheRoot - キャッシュの保存先を設定します
CacheIgnoreHeaders Set-Cookie - cookieはキャッシュしないようにします
CacheEnable disk /bin/my_pic/ - キャッシュするディレクトリを指定します
CacheMaxFileSize 1024000 - キャッシュするファイルの最大サイズを指定します
CacheMinFileSize 64 - キャッシュするファイルの最小サイズを指定します
CacheDefaultExpire 86400 - キャッシュがエクスパイアされるまでの時間を指定します
CacheDirLevels 5 - キャッシュのサブディレクトリの深さを指定します
CacheDirLength 3 - サブディレクトリ名の文字

こんな感じでキャッシュが使用されるようになります。

最新のファイルなどのアクセス頻度が多い場合には

/new/

などと時間で参照先のディレクトリが変わるようにしておいて
new のディレクトリをキャッシュするようにすると良いかもしれません。

設定はSoftware Design (ソフトウエア デザイン) 2007年 01月号を参考にしました。
こちらには mod_mem_cache の設定方法なども詳しく書いてあります