秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,构造持续的缓存方案(十四)
转载自:http://www.cyqdata.com/qblog/article-detail-38993
文章回顾:
1: 秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用
2: 秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程
3: 秋色园QBlog技术原理解析:UrlRewrite之无后缀URL原理(三) --介绍如何实现无后缀URL
4: 秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序
5: 秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建基类和自定义生命周期
6: 秋色园QBlog技术原理解析:Module之页面基类-生命周期流程(六) --介绍基类生命周期内部业务
7: 秋色园QBlog技术原理解析:Module之基类生命周期-页面加载(七) --介绍界面html加载原理
8: 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八) --介绍html的内容是如何填充
9: 秋色园QBlog技术原理解析:独创的多语言翻译机制(九) --介绍html多语言翻译原理
10:秋色园QBlog技术原理解析:页面内容填充及多语言翻译流程演示示例(十) --总结演示示例代码
11:秋色园QBlog技术原理解析:页面Post提交机制(十一) --介绍如果Post提交数据
12:秋色园QBlog技术原理解析:性能优化篇:字节与缓存与并发(十二) --介绍性能优化:字节,并发及缓存
13:秋色园QBlog技术原理解析:性能优化篇:全局的SQL语句优化(十三)--介绍全局掌握SQL,进行针对性优化
附章:
1:秋色园QBlog技术原理解析:博客一键安装工具技术实现[附源码下载] --开源秋色园安装工具原理
PS:秋色园QBlog下载地址:http://www.cyqdata.com/download/article-detail-427
上[2]节回顾:
上两节中,介绍了 秋色园QBlog 在性能优化方面所做的基础工作:
减少字节输出大小、写并发控制、缓存控制等。
特别是对缓存的处理,做到全局把握,优化内存资源,合理调优化。
CYQ.Data 在性能调优方面表现出一定的优势。
同时又介绍了另一种优化方案:通过打印页面SQL,捕捉耗时语句长的进行针对性优化。
本节介绍:
秋色园 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秒左右。
提速靠程序优化:
缓存失效背后的方案:
方案一:
产生后补缓存:接替快要失效的缓存,保持持续的缓存,同时保障页面的及时更新。
说明:
不过只是简单的考虑了一下,并没有深入去研究和实现这种方案。
实现是肯定可以的,需要点技术手段,大伙多想想。
不足处:
对于应用程序池内存回收时,会整体缓存失效,后补自然也失效,此时还会产生空白期。
所以,后来考虑了另一种方案。
方案二:
生成静态页面:临时接替失效的缓存,同时再产生新的缓存。
说明:
如此一来,静态页面当了临时缓冲,这样就可以持续的保持高速的访问机制。
同时也可以避开内存回收的空白期,这是秋色园目前采用的方案。
不足处:
比较难以控制新页面的产生,实时性不强。
所以后面又想了很多招,来跳过静态页面的加载。
静态化的技术手段与难点:
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 实际中保持访问速度的策略,下节继续介绍优化策略的再后续部分,敬请关注。
秋色园QBlog技术原理解析:性能优化篇:缓存总有失效时,构造持续的缓存方案(十四)的更多相关文章
- JavaScript性能优化篇js优化
JavaScript性能优化篇js优化 随着Ajax越来越普遍,Ajax引用的规模越来越大,Javascript代码的性能越来越显得重要,我想这就是一个很典型的例子,上面那段代码因为会被频繁使用, ...
- jQuery性能优化篇
jQuery高级技巧——性能优化篇 阅读目录 通过CDN(Content Delivery Network)引入jQuery库 减少DOM操作 适当使用原生JS 选择器优化 缓存jQuery对象 定义 ...
- 《MySQL性能优化篇》阅读笔记
建表的时候,不要用null赋默认值,如:字符串的设置'',数据类型的设为0,不要将null设为默认值. 在MySQL中没有 full [outer] join,用union代替 各种 JOIN SQL ...
- Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化
Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...
- Velocity工作原理解析和优化
在MVC开发模式下,View离不开模板引擎,在Java语言中模板引擎使用得最多是JSP.Velocity和FreeMarker,在MVC编程开发模式中,必不可少的一个部分是V的部分.V负责前端的页面展 ...
- 【React】393 深入了解React 渲染原理及性能优化
如今的前端,框架横行,出去面试问到框架是常有的事. 我比较常用React, 这里就写了一篇 React 基础原理的内容, 面试基本上也就问这些, 分享给大家. React 是什么 React是一个专注 ...
- Unity技术支持团队性能优化经验分享
https://mp.weixin.qq.com/s?__biz=MzU5MjQ1NTEwOA==&mid=2247490321&idx=1&sn=f9f34407ee5c5d ...
- 【转】Oracle Freelist和HWM原理及性能优化
文章转自:http://www.wzsky.net/html/Program/DataBase/74799.html 近期来,FreeList的重要作用逐渐为Oracle DBA所认识,网上也出现一些 ...
- ROW/COW 快照技术原理解析
NOTE:ROW/COW 最新更新请跳转<再谈 COW.ROW 快照技术> 目录 目录 快照与备份的区别 Snapshot 快照技术 全量快照 增量快照 COW 写时拷贝快照技术 ROW ...
随机推荐
- android实战开发02
正如我之前提到的,我想的是网页来进行测试发布是有较大难度的,但是我高兴的看到我的好友limary已经熬出头了,之后我会关注他的进度的,感谢他给我的鼓励和启发.现在我要讲讲我的天才运算器V2.0版. 在 ...
- Chapter 4 需求工程
软件需求是用户解决问题或达到目的所需的条件或能力,以及系统或系统部件要满足合同.标准.规范或其他正式规定文档所需要的条件和能力.软件需求可以划分为业务需求.用户需求.系统需求.功能需求和非功能需求等类 ...
- spring 原理
1.spring原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建.调用对象,Spring就是在运 ...
- C#窗体随机四则运算 (第四次作业)
---恢复内容开始--- 增量内容:1)处理用户的错误输入,比如输入字母或符号等,处理除法运算中分母为0的情况,处理结果为负数的情况,保证是小学水平不出现负数,比如不能出现5-8=-3这种情况:2)用 ...
- HDU3629(凸四边形的个数)
HDU 3629 计算几何 题目描述:给你n个点(4~700), 问你能够成多少个不同的凸四边形. 解题报告: 暴力的话C(700,4)必然超时,发现,任何一个凹包必然是其中一点在其它3点构成的三角形 ...
- 关于mybatis的思考(2)——mybatis映射文件的深入理解
1.配置文件 mybatis进行持久化操作是以SqlSessionFactory对象为基础的,这个对象是整个数据库映射关系经过编译后的内存镜像. InputStream inputStream = R ...
- LCA(最近公共祖先)算法
参考博客:https://blog.csdn.net/my_sunshine26/article/details/72717112 首先看一下定义,来自于百度百科 LCA(Lowest Common ...
- week3b:个人博客作业
vs2013的初步使用 由于自己在写这篇博客的时候已经把vs2013安装完毕,就我写了. 这是2013的使用步骤 第一步 注释 箭头指的方向是“点击” 第二步 第三步 第四步 第5步 第六步 最后点击 ...
- sql中详解round(),floor(),ceiling()函数的用法和区别?
round() 遵循四舍五入把原值转化为指定小数位数,如:round(1.45,0) = 1;round(1.55,0)=2floor()向下舍入为指定小数位数 如:floor(1.45,0)= 1; ...
- POJ3177_Redundant Paths
给你一个无向图,求至少加入多少条边,使得整个图是双联通的. 通过枚举题意,发现重边是不算的,直接去掉. 首先把那些边是桥计算出来,把位于同一个连通分量里面的点缩成一个点(并查集),然后计算缩点后有多少 ...