论性能测试及其应用 原文

返回主题详情 背诵模式

原文文件:论性能测试及其应用-线上商品交易与运营平台.md

# 论性能测试及其应用

## 摘要

2024 年 3 月,我参与了某互联网公司线上商品交易与运营平台的建设工作。该平台围绕公司线上交易业务的统一运营需要,实现了商品交易、库存协同和经营分析等工作的集中支撑。在该项目中,我担任系统架构设计师,主要负责总体架构设计、关键技术选型、模块划分、接口规范制定和核心方案评审工作。本文以该系统为例,主要论述性能测试及其应用在项目中的具体实践。结合本项目活动高峰明显、交易链路集中和上线稳定性要求较高等特点,我们主要采用了基准性能测试、压力测试和可靠性测试。实践证明,上述测试工作帮助项目组提前发现系统瓶颈,验证核心交易链路的承载能力,提高了平台上线运行的稳定性。

## 正文

随着公司线上经营规模不断扩大,业务活动从单一的商品展示和订单处理,逐步延伸到活动运营、库存协同、售后服务和经营分析等多个环节,各项业务对信息系统连续、稳定支撑的要求也越来越高。该项目建设前,公司线上交易业务主要依靠原有单体系统和若干后台工具支撑,虽然能够满足早期业务需要,但随着活动数量、用户访问量和订单处理量持续增加,原系统在业务协同和运行效率方面逐渐难以适应发展要求。特别是在活动高峰期,交易请求集中到达,订单生成、支付确认、库存处理和状态查询等环节相互依赖,容易出现响应延迟和状态反馈不及时的情况。为了提高线上交易处理效率,规范商品和订单管理流程,降低后续系统维护成本,公司决定建设统一的线上商品交易与运营平台。

本项目于 2024 年 3 月启动,历时 10 个月完成核心功能建设并上线运行,项目组共 21 人。系统采用前后端分离方式建设,服务端以 Java 技术体系为主,并结合网关、缓存、数据库、消息队列和定时任务等技术组件完成系统支撑。我在项目中担任系统架构设计师,主要负责总体架构设计、关键技术选型、模块划分、接口规范制定和核心方案评审,历时 4 个月完成主要架构设计工作。在架构设计和上线准备过程中,性能测试是我重点组织和推进的工作之一。

在架构设计工作开始阶段,我认识到,性能测试及其应用是进行系统建设和上线评估时需要重点考虑的内容。性能测试是通过自动化测试工具模拟正常、峰值和异常负载条件,对系统各项性能指标进行测试的活动,主要用于评价系统在不同负载下的响应能力和资源消耗情况。常见的性能指标包括响应时间、吞吐量、并发连接数、资源利用率和错误率等,常见的 Web 系统性能评测方法包括基准性能测试、负载测试、压力测试和可靠性测试等。本项目主要采用了基准性能测试、压力测试和可靠性测试。其中,基准性能测试用于建立核心业务链路在正常负载下的性能基线;压力测试用于观察系统在高负载下的瓶颈和极限;可靠性测试用于验证系统较长时间运行时性能是否稳定。以下正文将重点描述这些措施的实施过程和应用效果。

在上线前的性能基线建立阶段,我们采用基准性能测试来评价系统在正常业务压力下的响应时间和吞吐量。该平台的访问压力并不是平均分布的,活动开始前后,用户浏览商品、查询活动、提交订单和查询订单状态等操作会集中出现。如果只凭开发环境中的单接口响应结果判断性能,难以反映真实业务场景下网关、服务、缓存和数据库之间的综合压力。为解决这一问题,我组织项目组使用 JMeter 设计典型业务测试模型,将商品浏览、活动查询、下单支付和订单查询等操作按接近生产的比例组合起来。具体执行时,测试请求统一经过 Spring Cloud Gateway 进入系统,业务处理过程中重点观察 Redis 缓存命中、MySQL 查询响应、RocketMQ 消息处理和应用实例资源使用情况。以活动开始后的用户下单场景为例,测试脚本会模拟用户进入活动页、查看商品详情并提交订单。通过基准性能测试,我们掌握了核心链路在正常负载下的响应时间和吞吐量,也发现商品详情查询和订单状态查询是较容易形成压力的环节。

