持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
1 前言
如今分布式的系统已经是主流的模式,其功能界定清晰,方便小步快跑、快速迭代试错、团队分工明确的特点,在项目开发和业务迭代的过程中就回西安了性能优化的概念。那么,何谓性能优化呢,就是在限定资源和时间的情况下,可以达到的最高效果。
2 性能优化指标
通常情况下,系统性能优化的衡量指标如下图所示:
2.1 性能指标
性能指标可以用吞吐量和响应速度来进行量化,在日常开发中的 QPS(每秒查询量)、TPS(每秒事务数量)和 HPS(每秒 http 请求量)都是吞吐量的范畴。响应速度,顾名思义就是指的是从发起请求到返回数据的时间差,
2.2 响应时间
响应时间的考量主要包含两个部分,一个是平均响应时间和概率统计的百分位数。平均响应时间很好理解,就是所有请求的平均响应时间。百分位数比如 TP90,TP95,TP99,分别表示 90%,95%,99%的请求响应时间在多少秒之内,这个值反映的是整体数据请求情况。百分位数的值要求越高,那系统响应稳定性的要求就越高。
2.3 并发量
并发量指的是系统能够同时处理的请求量,反映的是系统的负载能力。在高并发系统进行优化时,通常对系统进行并发量方式都是多式多样的,目的都是为了提高系统的处理能力。
2.4 正确性
在系统的运行过程中,不论使用何种优化手段,都必须保证数据交互结果的正确性,不能出现优化前数据正确,优化后数据不正确,性能比较之前也不能有所降低。
2.5 秒开率
秒开率的指标主要是针对前端网页或者移动端 APP 来说的,用户在进行系统操作时,打开首页的速度还是比较影响用户体验的,用户在1秒中打开系统首页和在3秒中打开首页的感觉是不一样的。所以系统的性能优化不仅仅是涉及后端代码,而且涉及到前端的代码。
3 性能优化理论
3.1 木桶理论
木桶效应在系统解释系统性能上非常合适,组成系统的组件,其性能是良莠不齐的,系统的整体性能取决于最慢的组件。在数据库应用中,制约性能最严重的是落盘,也就是说磁盘IO 才是系统的短板,系统的首要问题就是补齐这个短板。
3.2 基准测试预热
基准测试 Benchmark 并不是简单的性能测试,是用来测试某个程序的最佳性能。应用接口往往在启动完成之后都有短暂的超时,在测试之前,我们需要对应用进行预热,消除 jit 编译器等因素的影响。在 java 里面有一个 jmh 组件就可以消除这些差异。
4 性能优化注意事项
- 1 在做性能优化时,要依据数字而不是靠猜想。
- 2 不能以偏概全,局部不能说明整体,但是特殊的场景要考虑到位
- 3 系统不能过早的开始优化,而是要在系统业务稳定之后
- 4 在系统的开发过程中需要保持良好的编码习惯
- 5 系统在设计之初要考虑好架构,为以后的扩展打下基础。
5 总结
关于性能优化,是一个很值得讨论的话题,也能显示出个人的理论和实践经验,这里仅列举一下八股文的内容,在后续的文章中,将会针对某些特定的内容分享自己的一些看法。