概述
性能是站点的一个重要指标,除非是没得选择(比方12306)。否则用户无法忍受一个响应缓慢的站点。
一个打开缓慢的站点会导致严重的用户流失,非常多时候站点性能问题是站点架构升级优化的触发器。能够说性能是站点架构设计的一个重要方面。不论什么软件架构设计方案都必须考虑可能会带来的性能问题。
也正是由于性能问题差点儿无处不在,所以优化站点性能的手段也非常多。从用户浏览器到数据库。影响用户请求的全部环节都能够进行性能优化。
在浏览器端,能够通过浏览器缓存、使用页面压缩、合理分布页面、降低Cookie传输等改善性能。
还能够使用CDN,将站点静态内容分发至离用户近期的网络服务商机房,使用户通过最短訪问路径获取数据。
能够在站点机房部署反向代理server。缓存热点文件。加快请求响应速度。减轻应用server负载压力。
(Nigix)
在应用server端,能够使用server本地缓存和分布式缓存,通过缓存在内存中的热点数据处理用户请求,加快请求处理过程。减轻数据库负载压力。
(Redis, Memecache, JBoss Cache, Ehcache)
也能够通过异步操作将用户请求发送至消息队列等待兴许任务处理,而当前请求直接返回给用户。
(RabbitMq, Kafka)
在站点有非常多用户高并发请求的情况下,能够将多台应用server组成一个集群共同对外服务,提高总体处理能力。改善性能。
在代码层面,也能够通过使用多线程、改善内存管理等手段优化性能。
在数据库server端。索引、缓存、SQL优化等性能优化手段都已经比較成熟。而方兴未艾的NoSQL数据库通过优化数据模型、存储结构、伸缩特性等手段在性能方面的优势也日趋明显。(MongoDB, HBase)
衡量站点性能有一系列指标,重要的有响应时间、TPS、系统性能计数器等,通过測试这些指标以确定系统设计是否达到目标。这些指标也是站点监控的重要參数,通过监控这些指标能够分析系统瓶颈,预測站点容量。并对异常指标进行报警。保障系统可用性。
对于站点而言,性能符合预期不过必要条件,由于无法预知站点可能会面临的訪问压力,所以必需要考察系统在高并发訪问情况下,超出负债设计能力的情况下可能会出现的性能问题。站点需要长时间持续执行,还必须保证系统在持久执行且訪问压力不均匀的情况下保持稳定的性能特性。
性能測试指标
- 响应时间
- 并发数
- 吞吐量
- 性能计数器
性能測试方法
性能測试是一个不断对系统添加訪问压力,以获得系统性能指标、最大负载能力、最大压力承受能力的过程。
性能測试方法:
- 性能測试: 以系统设计初期规划的性能指标为预期目标,对系统不断施加压力。验证系统在资源可接受范围内,能否达到性能预期。
- 负载測试
对系统不断地添加并发请求以添加系统压力,知道系统的某项或多项性能指标达到安全临界值。如某种资源已经呈饱和状态,这是继续对系统施加压力,系统的处理能力不但不提高,反而会下降。 - 压力測试 超过安全负载的情况下。对系统继续施加压力,知道系统崩溃或不能再处理请求,一次获得系统最大压力承受能力。
- 稳定性測试
被測试系统在特定硬件、软件、网络环境条件下。给系统载入一定业务压力,使系统执行一段较长时间,以此检測系统是否稳定。在不同生成环境、不同一时候间点的请求压力是不均匀的,呈波浪特性。因此为了更好地模拟生产环境,稳定性測试也不应均与地对系统施加压力。
性能优化
依据站点分层架构,性能优化可分为:web前端性能优化、应用server性能优化、存储server性能优化。
- web前端性能优化
- 浏览器訪问优化:降低http请求;使用浏览器缓存;启用压缩;css放在页面最上面、javaScript放在页面最以下;降低Cookie传输
- CDN加速
- 反向代理
- 应用server性能优化
- 分布式缓存(Redis等)
- 异步操作(消息队列)
- 使用集群(负载均衡)
- 代码优化
- 存储性能优化
- 机械硬盘vs固态硬盘
- B+树 vs LSM树
- RAID vs HDFS
代码优化
- 多线程(Q:怎么确保线程安全?无锁机制有哪些?)
- 资源复用(单例模式,连接池,线程池)
- 数据结构
- 垃圾回收多线程三大定律
1. Amdahl 定律
–Gene Amdahl 发如今计算机体系架构设计过程中。某个部件的优化对整个架构的优化和改善是有上限的。这个发现后来成为知名的Amdahl 定律。
比方:即使你有10个老婆。也不能一个月把孩子生下来。
2. Gustafson 定律
–Gustafson如果随着处理器个数的添加,并行与串行的计算总量也是能够添加的。Gustafson定律觉得加速系数差点儿跟处理器个数成正比,如果现实情况符合Gustafson定律的如果前提的话,那么软件的性能将能够随着处理个数的添加而添加。
比方:当你有10个老婆。就会要生很多其它的孩子。
3. Sun-Ni 定律
–充分利用存储空间等计算资源,尽量增大问题规模以产生更好/更精确的解。
比方:你要设法让每一个老婆都在干活,别让她们闲着。