在核心链路优化阶段,我们采用压力测试来定位系统极限和主要性能瓶颈。基准性能测试通过并不代表系统在突发流量下没有风险,如果活动推广效果超过预期,系统中的薄弱环节就会放大成整体响应变慢。为解决这一问题,项目组在接近生产的测试环境中逐步提高并发用户数和请求频率,持续记录接口响应时间、吞吐量、错误率、CPU 使用率、数据库连接数、慢 SQL、缓存命中率和消息队列堆积情况,并通过 SkyWalking 辅助定位调用耗时。测试过程中,我们发现热门商品查询在高并发下容易穿透到数据库,订单提交环节也会受到库存校验和幂等处理的影响。针对这些问题,项目组将热点商品信息和活动库存写入 Redis,减少高频查询对 MySQL 的压力;对订单提交入口增加限流和重复提交控制。以用户集中参与限时活动为例,当响应时间开始明显上升时,项目组能够根据监控数据判断瓶颈主要出现在查询、缓存还是应用实例资源上。经过多轮测试和调整,核心交易链路在峰值场景下的响应能力明显改善。

在上线前验证和上线后观察阶段,我们采用可靠性测试来评价系统较长时间运行时的性能稳定性和故障隐患。线上交易平台不仅要在短时间内承受高峰流量,还要在日常运营中持续处理订单、支付回调、库存释放、消息通知和对账任务。如果只关注短时并发结果,可能无法发现连接未及时释放、消息消费延迟和定时任务堆积等问题。为解决这一问题,我们在预生产环境中连续运行核心业务场景,让测试脚本按照正常业务节奏持续产生浏览、下单、支付、取消订单和后台查询等操作,同时观察应用实例、MySQL、Redis、RocketMQ 和定时任务的资源曲线。以未支付订单超时关闭为例,系统会定期扫描待处理订单并释放占用库存,可靠性测试关注该流程是否按时完成,以及任务运行期间是否造成连接升高或消息积压。系统上线后,我们继续通过监控平台跟踪响应时间、错误率和资源利用率,并在每次活动结束后复盘性能数据。通过可靠性测试和持续观察,项目组及时处理了少量异常任务和慢查询问题,为平台平稳运行提供了依据。

整个项目于 2025 年 1 月完成核心功能上线,并在公司主要业务线推广使用。系统上线后,先后支撑了多次业务活动和交易高峰,整体运行情况较为平稳,核心业务流程能够正常开展,运营和客服人员也能够通过统一平台完成日常处理工作。实践证明,基准性能测试帮助我们建立了核心业务链路的性能基线,压力测试帮助我们发现并消除了关键瓶颈,可靠性测试则提高了项目组对系统持续运行风险的认识。经过一段时间运行,该平台基本满足了公司线上交易和运营管理的需要,提高了业务处理效率,并得到了业务部门的认可。

在总结项目经验的同时,我也看到本项目仍然存在一些不足。由于平台上线初期业务增长较快,部分热门商品页面和复杂查询接口在极端高峰下仍会出现响应时间波动;同时,早期性能测试场景主要围绕核心交易链路设计,对后台统计、运营报表和异常订单批处理等场景覆盖还不够充分。后续我们计划继续完善性能基线管理和自动化测试脚本,结合缓存优化、查询优化和资源扩容策略,提高系统对突发业务活动的适应能力。通过本项目实践,我认识到,性能测试不是上线前简单运行测试工具,而是需要结合业务场景、性能指标、系统架构和优化措施持续开展的工程活动。只有把性能测试结果真正用于架构调整和系统改进,才能使软件系统在业务增长过程中保持稳定可靠的运行状态。