HTTPアクセラレータ Varnish と Ploneのキャッシュ設定
Ploneなど動的なサイトシステムを導入すると、どうしても負荷分散やパフォーマンス調整が必要となります。
Plone(Zope)には、アプリケーションサーバを複数台にするZEO(Zopeデータベースの標準で組み込まれているリプリケーションシステム)という仕組みが同梱されています。
さらに、アプリケーションサーバのフロントでページをキャッシュすることをよく行います。
キャッシュサーバとして以前は、Squidを用いるケースが有りましたが、現在はVarnishを用いることが多くなっています。当社でも数カ所の大規模サイトに使用した実績があり、非常にうまく活用できています。
国内ではまだ認知度の低いVarnishですが、HTTPアクセラレータ専用に作られているため、使いやすく設定も容易です。Plone.orgなどではすでに導入されています。HTTPヘッダーやURLにるキャッシュ設定の切り分けを、if文を書く感覚で使用できます。パージ(キャッシュを消すこと)も容易に出来ます。
Ploneには、CacheFuとよばれるCacheSettingを簡単にアドオンすることができます。このプロダクトを導入することで、「どのようなHTTPヘッダーを出すか」や「キャッシュ時間を制御する」ことなどが可能です。また、パージリクエストも出してくれます。サイトによってはキャッシュされすぎることで、即時公開が出来ないなど問題になることがありますが、そのような心配もありません。
しかし、デフォルトのCacheFuだけでは、コンテンツ自身をキャッシュから削除することは出来ても、Topページやポートレットに表示されている内容までは、パージしてくれません。今回、当社では、それらを連携する仕組みとして、専用のCacheSettingとVarnish設定を行うことで、必要に応じてカテゴリTopをパージすることを可能にしました。
技術的には、Zope3的にIPurgeUrls(Interface)をimplementsし、各コンテンツタイプ毎に処理を分けています。これについての情報は下記のサイトにサンプルコードが有るのみでした。
導入後5日程度たちますが、負荷も上がりすぎず、即時公開も可能になり順調に動作しています。
高負荷対策のアドバイス・コンサルティングのみのお仕事も頂くケースがあります。ご興味のある方はお問い合わせをいただければと思います。