« 2008年12月 | メイン | 2009年06月 »

2009年04月20日

WEB+DB PRESSで連載やります

WEB+DB PRESS Vol.50から、「大規模Webサービスの裏側」というタイトルでmixiのシステム運用について連載を書かせて頂くことになりました。
初回は一つ前にblogでもなんとなく触れた画像配信について書きましたので、ご興味をもった方はぜひ読んでくださいませ。

詳しい目次等は技術評論社様のサイトで見れます。
http://gihyo.jp/magazine/wdpress/archive/2009/vol50

2009年04月13日

Squidのキャッシュの消し方

Net::Squid::Purgeというモジュールがでてたので。

Squidのcacheの消し方は、Squidから特定のキャッシュのみを削除する方法にsquidclientを使ったやりかたが紹介されているのですが、上のモジュールはそれをPerlから便利に使えるようにしたもの見たいですね。

主にReverse Proxyとして使っているパターンですが、最近ではsquidclient使ったり、IO::Socketやtelnetで叩くのが面倒なので、HTTPの仕様を利用しています。

HTTP/1.1の仕様でキャッシュサーバは

 Cache-Control: max-age=n

のようなリクエストを受け付けた場合に、キャッシュの経過時間がn秒よりも古かった場合、expires等が切れてなくても、オリジンのサーバにリクエストを行うことになっています。

そこでこれを利用して

Cache-Control: max-age=1

を付けてリクエストを行なえば、だいたい常にオリジンのサーバへ確認をしてくれます。
オリジナルコンテンツが無くなっていた場合は、元のキャッシュが消えて、404がキャッシュされるような感じですね。なので厳密なキャッシュ削除とはちょっと違います。
なんで、max-ageが 0 ではなくて、1 なのかというと、squidの設定で、ignore-no-cacheがあるためです。このオプションが有効になっている場合、Cache-Control: no-cacheやPragma: no-cacheと同じように、max-age=0は無視されてしまします。


このリクエストを実際に運用しているサーバに大量に送ると負荷になってしまう可能性があるので、他人/他社のWebサービスに対しては行なわないようにしてください。