谈谈压测方案的那点事 | 京东物流技术团队

京东云开发者
• 阅读 73

前言

在现阶段大促备战的压测不算是一件新鲜事,已经不存在什么技术瓶颈或者资源问题,每个团队都有很多人能够执行性能测试,在一些团队也已经落地了日常常态化,但压测也没有简单到只在压测平台上设置参数、运行脚本,然后去看压测报告中某个指标是否满足压测目标那么简单,我平时也跟一些同学一起做过性能测试,发现在压测过程中存在一些细节问题,有些同学做但不是很理解,压测方案对于性能测试来说是尤为重要一环,今天把对于压测方案方面的一些理解跟大家一起探讨一下;

性能测试的本质是模拟生产环境的用户,构造用户真实的行为请求,对尽量真实的压测系统施加压力,验证系统性能是否满足业务需要,是否存在性能瓶颈;

从里面可以看出核心的几个点:压测目标、压测场景、压测环境,今天主要从三大块来说

一、压测目标

我们在制定压测方案去说起压测目标的时候,很多同学都直接的考虑到TPS、QPS、TP99这些,

忽略了很重要的一项内容就是压测背景,就是因为什么原因我们要做这次压测,压测背景是我们压测的的方向,如果方向错了就会导致我们费时费力压测完成之后,压测的结论是没有意义的

那么压测背景和压测目标的关系是啥呢?

说一下我们现在常见的几种压测背景:

1、大促期间调用量对比平常明显有增长的业务

目标:是否能够支承大促预估峰值流量(业务预估+业务增长+大促增长)+单机房承载量+ 接口能支撑多大的调用量

结论:xxx配置最优/最大吞吐量xxx,能够支撑本次大促预估峰值调用量xxxx,是否存在风险;

2、上次大促压测过,但是之后新增/修改过的内容

目标:接口性能是否有变化+是否能够支撑大促预估峰值流量+接口能支撑多大的调用量

3、新增的接口,没有压测过,有业务预估调用量

目标:接口是否能够满足业务预估调用量(极限)+ 正常

4、新增的接口,没有压测过,没有业务预估调用量

目标:接口性能评估,系统性能是否存在瓶颈?有无优化空间?

5、新增的接口替换老接口

目标:接口性能评估,是否能够满足老接口的业务调用量+新增业务调用量

6、老接口的性能优化

目标:对比优化前优化后的性能指标,是否有优化效果

7、大促期间峰值调用量相比日常调用量没有明显变化,但是高峰时间拉长的业务

目标:峰值流量稳定性压测

8、没有太大的调用量,但是用户对于用户体验要求比较高

目标:接口响应时间是否有感官上的延迟,关注TP99,是否需要优化

9、不知道系统是否需要扩容

目标:极限压测,应用服务器和数据库资源使用情况是否合理

10、已知链路、接口性能比较慢,我需要知道瓶颈在那里

目标:找到链路、接口体系上的薄弱点(可优化内容)

谈谈压测方案的那点事 | 京东物流技术团队

二、压测场景

业务模型的调研和构建是我们压测前期工作中最为核心的一个环节,业务模型的创建要以实际生产环境系统业务操作模式为依据,只有模型符合实际的生产业务使用模式,性能测试的结果才能真实有效的反应上线后系统的性能情况,业务建模好坏直接决定性能测试执行的成功与否,也就是我们所说的压测模型

业务建模的过程中要分析清楚三件事情:

1、产生流量场景有哪些?如何选择需要压测的场景?

2、各场景和交易之间流量如何分配和设计?

3、要达成测试目标需要构造铺地数据需要多大的量,这些铺地数据该如何分配和部署;另外需要业务模型设计数据,数据要如何分配和构造

其实要做的就是在了解清楚业务并在其基础上完成:业务模型、流量模型及数据模型。

1、业务模型

一般从业务运营视角、技术运营视角、线上问题分析以及测试经验四个维度进行收集、整理和提炼:

业务运营:从实际业务应用的角度收集用户实际的使用情况和业务增长的趋势,比如我们有几个业务调用来源,平时用户使用最多的场景是那些,用户操作的高峰时段是什么时候?

