《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(下)

简介: 《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(下)

《云上大型赛事保障白皮书》——第三章 压测调优与技术演练——3.1 云上大型赛事压测调优——3.1.2 云上大型赛事压力测试方法论(上): https://developer.aliyun.com/article/1226645?groupCode=supportservice


3.1.2.3 设计压测方案


阿里云PTS产品团队总结的压测方案设计原则,要做到五个一样:一样的线上环境,一样的用户规模,一样的业务场景,一样的业务量级,一样的流量来源。

对于大型赛事而言,由于赛程是固定的,所以环境准备这部分其实比较容易解决,因为一定是要在生产环境上线之前进行压测,这时还没有真实用户,但环境已经搭建完毕,此时即为压测的最佳时段。但如果是已经线上运转的生产环境,那么设计压测方案时要做一个取舍,生产环境和测试环境的压测方案各有其优缺点:针对生产环境压测,其衡量的精准度较高,参考效果更好,但是会有一些额外的成本,首先需要对相关的测试数据进行处理,包括压测时如何插入测试数据不会影响生产,以及压测结束后脏数据的清理,同时,也要谨慎考虑压测流量对生产环境造成的影响,要尽量挑选在低峰期进行。针对单独的测试环境压测,其难点在环境的构建上,规模和生产一致的成本也是最高的,所以一般而言为等比构建(生产环境的1/2,1/4,1/8等),甚至是生产环境中部分应用独立部署测试集群,数据库共用的方式,此外测试环境需要从生产环境中导入脱敏的基础数据,例如至少是最近半年或者1年的,保持其整体的数据关联性,这个对于压测的准确度和参考性也很重要。

如何准确模拟用户规模、业务场景、业务量级、流量来源是一个比较大的课题。从工具层面来讲,一般是通过专用压测工具如jmeter或直接购买压测服务来进行模拟。使用jmeter等压测工具,需要针对业务场景有针对性的进行分布式部署,可部署在三方的专用压测机云环境,但需要自行编写压测机压测脚本,对技术水平的要求比较高,因为压测准确性很大程度上取决于脚本是否能完美模拟用户请求场景。当然也可以使用专有的云上压测服务,阿里云有一个SaaS化的性能测试分布式云化压测服务PTS(Performance Test Service),其压力发起来源是遍布全国上百个城市和各运营商的CDN节点,可分布式的模拟海量用户的真实业务场景,可以作为压测方案一个轻量快速的选项。

要写出能准确模拟真实场景的压测脚本,需要深刻的了解系统的业务模型,系统有很多业务,每种业务逻辑和业务量是不一样的,系统的基础数据、系统预热情况等代表系统的状态。链路范围、链路的访问量级、链路的参数集合、基础数据、预热情况一起构成了压测的业务模型。需要编写者非常了解在真实场景下,各个业务种类的请求模型,及对应的业务占比,以进行不同的容量整体配比,精准地将流量落地。保证压测结果可靠性的几个关键点在:业务逻辑改动要仿真业务场景,QPS配比要仿真业务场景,入参满足业务仿真的需求,影子数据满足业务仿真的需求。

同时,压测方案中要包括需要监控的指标,包括压测机资源指标、业务指标、服务端资源指标等。如果是对生产环境压测,也要设计对应的紧急问题的应急预案,如数据回滚、数据清理等。

监控指标应包含以下内容:

客户端和服务端操作系统:CPU利用率、内存利用率、磁盘I/O、网络I/O、内核参数等。

中间件:nginx返回码、JDBC连接池、SLB超限指标等。

数据库:慢SQL、锁、缓存、会话、进程数等。

应用侧:请求响应时间、请求超时率、请求成功率、QPS等。


3.1.2.4 配置压测环境


在预上线环境进行压测,需要注意的是测试数据的准备要和真实用户场景数据一致,可使用生产数据例如人员ID、生产账号账密、生产日期、生产位置等真实数据进行压测,但要注意数据清理和功能回归。

在生产环境进行压测,最核心的是线上写操作不能污染正常的业务数据。因此,需要针对存储做影子库表,即正常业务库表的镜像,让压测流量的数据流转到影子库表,正常业务流量流转到正常业务库表,在逻辑上隔离两种流量,使之互不影响。

另外一个关键点是配置完善的监控,没有完善的系统监控,将会导致性能分析无从下手。


3.1.2.5 实施压测计划


在真正实施压测时,要按照阶梯加压的原则进行,首先从小流量压力开始,按照合理阈值逐段增压,同时关注各监控指标数据,在开始性能恶化时即为系统原始性能基线数据与容量,以此为优化初值。

观察监控指标除了留意异常告警外,还应留意:

应用侧指标是否正常,业务成功率是否满足预期,请求响应时间是否有恶化。

中间件流量是否有毛刺和异常下跌情况,是否有超限丢包、连接池打满、返回码大量报错等现象,上下游流量是否对齐,即在相同的时间段到达流量峰值。

客户端和服务端是否有性能超限情况,例如CPU打高、IO打满等。

数据库是否有大量慢SQL产生,RT偏高、连接池满等现象。

也要留意压测场景目标是否都达到,是否需要再补充压测场景。


3.1.2.6 解决压测问题


压测时一定会遇到具体的问题,这部分属于如何进行系统调优,将在下一小节讨论。

以上即为压测通用方法论,无论压测的形式如何更改,其本质皆为这六大核心要点,流程图如下。

image.png

