キャッシュ
実にいい響きです。
今の時代、いたるところにキャッシュが使われています。CPUキャッシュに始まり、memcached,redisなどのキャッシュサーバー、ブラウザもキャッシュしてます。Varnishはコンテンツキャッシュといい、一般的にWeb/Appサーバーのフロント側で要求を受け、すでにキャッシュされたコンテンツについては、キャッシュを返し、まだキャッシュされていないコンテンツへの要求は、バックエンドのWeb/Appサーバーに流します。
今の主流はnginxにやらせるのかもしれませんが、Webサーバーはapacheですよねーという方には、Varnishがオススメです。Apacheはmod_cacheがあるのですが、少々癖があるようです。
http://server-setting.info/centos/apache-mod_cache-mod_disk_cache.html
正直なところ、Varnishもそこそこ面倒ですが、導入は簡単です。
まず、Varnishの特徴と動作の条件ですが
- HTTPSは喋れません。HTTPのみです。
- BASIC認証等がある場合、キャッシュほぼ効かないが、透過はできます。(これは私の知識不足かも知れません。)
- フロントエンドとして、Web/Appの前に出します。Varnishが80で受けて、バックエンドのApacheなどに回します。よって、Apacheは8080などでListenします。
- Unixソケットは対応していないそうです。(要確認)
インストールは簡単です。
# rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el6.rpm# yum -y install varnish
最低限動く設定も簡単です。
# vi /etc/sysconfig/varnish# VARNISH_LISTEN_ADDRESS=
VARNISH_LISTEN_PORT=80
# vi /etc/varnish/default.vcl
## Default backend definition. Set this to point to your content server.
backend default {
.host = "127.0.0.1";
.port = "8080";
}
Apache側は8080をListenします。
# vi /etc/httpd/conf/httpd.confListen 8080
Apache再起動後、Varnish起動します。とりあえずこれで動きます。
動いているかの確認は
varnishstat コマンド
topのように見れます。
Logは、別デーモンで書くようです。起動させましょう
/etc/init.d/varnishncsa
肝心のLogは /var/log/varnish/varnishncsa.logに出ています。
あとは、Apache側のAccess_logのRemote_Addressが、127.0.0.1になってしまうので、X-Forwared-Forを書くように修正です。
これで、ひっきりなしにページが書き換わるわけでもないが、一応動的なページ(トップページとか)はガッツリコンテンツキャッシュを掛けてしまい、バックのWeb/Appに問い合わせないという方法がとれます。負荷テストもとってみましたが、至極当たり前の結果がました。動的ページで 400msec位掛かっていたのが、5-60msec位になりました。実質、静的ファイルになるわけですので、当然ですね。
まさしくエコです。Varnishは設定ファイル次第でもっと複雑なことができるようですので、賢く運用したいものです。
[参考]