浅谈常态化压测 | 京东物流技术团队
一、常态化压测介绍
1.什么是常态化压测
常态是指:“正常的状态”;“化”在这里是表示转变为某种性质或状态。
“常态化”的含义就是:趋向正常的状态。
那么常态化压测顾名思义就可以解释为,让压测趋于正常的状态,趋于合理;因此通过调研给了如下定义:常态化压测是指在某个产品或系统上进行自定义周期(常态化)的、系统自动执行的、可验证结果的压测过程。目的是检测产品或系统的稳定性、可靠性和性能,确保它们能够在不同的场景下正常运行。
2.为什么要进行常态化压测
随着业务的不断增长,支撑业务系统的压力也逐渐增加,会面临如系统越来越厚重、逻辑越来复杂、迭代节奏越来越快等繁杂的情况。我们当前并没有做到在每次变化时快速识别出性能风险,检测产品或系统的稳定性、可靠性,而且我们还在不断的投入人力成本在压测这件事情上也是不合理的,所以我们要将性能验证融入到我们日常的工作中,把压测做到常态化,做成平常的一件事。
3.常态化压测的价值
- 快进快出,最小单位安排压测任务,减少人员投入
- 尽早识别性能波动,避免风险后置
- 可复用性高,压测模型、业务模型可复用
- 业务可用性保障
二、常态化压测实践
1.常态化压测流程介绍
借助泰山平台中的Forcebot工具,进行常态化压测执行。设置常态化压测任务,配置压测执行计划,按照预设的数据模型、基线值等进行执行。在累积一段时间的压测结果后,可以对基线值、压测目标进行调整和调优,然后继续进行自动化周期性的压测。同时跟进结果,及时关注最近业务和系统的变化。
- 明确压测目标
明确常态化压测的目标,可以区分日常和极限两个场景。根据不同的场景设置不同的压测目标,第一次实践以单接口的日常流量为主,观测日常流量下的性能波动,确定正常范围值。
- 常态化计划
根据接口的优先级,接口服务的流量,日常迭代代码改动的频率,设置对应的计划。核心接口、流量较大、代码改动频繁的接口,常态化压测的周期建议短一些,可以一周1-2次,且放在每次上线后进行;如果是非核心、流量小的接口,可以每周或每双周进行一次。
- 压测前期准备
确定测试场景根据实际场景,设计压测场景,包括用户数量、请求类型、请求频率、请求参数等,以尽可能模拟真实的业务场景。编写压测脚本,设置按照真实请求数据比例设置参数化,以便于进行自动化测试。
- 压测中期关注
在压测过程中,主要是无人值守的状态,所以需要提前识别压测可能带来的风险,以及面对不同的风险需要采取的措施。
同时还要关注压测过程中如果出现性能波动,系统发出的预警方式是否及时、预警内容是否准确。
- 压测后期跟进
每次常态化压测计划执行后,都需要关注本次的结果:① 结果符合预期,则要关注下指标的波动; ② 若结果并不符合预期,则要刨根问底,找到问题的所在; ③ 跟进问题直到解决,解决后重新验证。
- 辅助功能-流量染色
流量染色指根据流量协议,设置对应的流量染色规则,对指定的流量进行染色标记,并在整个调用链中携带该标记。
通过流量染色,可以实现压测流量隔离,同时可以保证日常压测对生产流量无影响。但是对于常态化压测来讲,流量染色并非必须,而是锦上添花的功能,可以进一步保证我们的流量对生产无影响。
2.首次进行常态化压测实践
2.1 准备阶段
① 获取基线值数据
② 压测脚本、场景、数据模型准备
③ 压测环境准备
④ 压测计划制定
2.2 执行阶段
2.3 调优阶段
以7-10天为一个周期,记录数据。不考虑特殊节日、特殊活动的场景,验证基线数据的可信赖性。如发现高于30%的概率,每天的数据都不符合基线值,可调整基线值的浮动范围,以保结证结果在日常值的范围内。
调优的过程也要关注,在数据统计过程中代码的改动,如果确定是代码的改动影响了整体的性能,这就要根据实际的场景和影响范围进行评估。
2.4 复盘阶段
经过一段时间的常态化压测,需要对整个流程和结果进行复盘,好的复盘结果能够帮助我们避免后续的一些“坑”。参与常态化压测的所有人员一起,主要关注一下几个方面:
① 数据是否正确,是否达标,是否可信赖
② 常态化压测流程、计划相关问题
③ 压测过程中的性能问题总结
三、常态化压测总结
① 建议覆盖场景 可以根据自己所负责的业务进行考量,如果不会出现很大流量的情况下,建议覆盖日常场景即可满足需求;如果需要考虑大流量并发的场景,建议覆盖日常的基础上,在覆盖极限的场景。
② 关注风险控制 常态化压测要做到的是模拟生产真实场景,实现日常自动化压测,尽量做到无人值守,所以提前识别出可能的风险是非常必要的,同时要列出不同的风险项对应的举措。
③ 常态化压测只是辅助验证业务性能的一种手段 不是说我们进行常态化压测之后就不需要进行性能测试了,两者之间是没有冲突的。
寄语:每个人负责的工作是不同的,不同人会有不同诉求,对同一件事也会有不同看法,不过苏轼有句话:“犯其至难而图其至远”,意思是说“向最难之处攻坚,追求最远大的目标”。只希望我们能在工作中克服各种困难,去实现最长远的、可持续的目标。
作者:京东物流 冯海艳
来源:京东云开发者社区 自猿其说Tech

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
如何构建高效、可观的系统「GitHub 热点速览」
经典老项目 system-design 教你如何设计一个健壮的系统,新项目 noodle 教你如何提升教育效率,而后者甚至单日获得了 1,600 star,刚开源就获得了 6k+ 的 star。 除了,新老项目的交锋,还有一些能帮上忙的周边工具,比如用来享受游戏编程的 raylib,搞定游戏系统妥妥的;清理的内存的 memreduct,则让你放心使用 Windows 系统。 不想搬砖,又得实现需求?也许 MetaGPT 能帮上忙,内置多种工种,随时 cosplay 所需工种。 以下内容摘录自微博@HelloGitHub 的 GitHub Trending 及 Hacker News 热帖(简称 HN 热帖),选项标准:新发布 | 实用 | 有趣,根据项目 release 时间分类,发布时间不超过 14 day 的项目会标注 New,无该标志则说明项目 release 超过半月。由于本文篇幅有限,还有部分项目未能在本文展示,望周知 🌝 本文目录 1. 本周特推 1.1 实时内存管理:memreduct 1.2 游戏编程库:raylib 2. GitHub Trending 周榜 2.1...
- 下一篇
MySQL之InnoDB存储结构 | 京东物流技术团队
1 InnoDB存储引擎 InnoDB存储引擎最早由Innobase Oy公司开发(属第三方存储引擎)。从MySQL 5.5版本开始作为表的默认存储引擎。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,非常适合OLTP场景的应用使用。目前也是应用最广泛的存储引擎。 InnoDB存储引擎架构包含内存结构和磁盘结构两大部分,总体架构图如下: 8.0版本: 5.5版本: 2 InnoDB 存储结构 2.1 磁盘结构 2.1.1 表空间 Tablespaces InnoDB存储引擎的逻辑存储结构是将所有的数据都被逻辑地放在了一个空间中,这个空间中的文件就是实际存在的物理文件(.ibd文件),即表空间。默认情况下,一个数据库表占用一个表空间,表空间可以看做是InnoDB存储引擎逻辑结构的最高层,所以的数据都存放在表空间中,例如:表对应的数据、索引、insert buffer bitmap undo信息、insert buffer 索引页、double write buffer files 等都是放在共享表空间中的。 表空间分...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8