性能测试之性能优化篇
目录
为什么进行性能测试
系统上线必会经历测试阶段,功能测试我们可以按照产品的设计原型去执行一条条测试用例来覆盖产品功能点。但是在功能测试之外,如果一个用户接口层服务,我们还需要知道服务的性能指标以了解并评估这个服务在实际的生产环境中可以应对多大压力,我们可以根据这个数据情况根据不用的场景时间去对应的增加机器节点或进行重构系统。
性能测试的目的
我们进行性能测试的目的是想真实的了解服务的性能,这个测试可能是一个单机的压力测试,可能服务链路比较简单,单体服务就支撑了整个访问请求。也可以是一套全链路的性能压力测试,例如从用户到下单到购买一件商品,到底是哪个节点性能较差,其中可能涉及很长的一套分布式微服务架构。例如淘宝最先实施的全链路压测就是为了达到这样的目的,才有了后来历届双十一的平稳进行。
服务性能优化的思考
我们怎么才能增加服务的性能呢?增加服务器的数量就可以增大服务器的性能吗?作为一个架构师,我们该如何解释给老板让他同意我们的架构优化方案呢?性能好了用户体验就一定好吗? 用新的技术就一定能优化架构吗? …
其实关于事物都有很多方面,关于性能体现也一样。分为主观视角和客观视角。主观视角比如站在用户的角度,我们的服务性能已经到了极致了,也没有任何传输损耗,但是客户端在中国,服务端在美国,只是光速传播的速度30ms已经消耗了掉了,单纯这个链路方式我们已经没有任何优化手断了。如果这时候我们给用户返回一个友好的提示,这样用户体验就会很好了。再比如,我们从网站下载一个东西,如果只是单纯的一个正在下载中的提示,那么用户会各种心理去怀疑你的服务或是网络,但是我们给用户一个进度条,用户就可以很清楚的了解到当前的一个具体情况,用户的心理被得到了重视,用户体验感就会很好。那么站在客观角度去衡量一个软件,就是我们该关心的服务性能问题了,我们会有各种指标去跟踪链路的请求耗时长短,所以我们拿到这些指标数据才能去真正的去做一个系统的性能优化,是否可以去增加机器数量。综合以上两个因素,我们就可以拿到一份实在的报告去给老板说,我们的系统需要优化重构了。
衡量系统性能常用的指标
- 响应时间
- 并发数
- 吞吐量
这三者之间也是存在一定关系的,知道其中两者其实可以推算出第三个了。
系统性能计数器
但是当并发数超过一定限制之后,会无限制的占用系统资源,导致响应时间无限大,吞吐量为0。这时候系统就要崩溃了。这时候又有一个重要的指标,就是性能计数器。
- 性能计数器
linux系统我们通过top查看系统的性能资源使用情况,system load表示当前系统cpu的负载,其中我们可以查看 load avg看cpu的负载情况,它表示当前cpu中正在处理的线程数+等待处理的线程数。
图中三个值分别代表5分钟、10分钟、15分钟当前系统的load 均值,图中我的电脑为双核,这代表已经超负荷执行了。这个loda多大合理呢,理想情况下是系统cpu的核数;如大大于,说明过载了;如果过小,说明负载不足;
性能测试分类
性能测试是一个总称,具体细分可以分为性能测试,负载测试,压力测试和稳定性测试。
- 性能测试
- 负载测试
- 压力测试
- 稳定性测试
如何合理的规划我们的架构性能
响应时间和tps这两条曲线是对应的。
这是一个系统性能测试的运行情况,我们可以拿做参考,作为一个系统的架构师绝不能让你的系统一直在c点运行,一直在b点左右是最理想的情况,但是如果超过c点你的系统很可能就要崩溃了。那么到底是在b点上还是下呢,选择更安全还是更经济,这就取决你Trade-Off了。
最后拿数据说话
了解了性能测试的一些操作,我们可以得到系统优化前后的一些数据对比,这时候去和你的leader去汇报业绩或是要资源,一切就显得那么顺理成章了。我们可以向如上图一样根据数据绘制出优化前后的对比图,让你的工作更有分量。
压力测试指标。
性能优化前后数据对比。
这样的图我们可以用excel等等都能很简单的自动绘制。有了直观的证明,一切都不言而喻。
性能优化原则
我们优化一个系统的性能一切都需要根据原则。我觉得两点很重要,
- 一、你不拿优化一个没有经过测试的软件
- 二、你不能优化一个你不了解的软件
不能有了牛逼的技术就去想优化一个架构这是不正确的,一切都得根据实际情况来说,有了数据你才能去说好或是不好。
性能优化的方法
- 性能测试,获得性能指标
- 指标分析,发现性能与资源瓶颈点
- 架构与代码分析,寻找性能与资源瓶颈的关键所在
- 架构与代码优化,优化关键技术点,平衡资源利用
- 性能测试,进行性能优化闭环
性能优化的分层思想,所有的优化都会对系统性能产生影响
软件性能优化的三板斧,这些虽然很有用,但不能太依赖
-
缓存
缓存主要优化读操作。从内存获取数据,减少响应时间,减少数据库访问,降低存储设备负责压力,缓存结果对象,而不是原始数据,减少cpu计算等。 -
异步
使用异步可以做到即时响应,更好的用户体验,控制消费的速度,获得合适的负责压力,异步主要优化的就是写操作。
-集群
互联网技术的发展路径就是,更多的用户访问需要消耗更多的计算资源,单一的服务器计算资源是有极限的,所以需要增加更多的服务器。集群的目标只有一个,就是如何使用多台服务器对使用者而言看起来像一台服务器。
最后
最后,值得强调一点,软件的性能优化,我们不要一上来就想多线程、缓存等,这会限制我们的技术发展,很多时候软件性能不好,仅仅是因为你的代码太烂了。写清晰的代码,保证架构的整洁,这是很重要的。
本文地址:https://blog.csdn.net/weiyi_world/article/details/107515250
上一篇: TiDB 简介