秋色园QBlog技术原理解析:性能优化篇:字节、缓存、并发(十二)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介:
文章回顾:
1:  秋色园QBlog技术原理解析:开篇:整体认识(一) --介绍整体文件夹和文件的作用
2:  秋色园QBlog技术原理解析:认识整站处理流程(二) --介绍秋色园业务处理流程
4:  秋色园QBlog技术原理解析:UrlRewrite之URL重定向体系(四) --介绍URL如何定位到处理程序
5:  秋色园QBlog技术原理解析:Module之页面基类设计(五) --介绍创建基类和自定义生命周期
附章:
 
 
上节回顾:
上一节中,介绍了  秋色园QBlog 是如何提交数据到后台并处理的,因此本系列原理解析,基本架构已讲解完毕,接下的会补充几篇相关文章,继续介绍秋色园QBlog的相关内容。
 
本节介绍:
本节介绍基础的网站优化:秋色园 QBlog都进行了哪些基础优化?往下看。
 
优化一:字节
 
为了减少传输的字节,通常都会采取一些压缩[html,js,css]
1:压缩html:秋色园采用将Html当xml方式加载的手段,默认就是无空格状态,因此天生就有这优势,连GZip压缩也省了。
2:压缩CSS:本人对CSS不精通,没办法整体优化,利用VS格式化:一条样式格式化成一行,再删除一些没用到的CSS样式,勉强少了几K。
3:压缩js:秋色园没有用js,所以没这方面的开销,省力又省心。
 
优化二:缓存
 
秋色园的缓存,全使用 CYQ.Data.Cache下:CacheManage
在长久的开发过程中,秋色园中形成了以下几种缓存:
1:缓存表架构:CYQ.Data 数据框架的默认缓存
2:缓存html架构:未经处理的原始html界面,即默认的皮肤的html[秋色园的缓存机制]
3:缓存经过处理的html架构:包括css路径处理,语言翻译等,但不包括数据填充,[秋色园的缓存机制]
4:缓存页面:缓存最后的html[秋色园的缓存机制]
缓存是层层递进的,有了以上的几层缓存保障,性能是刷刷的上去了,页面打开也很快。
 
三:负载来临,问题出现,失控的缓存
 
秋色园的运行环境:国外Godaddy的虚拟主机的子目录+Access数据库
天生不佳硬件的条件,让过往的一些优化在这里显的有些脆弱,坚持不了多久,文章上到几万,性能又再次走到边缘,首页时快时慢,缓存似有似无,并发写把站点折腾的一度打不开。
 
主要表现在以下几个大方面:
1:并发写操作:Access本身在并发写时经常有死锁发生,很纠结。
2:缓存的过期:几乎是不可控的,有时打开慢[缓存失效了],有时打开快[刚好缓存已起来了]。
3:翻页的速度:在访问量少的页面,特别是翻页,由于没有缓存的照顾,每次打开都3-5秒,让人感觉一个字:慢。
 
优化四:Access的并发控制处理
 
需要找到站点经常性写数据的操作点:
 
1:用户后台:
解决手段:通过增加Lock来避免并发
由于所有的更新删除插入,都执行的:ExeNonQuery函数,
所以只要以在底层这函数里加一个可配置的项,来决定启用Lock,解决。
 
2:高频率的文章与用户访问计数:
解决手段:通过一些手段来减少更新的频率。
问题:如果每次用户访问,都执行更新计数,这对Access来说就太可怕了:会造成经常性的死锁,访问也会受影响。
采用的措施:采用了缓存计数+概率性更新,来更新到数据库,目前有效的解决了这一问题。
副作用:就是由于缓存的丢失,会丢失小部分的统计数字,不过用户访问量,并不需要太准确的数字,因此此手法还算合适。
 
优化五:掌控全局缓存,合理调优
 
缓存失控了?
 
缓存怎么用:
cache.Add(key,obj,times);//将一个对象存入缓存一段时间
 
