现状:
目前网站的首页、产品详情页、 CMS 页都经过了 Squid 进行页面缓存。目前设置缓存有效期为 2 小时,缓存命中率约 60% 左右。
这意味着另外约 40% 的页面响应可能较慢。当系统 down 机时,约 40% 相关页面无法正常访问。
主动更新:
很多系统的 squid 缓存都采用主动更新机制,如维基百科。
Squid 支持一种 PURGE 机制,删除指定 URL 的缓存。再次请求即获得页面最新内容。
改进方案:
将 Squid 缓存有效期设置为 48 小时。每小时更新一次首页,每半小时检查有数据变化的详情页和 CMS 页进行主动更新。
每天凌晨 3~5 点钟进行全站主动更新。
这样缓存命中率完全可以提高到 99% 以上,用户访问响应更快,系统 down 机时相关页面仍能访问。
优点:
该方案基本不涉及复杂逻辑,即使程序 bug 也只是页面未及时更新,基本无风险。
参考文档 :
http://home.arcor.de/pangj/squid/
http://www.iteye.com/topic/399149
很好的机会。
简单的基于时间的被动更新策略,确实会存在缓存过期后,更新缓存的请求比较慢,甚至出现不可用的情况,
并且很多情况下数据没有变化,是不需要更新缓存的,但还是做了无谓的刷新。
如果要改为纯主动更新策略,即前台只访问缓存,不触发更新缓存,可以保证 Down 机后,所有页面都可以访问,理论上缓存命中 100% ,
但这个需要保证所有的 entry 都“主动”刷到缓存里面了,并且新增的 entry 要实时进入缓存,这个不太现实,因为很多地方需要触发缓存更新。
所以最好使用主动 + 被动更新结合的方式,就是龙辉讲的做法,理论上只有新的 entry 需要被动触发更新,其他的请求都会命中缓存,
此时如果系统 Down 机,新增的 Entry 还是不能访问的,不过这个几率是很小的,就在龙辉讲的 1 % 里面的 1% 吧 J
“每半小时检查有数据变化的详情页和 CMS 页进行主动更新”
这一步需要考虑全面,如果有遗漏,这部分的信息的变化最坏要等到要等24 小时以后全量更新缓存时才能更新。
在 Squid 3.0 版本下.就这一句就可以了..
./squidclient -r "http://www.gznow.cn/"
更多的参数使用,可以查看 ./squidclient -h