《构建高性能web站点》反向代理缓存
反向代理缓存是目前互联网公司使用最常见的一种方式,像新浪这样的新闻网站,大多数的页面都是读的页面,而且要求速度,所以会用反向代理的方式来构建cdn,已达到最快的访问速度。
反向代理缓存依旧是基于HTTP的一种缓存方式,反向代理服务器和web服务器以及浏览器通过HTTP头来协商,哪些东西可以缓存,哪些应该缓存过期。
因为反向代理缓存是基于HTTP的,所以其工作在七层,常用的软件是古老的squid和新兴的varnish、nginx。
总结1:集中反向代理缓存服务器的比较
1.squid,很古老的反向代理软件,拥有传统代理、身份验证、流量管理等高级功能,但是配置太复杂。它算是目前互联网应用得最多的反向缓存代理服务器,工作于各大古老的cdn上。
2.varnish是新兴的一个软件,设计简单,更符合目前互联网的应用,很多公司都采用了varnish这个软件,比如微博的openapi http://open.t.sina.com.cn
3.nginx nginx的反向代理缓存是通过一个模块实proxy_cache来实现的,目前这个模块还在完善中,但是很多公司已经开始使用了。
总结2:varnish的一些简单总结
小总结一些书上的东西,以后更加全面地实施一遍
1.varnish的换成为一个文件,数据结构和mysql的innodb类似
2.varnish的配置文件很容易理解,是一种类编程语言实现的控制逻辑,主要是对HTTP的头的判断
3.nginx配置的主要的两种方式,一种是浏览器请求的时候判断哪些该从缓存文件输出,哪些应该求求后端;第二种是从服务器端出来的数据,varnish判断哪些可以缓存
从浏览器得到请求后的判断:
sub vcl_recv{
if(req.request != "GET" &&
req.request != "HEAD" &&
req.request != "PUT" &&
req.request != "POST" &&
req.request != "TRACE" &&
req.request != "OPTIONS" &&
req.request != "DELETE"){
return (pipe);
}
if(req.request != "GET" && req.request != "HEAD"){
return (pass);
}
if(req.http.Authorization || req.http.Cookie){
return(pass)
}
return(lookup);
}
pass 表示不检查缓存直接发给后端
lookup 表示先从缓存中找信息
http://hi.baidu.com/leolance/blog/item/a4bb9d823e95603066096e6c.html
从后端服务器获得数据后的判断:
sub vcl_fetch{
if(!obj.cacheable){
return pass;
}
if(!obj.http.Set-Cookie){
return pass;
}
set obj.prefetch = -30s;
return (deliver);
}
pass 表示直接返回给浏览器
deliver 表示将内容写入缓存区
总结3:缓存命中率
由于缓存一般都以LRU的模式进行淘汰,有可能缓存空间太小,内容又很多,导致了很多需要的文件被踢出去了。
缓存命中率是一个需要预算和监控分析的,需要数据上进行各种分析后不断调整。
- 下一篇: 程序员与文人
- 上一篇: 我的技术历程2011
相关推荐
- 重回博客
- Posted on 12月05日
- 平安夜的北京车牌风波
- Posted on 12月24日
- 我曾今写的二手书网——小熊图书网
- Posted on 09月16日
- 阅读IT大牛的博客
- Posted on 04月25日
ᓄ注册送58元澳门金沙太子娱乐城奥斯卡E3.rmb88.ml
丝袜子ꌥ臭丝袜ꌥ小女孩穿白丝袜ꌥ黑网丝袜ꌥ原味丝袜文章ꌥ捆绑丝袜ꌥNNj.518mei.com
高仿手表᠐Jimmy Choo(周仰杰)TISSOT(天梭)Tod’s(托德斯)LJSJ(良屐世家)Gucci(古奇)CHANEL(香奈儿)yuandan.ml