技术运营:从技术运营角度去梳理我们接口实现逻辑的调用链路,比如说调度工作台线路展开查询,线路下任务低于20条的会去调异常接口,高于20条的不调异常接口;比如说查询接口实现的方式,走缓存还是走数据库;

线上问题:根据用户反馈和线上问题的收集,结合线上问题修复的方式;比如说一线反馈xxx操作会感知响应比较慢,研发在优化这个的时候会覆盖哪些用户操作场景

测试经验:根据测试经验来完善业务模型

2、流量模型

在业务场景确定后,就要思考各个场景和交易之间流量如何分配?。

生产环境的用户操作场景比较复杂的,请求报文的大小和请求路径也各不一样,使用单一的请求报文进行压测是不合理的,在流量模型分析的过程中有两种思考方式。即用户行为模型和系统业务模型。

用户行为模型:通过描述高峰时期用户行为特点,通过对用户行为调研分析,归纳总结出用户行为模型。比较常见的就是现在的流量录制,在业务高峰时间录制业务流量,然后进行流量回放,优点是实现起来比较简单,缺点是录制的流量用户行为较难统计分析。

系统业务模型:根据高峰时期系统业务特点,通过系统日志、数据埋点等方式获取高峰时段系统业务流量,获悉用户的主要流量行为,然后通过自己编写脚本和配置流量占比的方式来实现,优点是用户的流量占比比较清晰,缺点是要有数据的人工归类分析过程

3、数据模型

设计完成业务模型和流量模型,还要清楚需要多少基础数据(也叫铺地数据),铺底数据目的是测试时尽可能的与线上保持一致(至少数量分布一致),不管是哪类数据库,对于不同体量的数据,所走的查询器选择都是不一样的。几百行的数据走全表扫描肯定比走索引要好,但如果是几百万行呢?这方便需要我们具体地做评估。一般来说数据量要按照实际生产环境的数据量为多少为基础,在性能测试环境做等量代换。

总结:多少用户(WHO)在什么时间或者持续多长多久(When),在多大的数据量的基础上(How much),完成了什么业务(What),最终需要关注怎样的指标(How)。

举例:

单接口压测(调用方式不同):

1、默认页面打开自动查询,查询每页默认20条记录,也是最大的用户形式

2、通过接口调用,接口每页最大返回条数是1000条

单接口缓存压测:

  • 走缓存 10分钟
  • 不走缓存 10分钟
  • 部分命中缓存,部分未命中缓存,10分钟经历5分钟缓存失效

单接口混合场景压测:

调度工作台-分页查询用户权限内线路,不同的用户行为

1、1天1个区域查询量

2、1天7个区域查询量

3、混合场景(7天1个区域10%,1天7个区域20%,1天1个区域70%)三种

单应用多接口混合压测:

根据调用量进行接口调用配比

单业务接口混合压测:

适用场景:

运营指标看板(链路大屏页面,常用用户大概在150人左右),在用户访问大屏的同时调用五个接口方法:

用户初始进入页面后,默认无查询条件调用5个接口

用户在此页面停留,每隔30s自动刷新页面内容调用5个接口

用户手动录入查询条件,点击查询自动执行查询操作调用5个接口

**极限压测:**

【618备战压测-执行核心流程极限压测】测试方案

双实例线性增长验证

谈谈压测方案的那点事 | 京东物流技术团队

全链路压测:

【备战618性能测试-运输ORC接单】性能测试报告

系统稳定性压测

满足业务需求后,持续加压一段时间(4-6)验证系统稳定性

三、压测环境

1、优先考虑线上环境

2、压测环境与生产环境吞吐量差异,单实例压测和双实例压测怎么选择

3、压测环境与生产环境差异

4、铺底数据量压测环境与生产环境差异

作者:京东物流 朱飞

来源:京东云开发者社区 自猿其说Tech 转载请注明来源

