作者|长胜
2016年双11零点高峰的秒级创建达到17.5万,在这具有历史意义的数据背后,系统稳定性至关重要,稳定意味着决定一切。在稳定性保障过程中,有一个“模拟考”的重要角色,他的职责和内容就是确保狂欢节前的每一场‘考试’都能更高效地接近当天的场景,这个神秘的“模拟考”角色就是全链路压测模型,本文核心内容将为大家揭晓。
全链路压测背景
在日常性能测试中,一般在线下进行(部分请求在线上进行),多数为单机压测,其中会存在以下几个瓶颈:
从机器配置、依赖应用配置和能力、中间件的配置、DB配置等方面,线下环境和线上环境有巨大差异。
线下数据不丰富,覆盖面窄
单机单应用压测,无法评估整个链条的性能
线上集群能力评估不准确,通过单机能力评估线上集群能力,偏差较大
集群大压力下,瓶颈无法准确挖掘
为解决以上问题,需要进行几个事项:
将环境从线下迁移到线上、数据从线上批量同步获取、压测覆盖整体集群、全链条场景压测,如下图1所示
图1 压测转变过程图
通过以上环节便诞生了全链路压测,全链路压测概念如下节所述。
全链路压测概念
全链路压测是以全链路业务模型为基础,将前端系统、后端应用、中间适配层、DB存储层等整个系统环境,完整地纳入到压测范围中,形成全链路压测模型,以http请求为载体,模拟真实用户行为,在线上构造出真实的超大规模的访问流量,按照全链路模型施压,直至完成最接近用户行为的流量高峰压测,完成集群以及集群间能力压测并完成线上瓶颈挖掘。
即全链路压测主要包含以下几点:
1) 全链路压测业务模型为基础,形成全链路压测模型
2) http请求为载体
3) 模拟真实用户行为
4) 目标是得到线上集群真实容量和挖掘线上瓶颈
在全链路压测中,压测模型为核心,它决定了全链路压测的需求和目标,也决定了全链路压测的最终效果。
全链路压测整体流程
全链路压测整体流程(如图2所示),包含大促需求收集、业务范围确定、压测目标确定、压测场景制定、压测策略设计、模型预测、模型评审和定稿、模型构建、压测方案、压测执行、压测结果、压测结论。
其中压测策略指在压测过程中不同的验证内容,如限流验证、容灾验证、预案验证等
压测模型包含从需求采集到压测方案输出中的各个流程节点,通过这些节点的设计和采集,共同确定了整个全链路压测的范围和目标,并作为全链路压测的入口,产生压测模型、数据和方案。
图2 全链路压测流程图
全链路压测模型
一、全链路压测模型是各链路核心场景集合,建立在对用户行为分析和预测的基础上,按照模型构建数据和场景,形成压测方案,驱动压测执行,并最终拿到压测结果。全链路压测模型的层次结构如下图3所示。
图3 全链路压测模型层次图
全链路压测模型核心两点在于模型准确率和效率,模型准确率保证最终的压测效果能达到大促预期;模型效率高,保障模型快速运行和产出,确保全链路压测时效性,下面会结合准确率和效率来介绍全链路压测模型构建中的重要组成节点。
二、全链路压测模型准确率(更接近用户行为)
1) 模型预测
模型预测是通过分析以往数据,形成数据样本,并结合当前大促的业务玩法,调整入参权重,来实现未来大促模型预估。
全链路压测模型预测基于ARIMA算法来进行预测,通过从以往大促数据和日常数据中获取样本,通过ARIMA算法处理样本后,获取未来时刻的预测值。
模型预测框架图和预测算法实现流程图如图4和图5所示,今年全链路压测模型预测准确率高于90%
图4 模型预测方案图
图5 模型预测算法实现流程图
2) 压测场景串行
今年全链路压测还有一个变化,便是新增串行场景,进一步模拟用户行为。2016年双11全链路压测所有交易链路均采用了串行设计。
首先解释下并行模型和串行模型(如下图6所示)
-并行模型:
为了达到压测量级,将各个场景做拆分,每个场景可单独压测,全链路压测过程中,将所有场景按照模型同时压测,压测出集群能力以及集群和集群间相互调用能力。
并行模型优点:每个场景压力均可自由调节,不受其它节点影响
并行模型缺点:经过拆分后的场景,和真实用户行为不符
-串行模型:
模拟用户行为,将各个场景,按照用户行为,串行发送,并达到压测模型量级。串行模型更接近用户行为
图6 并行和串行对比图
-串行模型实现
将串联场景分别设置父节点和子节点,父节点对应其上一个场景,子节点对应其后一个场景,压测模型维护串联场景信息,并按照串行关系,将各个场景的压测流量存放(一整条串行链路的数据会放在相同的表中),推送压测方案时,会将场景串联信息一并推送至压测引擎,引擎识别串行信息,并从DB中按照串行关系获取数据,按照压测模型进行串行施压。压测串行模型的实现方案如下图7所示。
另外,在压测过程中,动态调整两个场景之间的转化率,就可以快速实现各个场景QPS的调整,满足QPS灵活调整的需求。
图7 全链路压测模型串行实现图
-压测模型覆盖率
压测模型对业务的覆盖率也决定了压测模型的准确率,在整个双11期间,全链路压测覆盖导购、交易、垂直行业、搜索算法、商家端、优土等业务,对整个集团的业务覆盖率达到90%以上,核心场景和双11当天有较大量级增长的场景均在全链路压测覆盖范围内,确保全链路压测结果的全面性。
-压测数据准确率
压测模型最终实现均体现在数据上,数据的丰富性和准确率决定了压测模型的最终准确性,压测数据的准备,分为以下几个步骤:
数据迁移,迁移线上的数据作为压测数据使用,满足数据丰富性。
数据关联,将相关联的数据一并迁移,使迁移后的数据可直接使用。
数据脱敏,迁移中会将数据的敏感信息做过滤和替换,使数据无安全风险
经过以上三个步骤产生丰富的压测数据,而后还需要进行数据筛选、数据建模、数据构建、数据校验这四个步骤。
数据筛选,批量迁移的数据中,有部分数据是不可用,首先需要根据可用特征进行数据筛选,筛选出可使用的基础数据(买家、卖家、商品)
数据建模,将可用数据进行建模,比如商品,会按照类目、卖家、库存分布、可用性等,按照线上真实比例进行排列和集合划分。
数据构建,按照压测模型,在基础数据上构建优惠、红包、库存、物流等属性,同时构造出各个入口的压测流量。
数据执行&校验, 将生成的压测流量批量执行,监控和校验各个数据的成功率,排查不成功数据的原因,解决问题,最终形成可用的压测数据
图8 压测数据流程图
通过以上步骤确保压测数据的准确性,在双11整体全链路压测中,数据准确率均在99%以上。
三、全链路压测模型效率
压测模型构建效率也决定了全链路压测整体效率,构建越高效,压测效率越高,越能快速得到压测结果,为达到压测效率的提升,压测模型配置了模型一体化和一键化构建等功能。
1)模型一体化
压测模型实现流程&压测模型一体化架构,如下图9所示,展示了整个压测模型构建步骤。
模型一体化,即将压测模型构建的各个步骤按照模块划分和实现,每个模块均具备自动构建能力,然后整体组装各个模块,通过总控控制各模块操作,使系统具备整体模型一体化构建能力。
在一体化构建模块中,主要包含以下几个部分
压测量级一键生成
业务流程组合一体化构建
数据自动筛选和模型构建
分布式批处理构建
图9 压测模型构建一体化架构图
2)压测量级一键生成
在以往的压测过程中,每个场景的QPS配置是一个比较头疼的事情,随着业务的增长,压测场景已经由原先的十几条,增加到现在的几百条,原先可以手动配置压测QPS的场景,现在再手工配置,耗神费力,而且还极有可能出现配错和漏配的错误;同时多场景下QPS手动配置,也无法满足动态调整的需求,压测过程中,依靠手工调节,效率低,易出错,为解决该问题,今年新增了压测量级一键生成的功能
首先构建场景树(如图10所示),然后构建QPS生成节点的数据结构,每个节点均包含其左右节点的比例和自身的QPS值,然后按照二叉树遍历的方式,遍历完二叉树,完成各个节点QPS值计算,从而生成各单元、各场景的QPS。
图10 压测场景树
针对QPS变化的场景,只要修改整体QPS和比例,重新执行遍历更新操作即可完成QPS的动态更新。
3)业务流程组合一体化构建
将具有关联性的业务场景,通过底层接口顺序组合,系统控制一体化构建,减少各个场景单独构建的人力成本。比如购物车添加,将购物车删除、购物车模型数据组建和购物车添加三者组合,形成一体化构建,减少三个步骤间的人为切换。
4)数据自动筛选和模型构建
数据自动筛选,根据模型设定的数据类型和数据比例,按照不同的场景进行筛选,确保压测模型中各场景数据类型和数据比例分布均匀,避免在压测过程中出现不同时段不同数据模型的情况,影响整个模型的压测结果。
模型构建,筛选好的数据,按照模型将数据进行匹配组装,组装过程中使用分布式多线程组装和构建(见下图11的模型组装器),确保模型构建效率。
5)分布式批处理构建
分布式基于ZK实现,将模型机器进行动态调度。
压测流量构建依托springbatch批处理框架实现模型数据输入、流量脚本构建、流量输出存储。整体运行过程如下图11所示:
图11 分布式批处理任务构建图
结 语
全链路压测2016年双11模型准确率大于90%,压测数据成功率高于99%,为双11大促稳定性贡献了重要的力量,后续全链路压测系统会向智能化发展,让全链路压测更智能、更高效、更接近用户行为。
欢迎大家积极点赞和留言想要听到的技术分享,一起交流分享电商技术,做最懂商业的技术人!我们将通过微信公众账号分享更多的独家技术细节!敬请关注。