性能压测
性能压测是通过模拟大量并发用户访问系统,测试系统在高负载情况下的性能和稳定性。通过性能压测可以发现系统的性能瓶颈,评估系统的承载能力,并提前发现系统的性能问题和潜在风险,并为系统的容量规划和性能优化提供参考。其实施方案主要包括:
确定测试目标和负载模型:首先需要明确测试的目标和负载模型,包括确定测试的场景、负载类型、负载量和测试时间等。
配置测试环境:为进行性能压测,需要先搭建测试环境,包括硬件设备、网络环境和测试工具等。包括开源和云上平台已有的比如PTS等
制定测试计划和测试脚本:为确保测试的可重复性和准确性,需要制定详细的测试计划和测试脚本,包括测试场景、测试数据和测试结果的分析方法等。
进行测试和数据分析:执行测试脚本并记录测试结果,包括对系统的响应时间、吞吐量、并发用户数、CPU和内存使用率等指标进行监测和记录,然后对测试数据进行分析和评估,确定系统的性能瓶颈和优化方案。
性能优化和再次测试:根据测试结果进行性能优化,包括对系统的硬件设备、网络环境和应用程序等进行优化,然后再次进行性能测试,以确认性能是否得到改善。
性能压测包括单点和全链路在内的检查测试。通过性能压测,可以在业务系统上线前发现潜在的性能问题,并为系统的容量规划和性能优化提供参考。
目前主流的几种性能压测工具,包括阿里云PTS、Apache JMeter、ApacheBench(ab)、wrk等,其对比项结果参考如下。
对比项 | 阿里云PTS | Apache JMeter | ApacheBench | wrk | |
成本 | 学习成本 | 低 | 中 | 低 | 低 |
部署、运维成本 | SaaS服务,免部署 | 单机部署成本低、分布式部署成本高 | 低 | 低 | |
是否收费 | 是 | 开源、免费 | 开源、免费 | 开源、免费 | |
分布式能力 | 是否支持分布式施压 | 是 | 是,但部署、运维成本高 | 否 | 否 |
压测引擎能力 | 单机性能 、稳定性 | 自研引擎,高 | 低 | 中 | 高 |
是否支持多协议 | 支持 | 支持 | 不支持 | 不支持 | |
施压量级 | 高,最大百万并发、千万TPS | 低 | 低 | 低 | |
压测场景构造 | 是否支持客户端录制流量 | 支持,支持Chrome/iOS/Android录制器 | 不支持 | 不支持 | 不支持 |
是否支持流程编排 | 支持,无需编码 | 支持 | 不支持 | 不支持 | |
是否支持出参提取、断言、逻辑控制器等 | 支持 | 支持 | 不支持 | 不支持 | |
压测数据构造 | 是否支持文件数据源 | 支持 | 支持 | 不支持 | 不支持 |
是否支持从DB中读取数据作为压测数据源 | 支持 | 不支持 ,需自己实现 | 不支持 | 不支持 | |
是否支持使用函数生成或者二次加工压测数据 | 支持 | 支持 | 不支持 | 不支持 | |
压测模型构造 | 是否支持并发模型 | 支持 | 支持 | 支持 | 支持 |
是否支持吞吐量模型 | 支持 | 不支持 | 支持 | 支持 | |
是否支持流量漏斗模型 | 支持 | 不支持 | 不支持 | 不支持 | |
是否支持自动递增、阶梯递增等流量模型 | 支持 | 支持 | 不支持 | 不支持 | |
压测流量构造 | 是否支持多地域流量定制 | 支持 | 不支持,依赖自己部署 | 不支持,依赖自己部署 | 不支持,依赖自己部署 |
是否支持IPv6流量 | 支持 | 不支持,依赖自己部署 | 不支持,依赖自己部署 | 不支持,依赖自己部署 | |
压测流量控制 | 是否支持压测过程中手动调速 | 支持 | 不支持 | 不支持 | 不支持 |
是否支持施压过程中动态扩展最大压力、施压机引擎 | 支持 | 不支持 | 不支持 | 不支持 | |
压测数据可视化 | 是否支持压测过程中多维度实时指标监控 | 实时秒级数据、多维度分析 | 支持,但分析维度有限 | 不支持 | 不支持 |
是否支持压测报告 | 支持完整压测报告 | 支持,报告较简单 | 支持,报告较简单 | 支持,报告较简单 | |
是否支持关联被压系统监控数据 | 支持,可关联阿里云云监控数据 | 不支持 | 不支持 | 不支持 | |
是否支持性能基线能力 | 支持 | 不支持 | 不支持 | 不支持 |
具体可以参考高效性能支柱中相关的内容。