缓存何以失控?
试想下,缓存的一段时间你是怎么定的?
敲代码时就给了想当然的时间,对不?不对?不?对?不对?
好了,说问题,正常情况下,缓存是怎样失控的?
1:不知道缓存的对象在内存中的使用情况,缺少同步与清理机制。
2:没用的缓存占了大量内存、内存回收看不见、性能优化全靠猜猜猜。
 
失控的效果与后果?
 
效果:
公司的服务器,配置高,内存大,缓存随一放,时间值设大,问题就不大,效果良好见效快。对外可以展示自己做的站点性能高,访问快,高手就这样造成出来了。
 
后果:
穷人的,用的虚拟主机,或VPS,内存就一丁点,资源很有限,再乱扔内存,对性能提升反而无益:内存不断的在超出,回收,超出,回收中循环。
结果:缓存成了虚设,站点好一会,慢一会,天天纠结中循环。
 
秋色园缓存早期情况:
失控状态,页面时快时慢,缓存时有时无,有人说慢有人说快。
 
可控的缓存设计
 
一个良好的系统,必须对缓存的使用情况有所掌控,再根据实际环境做适当缓存调整策略,进而同样的资源,有更多的发挥。
 
秋色园缓存目前情况
为了全局综合性的提升缓存性能,急需要对全局缓存有所掌握,才能做到相对合理的调优。为此,对CYQ.Data的缓存机制做了一些优化与调整及信息输出,以掌握全局情况。
 
这里截一张秋色园的缓存全局情况图:
 
 
如上图:
这是秋色园整站的缓存信息,通过这样的信息表,即可掌握哪些缓存是用的多,哪些缓存用的少,可以合理的设置时间及清除策略。
 
其它:
使用 CYQ.Data.Cache 来缓存信息,就可以打印全站的缓存列表,掌握全局,做到合理优化?
对的!!!版本要求?近期会发布新版本,将带此功能,敬请关注。
 
总结:
 
本节介绍了秋色园QBlog 的基础优化策略,下节继续介绍的优化策略后续部分,敬请关注。
 



     本文转自cyq1162 51CTO博客,原文链接:http://blog.51cto.com/cyq1162/560245 ,如需转载请自行联系原作者


相关文章
|
3月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
285 0
|
18天前
|
数据采集 存储 缓存
如何使用缓存技术提升Python爬虫效率
如何使用缓存技术提升Python爬虫效率
|
22天前
|
存储 缓存 负载均衡
从零到一:分布式缓存技术初探
分布式缓存通过将数据存储在多个节点上,利用负载均衡算法提高访问速度、降低数据库负载并增强系统可用性。常见产品有Redis、Memcached等。其优势包括性能扩展、高可用性、负载均衡和容错性,适用于页面缓存、应用对象缓存、状态缓存、并行处理、事件处理及极限事务处理等多种场景。
63 1
|
2月前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
2月前
|
存储 缓存 监控
后端开发中的缓存机制:深度解析与最佳实践####
本文深入探讨了后端开发中不可或缺的一环——缓存机制,旨在为读者提供一份详尽的指南,涵盖缓存的基本原理、常见类型(如内存缓存、磁盘缓存、分布式缓存等)、主流技术选型(Redis、Memcached、Ehcache等),以及在实际项目中如何根据业务需求设计并实施高效的缓存策略。不同于常规摘要的概述性质,本摘要直接点明文章将围绕“深度解析”与“最佳实践”两大核心展开,既适合初学者构建基础认知框架,也为有经验的开发者提供优化建议与实战技巧。 ####
|
2月前
|
存储 缓存 网络协议
如何防止DNS缓存中毒攻击(一)
DNS缓存中毒也称为DNS欺骗
58 10
|
2月前
|
缓存 网络协议 安全
如何防止DNS缓存中毒(Ⅱ)
服务器应该配置为尽可能少地依赖与其他DNS服务器的信任关系
56 10
|
2月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
2月前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
2月前
|
存储 缓存 监控

推荐镜像

更多