架构设计系列文章,请参见连接。
背景
性能优化是技术治理的一部分,也是体现出技术人员真正价值的工作。从经验来看对于性能优化的认识与过程了解影响着系统的可持续发展的能力,正因如此性能优化就决定了系统是否可以有序的发展为一个优良的系统。在性能优化过程中对于系统中瓶颈的识别以及解决就成了性能优化的需求与目标。
性能优化会有几篇文章,分别说明性能优化的不同的内容,包括:环境定义,测试策略,测试过程,测试工具,优化办法。而对于性能优化来说整体步骤可以简单的划分为:$\color{red}{性能测试}$->$\color{red}{性能分析}$->$\color{red}{性能优化}$。
性能测试
性能优化过程中性能测试是发现问题的过程,是性能优化的先决条件。根据克努特优化原则:过早优化是万恶之源。在没有实际数据指导的情况下就开启优化过程是很不明智的过程,而且很容易方向跑偏。所以,必须在明确的数据作为支撑的情况下再开始进行性能优化过程。
虽然经常能够听到性能测试这个词,但是在这个词背后具体包含哪些内容,在未经过深入了解时也不可能一目了然的知道。这里就本着技术的深度决定着成就的高度的态度,重新挖掘一下性能测试的内容。
性能测试定义
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
性能测试分类
下面一段来自百度百科中《性能测试》。根据不同的测试目的,性能测试可以分为多种类型,常见的有如下几类:
- 负载测试(Load Testing):负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。
- 压力测试(Stress Testing):强度测试也就是压力测试,压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。
- 容量测试(Volume Testing):确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。
性能测试类型:
下面一段来自百度百科中《性能测试》。性能测试中包含以下测试类型:
- 基准测试:比较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能。
- 争用测试:核实测试对象对于多个主角对相同资源(数据记录、内存等)的请求的处理是否可以接受。
- 性能配置:核实在操作条件保持不变的情况下,测试对象在使用不同配置时其性能行为的可接受性。
- 负载测试:核实在保持配置不变的情况下,测试对象在不同操作条件(如不同用户数、事务数等)下性能行为的可接受性。
- 强度测试:核实测试对象性能行为在异常或极端条件(如资源减少或用户数过多)之下的可接受性。
- 容量测试:核实测试用户同时使用软件程序的最大数量。
- 性能评价:通常是和用户代表一起协作并且以多级方法执行的。
性能指标
《4.DevOps-4.度量指标--0.度量指标(Metrics)》中已经描述过指标体系的建立与使用过程,而针对性能来说指标几乎已经固定为几个特殊的指标。不过还是有很多性能指标可以为性能分析提供很多帮助,在度量指标中我们讨论过指标类型可以分为:
- Counter(计数器)
请求次数等
- Gauge(测量器)
瞬时内存占用情况,CPU使用情况等。
- Histogram(柱状图)
响应时间等。
- Meters(码表)
CPU Load数等。
- Timers(计时器)
请求执行时长等。
其他
- 测试内容
具像化测试内容,例如对于区块链交易频次测试,那肯定是对整个区块链系统中数据同步的过程进行测试。对IoT环境进行测试就要理清设备接入时使用的协议是那种,做通信的就要对于系统的整体交换速率作为系统性能表现。
- 环境定义
测试环境与被测环境的定义确定着要优化的范围。
性能分析
性能分析是针对性能测试结果数据或着性能测试过程数据进行分析已找到性能瓶颈的方法。在性能测试完成后不可分析就代表着不可以进行优化。故结果的可分析性至关重要。现在性能分析已经有了长足的进步,有很多现成的程序可以帮助进行性能分析的工作。而且还可以可视化的展示分析结果。不过有些时候仍然需要进行人工的分析工作。性能分析的主要目标是可视化。
在借助现阶段流行的《可观测性》的实现方式之后,性能分析过程可以分为两类:APM,事后分析类。APM可以得到运行期间的运行情况,而对性能测试结果进行分析可以得到整体用户直观感受。一般情况下会结合两种方式进行。
性能优化
针对性能分析的结果进行优化,不管是找到业务问题还是技术问题都需要在这里输出相关的解决方案。在技术上有一些通用的调优方案,例如:阿里PTS上描述的性能测试 PTS > 性能测试基础知识 > 测试分析及调优,有赞的一次假期故障引发的性能优化思考。
总结
本文最主要说明的内容是性能优化的步骤以及步骤中可能的内容,还有很多细节未明确出来。例如:通用性能指标体系TPCC、SPEC、SAP SD,性能分析过程中的分析方法,性能调优过程中的验证过程等,性能调优架构级别调优方法等等。这些都会在后面的文章中进行更详细的讨论。
参考
过早优化是万恶之源——克努特优化原则 (Knuth's optimization principle)
性能测试的概念
性能优化指南:性能优化的一般性原则与方法
常用性能测试指标解读与使用价值分析
一次假期故障引发的性能优化思考
【性能系列连载一】开篇:性能测试不可不知的“干货”
Web「性能测试」知多少?
性能分析
测试分析及调优