《构建高性能WEB站点》动态内容缓存(页面缓存)
动态内容缓存就是把动态语言(目前一般是动态脚本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等加速目录遍历的文件系统缓解这些情况,比如XFS,reiserfs
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
- 下一篇: 今天姐姐结婚了
- 上一篇: one and a half years in sina
相关推荐
- Facebook工程师的MemSQL体验
- Posted on 06月19日
- 《构建高性能web站点》——服务器并发处理能力–服务器进程
- Posted on 03月30日
- 今天貌似是我的农历生日
- Posted on 08月04日
- 写给2010年
- Posted on 12月31日