『大型网站技术架构』(二):高性能架构
2016-04-14 12:14
453 查看
『大型网站技术架构』(二):高性能架构
一、不同视角下的网站性能
用户视角关注点: 关注响应时间,包括浏览器和服务器通信时间 + 服务器处理时间 + 浏览器构造请求和解析响应的时间;
优化手段: 前端架构优化
开发人员视角
关注点: 关注应用及相关子系统性能,包括响应延迟、系统吞吐量、并发处理能力、系统稳定性等技术指标;
优化手段: 缓存加速数据读取、集群提高系统吞吐量、异步消息加快请求响应和削峰、代码优化提升性能;
运维人员视角
关注点:关注基础设施性能、资源利用率。
优化手段: 建设优化骨干网、高性价比定制服务器、利用虚拟化技术优化资源利用率;
二、性能测试指标
1. 响应时间
定义:执行一个应用需要的时间,包括从发出请求开始到收到最后响应数据所需要的时间。反映系统快慢。图1 常用系统操作响应时间表
2. 并发数
定义:系统能够同时处理请求的数目。反映系统负载特性。网站系统用户数 >> 网站在线用户数 >> 网站并发用户数
3. 吞吐量
定义: 单位时间内系统处理的请求数量。反映系统的整体处理能力。单位:TPS每秒事务数,HPS每秒HTTP请求数,QPS每秒查询数
并发数由小增大,服务器资源消耗逐渐增大,吞吐量先增大后下降,直至资源耗尽,吞吐量为零。
4. 性能计数器
定义:描述服务器或操作系统性能的一些数据指标。比如load、对象与线程数、内存、CPU、磁盘/网络IO。
三、性能测试方法
1. 性能测试
以系统设计规划的性能指标为预期目标,验证系统在资源可接受范围内是否能达到性能预期。
2. 负载测试
不断增大并发请求增加系统压力,直到系统某项或多项性能指标达到安全临界值。此时如果继续施压,系统处理能力不升反降。
3. 压力测试
对系统持续加压超过安全负载,直到系统崩溃,以此获得系统最大压力承受能力。
4. 稳定性测试
被测系统在特定硬件、软件、网络环境下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。图2 测试性能曲线
a-b是网站日常运行区间,c是系统最大负载点,d是系统崩溃点。
四、性能优化策略
1. Web前端性能优化
1.1. 浏览器访问优化减少HTTP请求:合并CSS/JS/图片,sprite技术。
使用浏览器缓存静态资源:Cache-Control、Expires
启用压缩:gzip(文本文件压缩率80%以上)
CSS放在页面最上面(浏览器下载完CSS才开始渲染)、JS放在页面最下面(浏览器加载JS后立即执行,避免某些操作阻塞页面)。
减少Cookie传输:减少Cookie中数据量、为静态资源使用独立域名,避免发送Cookie。
1.2. CDN加速:CDN本质是缓存,将数据(静态资源)缓存在离用户最近的地方。
1.3. 反向代理:缓存静态资源,加速请求响应速度、负载均衡,改善性能、安全
2. 应用服务器性能优化
2.1. 分布式缓存网站性能优化第一定律:优先考虑使用缓存优化性能。
2.1.1. 缓存基本原理:Hash表
2.1.2. 合理使用缓存:
不频繁修改的数据:读写比2:1以上。
有热点的访问:遵循二八定律。
应用能够容忍短期数据不一致和脏读,最终一致。
缓存可用性:防止出现缓存雪崩,即系统性能已经严重依赖缓存,没它不行。
缓存预热: 缓存启动时把热点数据预热(warm up)好。
防止缓存穿透:恶意请求不存在的Key,使请求落到数据库,一个对策是将不存在的数据也缓存起来,令其值为null。
2.1.3. 分布式缓存架构:
需同步更新副本的分布式架构(JBoss Cache)
互不通信的分布式架构(Memcached:简单地通信协议、丰富的客户端程序、高性能网络通信(Libevent、事件触发)、高效的内存管理(slab、chunk)、一致性hash)
2.2. 异步操作
使用消息队列将调用异步化,降低响应延时。
避免高并发请求数据直接落到数据库。
削峰,消除并发访问高峰。
2.3. 使用集群
负载均衡,避免单一服务器压力过大而响应缓慢。
3. 代码优化
3.1. 多线程启动线程数 = [任务执行时间/(任务执行时间-IO等待时间)] * CPU核数
注意线程安全问题:
将对象设计为无状态:对象无成员变量,在OOP看来是一种不良设计。
使用局部对象。
并发访问资源使用锁。
3.2. 资源复用
尽量减少那些开销很大的系统资源的创建和销毁,比如数据库连接、网络通信连接、线程、复杂对象等。
两种模式:
单例(Singleton): 贫血模式,例如Service、Dao等无状态对象,无需重复创建。(对应有状态的充血模式)
对象池(Object Pool):复用对象实例,减少对象创建和资源消耗,例如连接池、线程池等。
3.3. 数据结构
优化算法
优化数据结构
3.4. 垃圾回收
理解垃圾回收机制,程序优化和参数调优,减少Full GC。
JVM垃圾回收:年轻代+老生代。年轻代包括Eden Space、From、To,进行Young GC;老生代进行Full GC。新对象从Eden Space创建,Eden满了以后YGC,将存活对象复制到From区。当Eden再次满后再次YGC,将Eden和From中的存活对象复制到To。当Eden再次满后再次YGC,将Eden和To中的存活对象复制到From。多次YGC未释放的对象进到老生代,老生代空间满时Full GC。
4. 存储性能优化
4.1. 机械硬盘升级为固态硬盘4.2. B+树:文件系统或数据库系统通过B+数对数据排序后存储,加快数据检索速度。
4.3. RAID:可通过硬件或者软件实现。
RAID0: 并发读写N块磁盘,速度快,无冗余,数据可靠性低,磁盘利用率100%。
RAID1: 镜像磁盘,访问速度慢,数据可靠性高,磁盘利用率50%。
RAID10: 结合RAID0和RAID1,将磁盘分成2份,互为镜像,同RAID1,每一份磁盘中的数据并发读写。访问速度较快,数据可靠性高,磁盘利用率50%。
RAID3/5/6: 冗余存储校验数据,使少数盘破坏的情况下数据能恢复。访问速度较快,数据可靠性较高,磁盘利用率较高。
--EOF--
相关文章推荐
- 『大型网站技术架构』(一):架构演化、模式、要素
- 对Dagger2的使用
- .net 获取网站根目录总结
- 大型网站系统架构演化之路
- 如何快速查找网站后台地址方法
- vps上IIS搭建网站图解
- spark运行时的架构
- 一些网站记录
- 牛人开发软件-网站收集
- 本地项目的jsp跳转到另外一个网站或项目的jsp
- 如何处理服务器SSL收到了一个弱临时Diffie-Hellman 密钥?
- 百度步随谷歌,重组业务架构,深意何在?
- 数据仓库专题(22):总线架构和维度建模优势-杂项
- Android控件架构
- 高可用集群原理解析
- 架构的重要性
- 搭建属于自己的网站
- 百度业务架构重组:释放内容、服务、金融三大势能
- 通过建立自己的AuthorizeAttribute实现网站的权限管理
- 淘宝天猫网站停止支持IE6、IE7浏览器,你还在用xp吗?