点赞
收藏
评论区
推荐文章
京东云开发者 京东云开发者
10个月前
京东物流常态化压测实践 | 京东云技术团队
大促备战压测备战时间紧、任务多,压测备战压力较大,在大促备战多专项并行资源紧张情况下,频繁的系统调优给整个大促带来不可控的风险因素。引入常态化压测的手段,通过每周或每月的定期压测行为,持续把控系统性能表现,保证服务稳定性;同时将需求上线引起的性能问题前置暴露,及时定位优化问题;减轻备战压力,提升压测效率。
Easter79 Easter79
2年前
sysbench 压测
IP架构sysbench部署服务器:172.17.100.107压测服务器:172.17.100.100MySQL部署目录:/usr/local/mysql前置工作1.完成MySQL的安装(MySQL5.7最新版本自动部署脚本:MySQL5.7自动部署脚本(https://www.oschina.ne
浅析大促备战过程中出现的fullGc,我们能做什么?
在日常压测和大促期间,经常会发生Jvm出现大量youngGc和部分fullGC的情况,导致性能下降,可用率降低等情况。
Stella981 Stella981
2年前
Socket接口固定QPS性能测试实践
在学习了Socket协议的知识和完善固定QPS压测模型之后,打算对Socket.IO协议的接口进行一波压测实践,来验证自己写的功能是否存在BUG和更多能做的优化空间。总结下来,修复了两三个BUG,性能测试进度条的计算方式进行了优化,不然在类似Socket这种异步处理的请求,可能会由于统计的doing()方法耗时太少
Wesley13 Wesley13
2年前
mysql压测实战
1、安装压测工具curlshttps://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh|sudobashyumyinstallsysbench2、执行压测命令sysbenchdb
Stella981 Stella981
2年前
OceanBase数据库实践入门——性能测试建议
概述本文主要分享针对想压测OceanBase时需要了解的一些技术原理。这些建议可以帮助用户对OceanBase做一些调优,再结合测试程序快速找到适合业务的最佳性能。由于OceanBase自身参数很多、部署形态也比较灵活,这里并没有给出具体步骤。数据库读写特点压测的本质就是对一个会话的逻辑设计很高的并发。首先需要了解单个会话在
京东云开发者 京东云开发者
9个月前
浅谈常态化压测 | 京东物流技术团队
随着业务的不断增长,支撑业务系统的压力也逐渐增加,会面临如系统越来越厚重、逻辑越来复杂、迭代节奏越来越快等繁杂的情况。我们当前并没有做到在每次变化时快速识别出性能风险,检测产品或系统的稳定性、可靠性,而且我们还在不断的投入人力成本在压测这件事情上也是不合理的,所以我们要将性能验证融入到我们日常的工作中,把压测做到常态化,做成平常的一件事。
京东云开发者 京东云开发者
8个月前
CGLIB动态代理对象GC问题排查 | 京东云技术团队
一、问题是怎么发现的最近有个新系统开发完成后要上线,由于系统调用量很大,所以先对核心接口进行了一次压力测试,由于核心接口中基本上只有纯内存运算,所以预估核心接口的压测QPS能够达到上千。压测容器配置:4C8G先从10个并发开始进行发压,结果cpu一下就飙升
京东云开发者 京东云开发者
5个月前
大数据平台红蓝对抗 - 磨利刃,淬精兵! | 京东云技术团队
一、背景目前大促备战常见备战工作:专项压测(全链路压测、内部压测)、灾备演练、降级演练、限流、巡检(监控、应用健康度)、混沌演练(红蓝对抗),如下图所示。随着平台业务越来越复杂,红蓝对抗的作用愈来愈明显,下面将详细介绍大数据平台在本次双十一大促备战工作中是
京东云开发者 京东云开发者
3个月前
大数据平台红蓝对抗 - 磨利刃,淬精兵!
背景目前大促备战常见备战工作:专项压测(全链路压测、内部压测)、灾备演练、降级演练、限流、巡检(监控、应用健康度)、混沌演练(红蓝对抗),如下图所示。随着平台业务越来越复杂,红蓝对抗的作用愈来愈明显,下面将详细介绍大数据平台在大促备战工作中是如何开展红蓝对