《构建高性能WEB站点》动态内容缓存(页面缓存)

作者:heyue 时间:2011-04-23 分类:互联网技术 评论:0条 浏览:5377

动态内容缓存就是把动态语言(目前一般是动态脚本php、python、perl、java、ruby等)生成的结果保存起来,下次来取的时候直接返回html的结果。缓存这个东西,就是为了避免重复计算,把结果保留下来,这个比较适合读多写少的页面和网站,但是像微博的页面、人人的个人首页之类的就绝对不能用页面缓存。

在新浪这种大型的互联网公司,而且以读为主的新闻媒体,页面缓存一般分两种。一种是静态页面,就是编辑直接敲html生成一个页面,然后发到线上的前端机(比如首页,经过人工处理过的排行榜,推荐视频等,也就是运营页面)。另外一些就是存放在数据库中的数据,一般是php调用计算出页面之后放到前端cdn缓存,一段时间之后自动过期重新取数据,比如用squid、varnish等实现前端缓存。

总结1:几个时间数据

1.5ms的时间=数据通过光缆从北京传输到西安的时间。

2.数据传输的速度从cpu向外逐渐变慢 cpu>>高速缓存>>内存>>硬盘

3.html的速度是php等动态脚本速度的10倍以上

总结2:cache目录的设置

一般的linux的文件系统一个目录下的文件上万之后,CPU遍历目录效率很低,解决方法:

1.使用支持目录hash等加速目录遍历的文件系统缓解这些情况,比如XFSreiserfs

2.在自己缓存的时候hash一下目录,也就是缓存成y/m/d/id.html 的类型,一般cache程序都支持这样

总结3:smarty 文件cache 的开启方式

$smarty->caching = true;
$smarty->template_page="index.tpl";
$smarty->cache_lifetime = 60;

4.几种php级别的全页面缓存的比较

smarty 以文件的方式缓存在磁盘,可以用于小规模的页面缓存
file cache 这个适合不常更新的网站,生成简单,速度非常快。网站内容多了重建内容麻烦。
apc cache 等 修改程序,用本机内存,不具有通用性
memcache 走tcp,需要网络传输,但是用来缓存页面有点浪费

总结4:带宽对吞吐率的影响

比如租用了一个10m的带宽,全部是静态页,每个页面10k

(10Mbit/s*8)/10kB = 8ooreqs/s

也就是极限只能是800reqs/s

总结5:页面页面缓存更新策略(比如cms)

1.在新建、更新文件的时候更新缓存,但是如果有排行榜之类的就很麻烦,所有的都得修改

2.异步crontab或者一个daemon的程序修改

3.用局部缓存的方式处理排行榜、推荐之类的,比如用SSI的方式来包含其他的需要半实时更新的排行榜之类的数据

如 http://news.sina.com.cn/c/2011-04-23/021522342946.shtml 这种shtml格式的文件,这个可以满足大多数的需求。

总结6:SSI

SSI就是服务器端包含的意思,就是这个请求不用到达php,在apache,nginx,lighttpd就处理的一种技术,不到动态脚本,速度自然快很多。

apache下的配置(安装mode_include模块)

AddType text/html .html

AddOutputFilter INCLUDES .shtml

标签: , ,

相关推荐
更多