CacheFuを使ってスピードUP

してるのかな…

概要

CacheFuはメモリやプロキシ、ブラウザのキャッシュなどを利用してPloneをスピードUPさせるプロダクトで、Plone2.5から標準装備となる予定の優れものです。以前試してみたのですが、何か挫折してしまって放置していたのですが、最近になってバージョンナンバーが1.0となったので(betaですが。)再度挑戦してみようと思った次第です。

CacheFuはスタンドアローンプロダクトとしても、squidやapacheと一緒に使っても効果を発揮しますが、特にsquidと一緒に使うことを想定しており、またそういうように最適化されているようです。

plone.orgのCacheFuのページに関連のドキュメントがありますが、out of dateなので、詳しく知りたい人はPlone2.5-betaに同梱されているCacheFuの「docs」フォルダの下にある「audiences.rest」を参考にするとよいと思います。

CacheFuの特長は、Cacheルールによってキャッシュするもの・しないもの、するとき・しないとき、などきめ細かく設定できることにあります(逆に言えば”私のように”よくわかってない人にとっては使いにくいorz)が、個人的にイイと思ったのは、「とっておきのオマケ」がついていることです。これについては後述します。

サーバの構成

CacheFuを使うに当たって想定されている構成は以下のようなものです。

  1. Zope/Plone
  2. Squid→Zope/Plone
  3. Apache→Zope/Plone
  4. Apache→Squid→Zope/Plone

ただし前述したようにCacheFuはSquidと一緒に使うように最適化されていますので、1や3の構成よりも2や4の構成がより効果を期待できるということになります。ちなみにplone.orgは2の構成のようです。

ウチのサーバはこれまで「Apache→Zope/Plone」という構成でしたが、せっかくなのでちょっとがんばって(というか無理をして)Squidを噛ませる4の構成にしたいと思います。

ちなみに(CacheFuは関係ないですが)2や3の構成については、中神さんの「SquidとZopeの連携」やたかのりさんの「Apache2との連携」にわかりやすい解説があります。

Squidのインストール

さて、現段階でウチのサーバに足りないモノはSquidです。名前は知っていましたが今まで一度もさわったことがありませんでした。もちろんインストールする「だけ」なら簡単です。ウチはGentooなので「emerge squid」とタイプするだけです。誰でも出来ると思います。しかし問題は(サーバは何でもそうですが)「設定」ですよね。Squidもなかなか豊富な設定内容があります。果たしてこれをちゃんと設定できるんだろうか、という不安が頭をよぎります。

もちろんSquidに関する知識を一通り仕入れた上で運用するのがベストなのは理解できるのですが、何とかしてもう少しお手軽に使えないモノでしょうか。ものぐさな私はいつもそう考えてしまいます。

そんな私のために(そして「もしかしたら」あなたのために)用意されているのが、前述したオマケなのです。おそらくこのオマケがCacheFuに同梱されていなかったら、私はSquidナシの利用を選択していたでしょう。

オマケを使う

CacheFuはいくつかのモジュールから構成されるプロダクトで、実際CacheFu-1.0-beta2のアーカイブを解凍してみると、以下のようなものが見えます。

  • CacheSetup
  • CMFSquidTool
  • MemcachedManager
  • PageCacheManager
  • PolicyHTTPCacheManager
  • squid

このうち実際にプロダクトとして利用するのはCacheSetup、
PageCacheManager、CMFSquidTool、PolicyHTTPCacheManagerの4つです。MemcachedManagerについてはよくわかりませんが、squidというフォルダに入っているのが、そう、まさにそのオマケなのです。

このオマケは「CacheFuを使うのに都合がいいように設定ファイルを作ってくれる」スクリプトです(たぶん)。あぁ、なんてステキなんでしょう。これさえあればもうSquidを設定できたも同然です。早速こやつらを使ってやろうではありませんか。

cfgファイルで前準備

まずはどのような設定でSquidを運用するのかを準備しておきます。squid配下に「squid.cfg」というファイルがあるので、これをエディタで編集します。

060515-1

このファイルにはpython、squid、supported-protocols、accelerated-hostsといった設定項目がありますので、それぞれ自分の環境にあうように編集します。

[python]
# pythonがどこにあるのかを設定します。
binary: /usr/bin/python

[squid]
# squidがどこにあるのかを指定します。
binary: /usr/sbin/squid
# squidデーモンを動かすユーザを指定します。Gentooでは「squid」です。
user: squid
# squidの設定ディレクトリがどこにあるのかを指定します。Gentooでは「/etc/squid」です。
config_dir: /etc/squid
# squidのログファイルがどこにあるのかを指定します。Gentooでは「/var/log/squid」です。
log_dir: /var/log/squid
# squidのキャッシュファイルがどこにあるのかを指定します。Gentooでは「/var/cache/squid」です。
cache_dir: /var/spool/squid
# ディスクキャッシュの最大値を指定します。
cache_size_mb: 1000
# squidがフロントに立つのか(True)、Apacheの背後に隠れるのか(False)を指定します。今回は「Apache→Squid→Zope/Plone」という構成ですので「False」とします。
direct: False
# squidがApacheの背後に隠れるときのポート番号を指定します。Gentooでは「3128」です。
port: 3128
# 管理人のEメールアドレスを指定します。
admin_email: webmaster@nagosui.org

[supported-protocols]
# サイトがサポートするプロトコルとポート番号を指定します。
http: 80
https: 443

[accelerated-hosts]
# ZopeのURLとポート番号を指定します。Ploneをサイトルートに設定している場合は、Ploneインスタンスまで含めて書きます。
nagosui.org: 127.0.0.1:8080
(あるいは「nagosui.org: 127.0.0.1:8080/Plone」など)