图:压测流程图

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
1天前
|
安全 IDE Java
Java串口通信技术探究2:RXTX库单例测试及应用
Java串口通信技术探究2:RXTX库单例测试及应用
15 4
|
3天前
|
数据采集 机器学习/深度学习 人工智能
自动化测试中AI辅助技术的应用与挑战
【4月更文挑战第30天】随着人工智能(AI)技术的飞速发展,其在软件自动化测试领域的应用日益增多。本文探讨了AI辅助技术在自动化测试中的应用情况,包括智能化测试用例生成、测试执行监控、缺陷预测及测试结果分析等方面。同时,文章还分析了在融合AI技术时所面临的挑战,如数据质量要求、模型的透明度与解释性问题以及技术整合成本等,并提出了相应的解决策略。
|
3天前
|
JavaScript 前端开发 安全
【TypeScript技术专栏】TypeScript与Cypress端到端测试
【4月更文挑战第30天】随着前端开发复杂度提升,测试成为关键环节,Cypress因其强大的端到端测试和与TypeScript的集成备受青睐。TypeScript增强了代码的可读性和维护性,确保测试准确性和可靠性。在Cypress中,TypeScript用于定义测试变量、自定义命令和断言,提高测试代码质量。Cypress的优势包括模拟真实用户操作、时间旅行功能和强大的调试工具,能有效提升测试效率和准确性。结合两者,前端开发者能实现高效、全面的端到端测试。
|
3天前
|
JavaScript 安全 编译器
【TypeScript 技术专栏】TypeScript 与 Jest 测试框架
【4月更文挑战第30天】本文探讨了TypeScript与Jest测试框架的结合在确保代码质量和稳定性上的重要性。Jest以其易用性、内置断言库、快照测试和代码覆盖率分析等特点,为TypeScript提供全面的测试支持。两者结合能实现类型安全的测试,提高开发效率,并涵盖各种测试场景,包括异步操作。通过实际案例分析,展示了如何有效利用这两个工具提升测试质量和开发效率,为项目成功奠定基础。
|
3天前
|
监控 JavaScript 前端开发
【TypeScript技术专栏】TypeScript的单元测试与集成测试
【4月更文挑战第30天】本文讨论了在TypeScript项目中实施单元测试和集成测试的重要性。单元测试专注于验证单个函数、类或模块的行为,而集成测试关注不同组件的协作。选用合适的测试框架(如Jest、Mocha),配置测试环境,编写测试用例,并利用模拟和存根进行隔离是关键。集成测试则涉及组件间的交互,需定义测试范围,设置测试数据并解决可能出现的集成问题。将这些测试整合到CI/CD流程中,能确保代码质量和快速响应变化。
|
3天前
|
缓存 监控 前端开发
【Flutter前端技术开发专栏】Flutter应用的性能调优与测试
【4月更文挑战第30天】本文探讨了Flutter应用的性能调优策略和测试方法。性能调优对提升用户体验、降低能耗和增强稳定性至关重要。优化布局(避免复杂嵌套,使用`const`构造函数)、管理内存、优化动画、实现懒加载和按需加载,以及利用Flutter的性能工具(如DevTools)都是有效的调优手段。性能测试包括基准测试、性能分析、压力测试和电池效率测试。文中还以ListView为例,展示了如何实践这些优化技巧。持续的性能调优是提升Flutter应用质量的关键。
【Flutter前端技术开发专栏】Flutter应用的性能调优与测试
|
3天前
|
前端开发 测试技术 持续交付
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
【4月更文挑战第30天】本文探讨了 Flutter 应用中UI测试和自动化测试的重要性,包括保障质量、提高效率和增强开发信心。Flutter提供`flutter_test`库进行Widget测试,以及`flutter_driver`进行集成测试。UI测试涵盖界面布局、交互和状态变化的验证,最佳实践建议尽早引入测试、保持用例简洁,并结合手动测试。未来,随着Flutter技术发展,UI测试和自动化测试将更加完善,助力开发高质量应用。
【Flutter 前端技术开发专栏】Flutter 中的 UI 测试与自动化测试
|
4天前
|
机器学习/深度学习 人工智能 算法
深入分析自动化测试中AI驱动的测试用例生成技术
【4月更文挑战第29天】随着人工智能技术的不断发展,其在软件测试领域的应用也越来越广泛。本文主要探讨了AI驱动的测试用例生成技术在自动化测试中的应用,以及其对提高测试效率和质量的影响。通过对现有技术的深入分析和实例演示,我们展示了AI如何通过学习和理解软件行为来自动生成有效的测试用例,从而减少人工编写测试用例的工作量,提高测试覆盖率,降低错误检测的成本。
|
5天前
|
资源调度 监控 JavaScript
AngularJS的测试:使用Jasmine和Karma进行测试的技术探索
【4月更文挑战第28天】本文介绍了在AngularJS项目中使用Jasmine和Karma进行测试的方法。Jasmine是BDD风格的JavaScript测试框架,提供清晰的测试用例,而Karma是测试运行器,负责在不同环境运行测试并生成报告。要使用它们,需安装两者,配置Karma,编写Jasmine测试用例,然后运行Karma执行测试。遵循最佳实践,如编写有意义的测试用例、模块化、覆盖率分析和自动化测试,能提升代码质量和稳定性。
|
8天前
|
测试技术 数据库 UED
【白盒测试】单元测试的理论基础及用例设计技术(6种)详解
【白盒测试】单元测试的理论基础及用例设计技术(6种)详解
11 1

热门文章

最新文章