如何提高命中率,我分享下我的经验

jackxiang 2010-5-10 19:17 | |
看到有朋友讨论如何提高命中率,那么我也来分享下我的经验吧

缓存命中
1.缓存时间设置,顾名思义,缓存时间设置的越长那么命中率也会相对较高。
缓存与更新是一对矛盾的概念,既要做到高命中又要做到快速更新这个就需要自己对自己网站内容的了解然后指定合适的缓存策略。

2.缓存能缓存的内容,什么是能缓存的内容呢?我认为所有用户访问都是一样的,这种文件都可以缓存,除了时间等实时变化内容。例如有些动态文件实际上也可以缓存,另外还有些特殊类型的url也可以缓存如 "http://abc.com/aa.swf?=参数" 等类似的url,忽略掉参数缓存成一份文件。


3.注意vary头部,一般来说我们配置了vary:accept-econding。实际上这样会缓存四五份文件,每一种用户请求头中的accept-econding都会使squid缓存一份文件。各个浏览器的请求头部格式不一样,因此缓存的份数也不一样。那么例如有的网站配置了vary:uesr-agent,那就悲剧了。

4.URL-Hash能够提高多台缓存服务器集群情况下的命中,使每台机器上都缓存不一样的文件,提高存储利用率和命中率。


用户命中
实际上不仅CDN架构会有命中的概念,用户浏览器也会对网页文件进行缓存,提高用户cached也很重要。

1. 设置有效时间;在能缓存的文件HTTP头部添加expire头部或max-age头部,不要小看这个配置,这个配置能为你的网站节省大量的流量,在用户行为里经常会使用浏览器前进或后退功能,如果没有添加这些头部会产生一个验证请求到上游服务器,添加了浏览器验证是在有效时间内则直接调用浏览器缓存。

2.源站命中
    文件更新验证;为什么我们刷新网站一般都会比第一次打开网站快的多?浏览器知道我们是经常请求重复文件,会有一个验证机制,如果超过了浏览器缓存时间或点击刷新都会产生很多验证请求。验证请求中最主要的就是if-modify-since和if-none-match头部,对应的是响应文件的Last-modify和Etag头部

    如果说只有单一的源站这些可能都不是问题,如果有多台源端服务器,那么last-modify时间可能会是不一样的即使文件内容一样。此时源站可以通过URL Hash或仅使用Etag来作为文件验证的标准。

    既然说到Etag,那就再提两句。Etag主要解决文件验证的单一性,如果你的Etag标签里是按照时间戳生成的那就悲剧了。一般情况下web服务器会同时验证last-modify和Etag,只有两个条件都满足才会返回304状态码。
来源:http://www.linuxtone.org/html/61/t-5961.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/3054/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]