根据网站分层架构,网站的性能优化,可分为Web前端性能优化、应用服务器性能优化、存储服务器性能优化3大类。
一、WEB前端性能优化
1、浏览器
1)减少http请求
主要方法为合并css、js、图片。
2)浏览器缓存
3)启用压缩
4)CSS在页首、JS尽量放页尾
5)减少cookie
不在cookie中放置大的数据
2、CDN
3、反向代理
4、代码优化
页面减肥,去掉一些无谓的代码
二、应用服务器性能优化
1、缓存
无论是网站本身提供本地缓存,还是使用分布式缓存,如redis、memcached、JBoss Cache 等,只要应用合理得当,都可以为性能带来积极的改善。
2、异步操作
使用消息队列。不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,会对数据库造成巨大的压力,也使得响应延迟加剧。在使用消息队列后,用户请求的数据发送给消息队列后立即返回,数据由消息消费者进程异步写入数据库。消息队列的处理速度远快于数据库,可以有效改善用户响应延迟问题。
同时消息队列具有很好的削峰作用。将并发变成了排队。
3、集群
负载均衡。
相关文章:集群集群
4、代码优化
1)多线程
2)资源复用
从编程角度,资源复用主要有两种模式:单例(singleton)和对象池(object pool)
3)数据结构
4)垃圾回收
理解垃圾回收机制,优化代码和参数调优
三、存储服务器性能优化
1、机械硬盘 vs 固态硬盘
2、B+树 vs LSM树
传统机械磁盘特点是顺序读写快速,随机读写较慢;而磁盘访问是随机的,并且每次数据访问都要经过多次磁盘访问,所以性能较差。
为了改善数据访问特性,文件系统或数据库系统通常会对数据排序后存储。传统关系型数据库的做法是采用B+树。
B+树是一种专门针对磁盘存储而优化的N叉排序树,以树节点为单位存储在磁盘中,从根节点开始查找,加载数据到内存中,一直找到所需数据为止。B+树可能需要5次磁盘访问才能更新一条记录,次数还是有点多。
许多NoSql产品采用LSM树作为主要数据结构。数据更新、操作主要在内存中进行,速度远快于B+树。
无论是B+树还是LSM,RDBMS或NoSql都可以用,并非谁谁所独有。
3、RAID vs HDFS
1)RAID
有好多种款式。简单来说,就是多个硬盘当成一个来使用,或提高可用性,或提高速度。提高速度的原理,是在于数据可以分散到多块硬盘,并且多块硬盘可以并行工作。
详见:
存储系统
2)HDFS
HDFS,一种分布式文件系统,在整个存储集群的多台服务器上进行数据并发读写和备份,可以看作在服务器集群规模上实现了类似RAID的功能,因此不要再做磁盘RAID。
详见:
分布式文件系统GFS、HDFS的比较
四、性能测试指标
1、响应时间
执行一个操作需要的时间,从发出请求到最后响应所需要的时间。
2、并发数
系统能够同时处理的请求的数目。对于网站而言,并发数就是网站并发用户数,即同时提交请求的用户数目。
网站用户数 >> 用户在线数 >> 网站并发用户数
3、吞吐量
单位时间内系统处理的请求数量。体现系统的整体处理能力。
4、性能计数器
描述服务器或操作性能的一些数据指标。如:
System Load
对象与线程数
内存使用
CPU使用
磁盘与网路IO 等
五、性能测试方法
性能测试是一个总称,可细分为性能测试、负载测试、压力测试、稳定性测试。
1、性能测试
以系统设计的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
2、负载测试
对系统不断地增加并发请求以增加系统压力,直到系统的某项或多项指标达到安全临界值。如某种资源已经饱和,继续加大压力,系统处理能力不升反降。
3、压力测试
超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或不能再处理任何请求,以此获得系统最大压力承受能力。
4、稳定性测试
被测试系统在特定硬件、软件、网络环境条件下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。稳定性测试应该模拟生产环境,不均匀地对系统施加压力。
性能测试是一个不断对系统增加访问压力,以获得系统性能指标、最大负载能力、最大压力承受能力的过程。