转载自:http://www.cyqdata.com/qblog/article-detail-38993html
文章回顾:mysql
PS:秋色园QBlog下载地址:http://www.cyqdata.com/download/article-detail-427
上[2]节回顾:
上两节中,介绍了 秋色园QBlog 在性能优化方面所作的基础工做:
减小字节输出大小、写并发控制、缓存控制等。
特别是对缓存的处理,作到全局把握,优化内存资源,合理调优化。
CYQ.Data 在性能调优方面表现出必定的优点。
同时又介绍了另外一种优化方案:经过打印页面SQL,捕捉耗时语句长的进行针对性优化。
本节介绍:
本节将介绍秋色园
QBlog
再更进一步的网站优化方式:缓存失效后的后补方案,静态化的html。
秋色园 QBlog 一直用Access,目前已超过600M的大小:
曾经尝试更换数据库:如:2011年03月14日---随说秋色园QBlog从Access升迁到MSSQL过程,不过最后仍是没换成,缘由文中有说到,就不重复了。
前不久买了个VPS,把秋色园搬到赌城“拉斯维加斯”,同时也进行了多种数据库测试,前后跑了下:Access/mssql2000/2005/oracle/mysql/sqlite,等 CYQ.Data 数据框架 支持的数据库。
借助 CYQ.Data 数据框架 对一些不一样数据库差别性函数和方法作了多数据库解析,秋色园无需修改代码仅靠切换数据库连接,就轻松转移数据库顺利跑完,这个之后再介绍。
虽然各类数据库都能跑,但目前仍是没有更换数据库,持续的跑access:
为了Access 10万文章的坚持,也是为了最大化的优化程序。
其实,最重要的缘由,是VPS的512M的内存,经不起大数据的折腾。
Access其实速度并不快:
当Access上到单表几万的数据以后,单从查询想要快,很难。
基本速度为大约3秒左右执行完一个秋色园 QBlog 首页,分页,会慢一些5秒左右。
提速靠程序优化:
为了提速,秋色园 QBlog 坚持从程序结构及控制上来下功能,因此 秋色园 QBlog 第一步 有了缓存机制。
不过缓存总有失效时,如何在缓存失效后,继续保持快速的访问?
缓存失效背后的方案:
方案一:
产生后补缓存:接替快要失效的缓存,保持持续的缓存,同时保障页面的及时更新。
说明:
不过只是简单的考虑了一下,并无深刻去研究和实现这种方案。
实现是确定能够的,须要点技术手段,大伙多想一想。
不足处:
对于应用程序池内存回收时,会总体缓存失效,后补天然也失效,此时还会产生空白期。
因此,后来考虑了另外一种方案。
方案二:
生成静态页面:临时接替失效的缓存,同时再产生新的缓存。
说明:
如此一来,静态页面当了临时缓冲,这样就能够持续的保持高速的访问机制。
同时也能够避开内存回收的空白期,这是秋色园目前采用的方案。
不足处:
比较难以控制新页面的产生,实时性不强。
因此后面又想了不少招,来跳过静态页面的加载。
静态化的技术手段与难点:
1:如何生成静态页面?批量?后台程序?No...
2:静态页面如何呈现?直接访问xxx.html?No...
3:如何保障页面的更新?定时批量更新?No...
4:静态化甘愿作缓存的后补?很差说,说很差,不说好......
静态化技术解析:
一:如何生成静态页面
1:写个后台程序,点下按钮,批量生成?
之前作电子商务的时候,就是这么处理的。
由于产品基本信息不怎么变,并且编辑人员就那么几个,从新编辑时就再生成一次html。
不过秋色园不是这种方式,也不太适用。
2:第一次受访问时,生成HTML
秋色园目前采用这种方式,由于将HTML当Xml方式的加载方式,要生成静态页面,太简单。
只要在页面结束输出以前,将Xml的InnerXml保存到指定路径就能够了。
因而问题就简化成如何指定保存路径了。
二:静态页面如何呈现
想象一下,当访问:http://www.cyqdata.com/qblog/article-detail-37431 的时候,
第一接手的:URLRewrite,它须要解析完URL,而后决定跳转路径。
跳转有两条路:
1:增长一种逻辑,判断是否已生成html,根据条件跳转到静态化的html进行访问。
不过秋色园没有采用这种方式。
2:将HTML当成缓存,直接读取并加载,而后继续后面的页面生命流程
基本逻辑以下:
if ( 尝试读取缓存) { 从缓存返回Document }
else if ( 尝试读取html){加载html返回Document ,并几率性线程,请求更新数据,同时产生新缓存}
else {原始的加载方式,依旧读取数据库,同时生成HTML页面}
三:如何保障页面的更新
1:原始的加载方式,上面的最后的 else 事件中,会生成HTML。
2:上面的 else if 事件中,有几率性事件请求,对于几率性事件,仍旧请求当前页面。
不过须要加标识,让它直接定位到最后的 else 事件,这样就能够产生新的更新页面了。
PS:
首页好比缓存3分钟,失效时,进入 else if 事件中读取html,同时产生几率性事件,
若是第一次就中了,加上再次产生的新缓存3分钟,则实际6分钟更新一次数据呈现。
四:平衡静态化与缓存的功效
基本一个页面就100K,512M能缓存多少文章呢?还有系统其它N种开销,能省就省了。
所以不能大面积的使用缓存,所以须要平衡使用,将静态化提高到一个重要位置使用。
目前秋色园的基本策略是:
1:首页:开启缓存+HTML
2:用户首页:开启缓存,关闭HTML
3:用户文章:关闭缓存,开启HTML
4:用户图片:关闭缓存,关闭HTML,少人用啊。
5:文章分类:开启缓存,关闭HTML
总结:
本节介绍了秋色园QBlog 实际中保持访问速度的策略,下节继续介绍优化策略的再后续部分,敬请关注。