《构建高性能web站点》反向代理缓存

作者:heyue 时间:2011-04-27 分类:互联网技术 评论:3 条 浏览:2737

反向代理缓存是目前互联网公司使用最常见的一种方式,像新浪这样的新闻网站,大多数的页面都是读的页面,而且要求速度,所以会用反向代理的方式来构建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的模式进行淘汰,有可能缓存空间太小,内容又很多,导致了很多需要的文件被踢出去了。

缓存命中率是一个需要预算和监控分析的,需要数据上进行各种分析后不断调整。

相关推荐
更多