スクリプトの実行など

ここまで編集したらmakeconfigスクリプトを実行します(実行する前にPYTHONPATHをexportしておきましょう)。

# export PYTHONPATH=$PYTHONPATH:/home/hoge/Zope-2.8.6/lib/python
# python makeconfig

コマンドオプションもありますが、そのままでよいでしょう。Return連打でいきます。スクリプトを実行し終わると、同じ階層にいくつかの.pyファイルなどが生成されているのが見えます。

060515-2

大切なファイルは3つ。「squid.conf」、「httpd.conf」と「deploy」です。「squid.conf」はsquidの設定ファイルです。「httpd.conf」にはApacheのリダイレクトの設定が書いてあります。そして「deploy」はsquid.confおよびこれに関連した.pyファイルを適切なディレクトリに移動したりしてくれるスクリプトファイルです。

まずはhttpd.confの中身をApacheの設定ファイルにコピーしてやります。Gentooの場合は、「/etc/apache2/vhosts.d/」以下に「01_vhosts.conf」などとしてコピーしてやってもいいかと思います。このあたりはディストリビューションなどの環境設定に依存しますので、自分の環境に合わせて設定します。

Apacheの設定が終わったら、deployを使ってSquidの設定ファイルを配置します。

# python deploy

とすれば、先ほど「squid.cfg」で設定した内容に沿ってsquid.confがコピーされます。今回の場合は「/etc/squid」としてやったので、この下にsquid.confおよびrewriteのための.pyファイルなどがコピーされます。

あとはSquidを立ち上げればとりあえず下ごしらえは完了です。Gentooなら

# /etc/init.d/squid start
# rc-update add squid default

という感じで。

CacheFuのインストール

これは説明するまでもありませんが、先ほども述べたように、アーカイブを解凍して出来るものの中で、CacheSetup、
PageCacheManager、CMFSquidTool、PolicyHTTPCacheManagerの4つしか利用しませんので、MemcachedManagerやらsquidやらはProductsフォルダに入れる必要はありません。4つのフォルダをProductsフォルダにコピーしたらあとはいつも通り、Zopeのリスタートをして、Ploneのサイト設定→プロダクトの追加/削除からインストールするだけです。ただしこのとき画面上に見えるプロダクトは、「CacheSetup」と「CMFSquidTool」だけです。

CacheFuの設定

この先はちょっとよくわかりませんが、最低限の設定だけしておきます。CacheFuの設定はPloneのサイト設定→プロダクトの追加/削除から行います。画面上に「Cache Configuration Tool」というのが見えると思いますので、そこをクリックすると設定画面へいけます。

 

Cache Configuration
 どのようにキャッシュが設定されるかを指定します。「Zope only」、「Zope behind Squid」、「Zope behind Apache」、「Zope behind Squid behind Apache」という4つの構成が選べますので、おのおの自分のサーバ構成にあったモノを選びましょう。私は「Zope behind Squid behind Apache」を選びました。
Site Domains
サイトのドメインを、プロトコルとポート番号付きで記述します。注意すべきなのは、Zopeの動いているポート「ではない」 ということです。なので例えばウチの場合は「http://nagosui.org:80」などとなります。
Squid URLs
Squidがどこで動いているかをURLで指定します。Gentooの初期設定で動かしているならば「http://127.0.0.1:3128」でしょう。当然ウチでもコレです。
Compression
なんとなくNeverがいい予感がするので、Neverにしました。
Vary Header
なんとなく何も書かないのがいい予感がするので、空欄にしました。
Enable Macro Caching
お好みで。ただしこの機能はExperimentalです。ウチではチェックを入れてonにしてます。
これを保存すればとりあえず設定は完了です。

 

そしてこの先の設定

CacheFuはいろいろな設定ができるので、各自のPloneサイトの環境に合うように「cache rules」を設定してやる必要があるでしょう。

cache rulesはCacheFuのキモで、あらかじめ用意してあるルールをどのタイプのオブジェクトにいつ適用するかを設定するモノです(たぶん)。ルールをカスタマイズすることも、そのルールをどの適用するオブジェクトをカスタマイズすることも可能ですが、ここまでくると私の能力の限界をはるかに超えています。

なので、この先はとりあえずほかっておいて、他のエラい人の解説を待つことにします。

で、一番大切なことを忘れてたんですが…

ホントにスピードUPしたんでしょうか(*´Д`)???

トラックバック用URL:
http://nagosui.org/Nagosui/COREBlog2/caching-with-cachefu/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

このBlogについて
Plone, Zope, Pythonなどのトピックについてのメモです。
カテゴリ
Plone (100)
Plone Products (23)
COREBlog2 (31)
COREBlog1 (29)
ReadingCOREBlog (7)
Zope (66)
Turbogears (18)
Django (12)
Python (27)
Linux (32)
Nagosui (13)
Design (34)
Misc (49)
moblog (5)
Mac (1)
最近のエントリ
MacOSXにPython2.4をインストール nyusuke 2009年03月21日
Ploneを3.1から3.2へアップグレード nyusuke 2009年03月01日
Plone3.2+その他もろもろのレシピ nyusuke 2009年03月01日
さらばファッキンKDDI nyusuke 2008年12月10日
最近のコメント
Re:WebデザイナーのためのDjangoはじめの一歩 nyusuke 2007年06月01日
Re:WebデザイナーのためのDjangoはじめの一歩 pateo 2007年05月31日
Re:東海Python Workshop 01終了 nyusuke 2007年05月31日
Re:東海Python Workshop 01終了 kfuruhata 2007年05月30日