首页 > 其他分享 >【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队

时间:2024-01-02 11:36:07浏览次数:31  
标签:SKU 缓存 数据库 调用 预占 调优 链路 积微成著 库存

一、前言

性能测试之于软件系统,是保障其业务承载能力及稳定性的关键措施。以软件系统的能力建设为主线,系统能力设计工作与性能测试工作,既有先后之顺序,亦有相互之影响。以上,在性能测试的场景决策,架构分析、流量分析、压测实施和剖解调优等主要环节中,引发对于系统能力底盘夯实和测试策略改进的诸多思考。

在性能测试阶段,剖析系统能力实现及调优方案,探索更优解及性能测试策略的提升空间。

二、热点数据存储模型压测实战及思考

通过性能测试,推测SKU库存预占场景,在不同存储模式下的性能瓶颈及风险。

数据架构升级后,SKU库存预占效率(TPS)提升2300%↑。

测试驱动,结合系统实现,论证缓存预热的必要性,并借助大数据分析,探索科学的缓存预热及保温策略。

结合新业务模式,思考更加科学的测试数据构建思路和测试过程提效方案。

1、压测场景

库存预占,是指在订单接单环节,为单据提供SKU库存短暂预留。物流仓配订单接单环节,会发起SKU维度的库存预占行为。

库存中心通过“库存预占主应用”中的预占接口,对外提供SKU库存预占标准能力。主要通过“库存扣减逻辑管控及数据库层交互”、“缓存层交互”,以及“任务调度”三个关键应用,承载库存逻辑计算及存储层交互能力。

数据模型视角,对预占能力实现分为两种:

▪事业部维度库存预占主要通过Redis缓存层承载。

▪批次库存预占直接由数据库承载。

当大促仓配单量进入爆发期,热点SKU预占请求快速增长,且库存预占请求直达数据库,系统TP99会出现跳点甚至持续升高,严重情况下造成接单超时。

以上,计划针对性构造压测场景及数据模型,确认系统的峰值承载能力及调优策略的有效性。

2、首压及分析

压测目标:“库存预占主应用”下的“预占接口”,在数据库承载热点SKU预占请求模式下,探索目标TP99(≤3000ms)可承载的峰值流量,并验证调优后的峰值承载能力(目标 TP99≤500ms)。

压测方案:单个热点SKU持续发压预占,发压起始QPS=10,并以QPS+10递增,探索可承载请求的性能上限。

压测过程及结论

▪在QPS=50时,系统可稳定支撑库存预占业务(TP99≈100ms)。

▪“库存预占”主应用:CPU使用率≤15%,内存使用率≤35%

▪“库存扣减逻辑管控及数据库层交互”应用:CPU使用率≤18%,内存使用率≤65%

▪数据库:CPU使用率≤7.8%(无慢SQL)

▪基于当前的系统性能体现,具备持续加压的条件。

▪以QPS+10递增加压至60时,TP99在2分钟左右快速增长至7000ms,“库存预占”主应用TPS≤60,预判系统能力达到瓶颈,停止加压。

“库存预占”主应用 TP99+TPS趋势

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_02

“库存预占”主应用 硬件资源趋势

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_03

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_04

数据库 关键指标(CPU)

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_05

数据库 关键指标(慢SQL)

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_06

数据库 关键指标(内存)

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_07

瓶颈预判:单据维度的库存预占是以先查(可用库存)后写(预占库存)的方式进行,在对热点SKU高频次下单过程中,数据库会对该行记录长时间持续读写,数据库层面会通过行锁机制保证单笔交易的原子性,行级锁引发的锁竞争大概率会导致系统处理能力达到瓶颈,制约系统的执行效率。同时从应用层到存储层,未出现硬件资源瓶颈,排除硬件资源不足的影响。

3、调优及复压

存储层改造见 库存中心-库存预占场景 系统架构简图):经首轮压测及分析,为解决已知性能瓶颈,从数据架构层面,将批次库存预占由数据库直接承载请求压力,升级为由Redis缓存主要承载请求压力。利用Redis高性能吞吐能力,解决并发场景下的数据读写效率问题,由Redis前置承载热点商品的主要流量。

一致性保障见 库存中心-库存变化监控机制简图

▪为确保缓存层与数据库层数据一致性,在缓存命中的情况下,通过建立调度任务或MQ方式异步回写数据库。

▪在缓存击穿时,通过先读(数据库)后写(Redis)再反馈(API)预占结果,之后异步回写数据库,确保数据一致性。

库存中心-库存预占场景 系统架构简图

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_08

库存中心-库存变化监控机制简图

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_09

复压结论

▪完成数据架构升级及热点SKU缓存预热后,初始QPS=1100并以100递增,TPS上探至1200时,TP99≈130ms,系统可稳定支撑批次库存预占业务。

▪当TPS上探至1300时,TP99出现明显波动(毛刺≈420ms),且“缓存层交互”应用CPU占用率飙升至90%+,核心链路稳定性劣化,停止加压。

▪相较数据库承载模式,缓存化升级后,TP99满足预期(≤500ms),TPS承载能力大幅提升2300%=(1200-50)/50。

“库存预占”主应用 TP99+TPS趋势

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_10

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_11

“库存预占”主应用 硬件资源趋势

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_12

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_13

数据库 关键指标(CPU)

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_14

数据库 关键指标(慢SQL)

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_15

数据库 关键指标(内存)

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_16

Redis集群 关键指标

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_17

4、系统健壮性思考

◦**全量缓存的弊端:**供应链模式中的不同行业,SKU品类生命周期存在较大差异(如服饰行业≈3个月),全量缓存模式会导致Redis中存在大量无效品类,资源消耗膨胀不可控,增加资源成本,有必要设计更有效的缓存方案。

◦**缓存预热及保温的必要性:**缓存命中率,与预热机制和保温策略紧密相关。

▪必要性:常规大促节奏,起售期会触发首次缓存初始化,促销品类与日常销售品类的重合度,决定了首次缓存击穿的概率。目前的Key有效期=7天,大促起售期→开门红→高峰期间隔均大于7天,缺少必要的保温策略,会增加下个促销节点前缓存失效的可能性。

大促开门红至11.11 缓存命中率趋势

系统整体可平稳承载流量,__同时缓存命中率曲线,有一定的提升空间

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_18

▪预热思路:如何尽可能保持在大促等特定时段的缓存有效性,提升缓存命中率(降低击穿概率),可通过前置的多维度分析调研,包括但不限于基于大数据的大促前集中采购品类分布分析、历次大促及关键节点促销品类密度及分布分析 以及 关键客户促销计划调研等方式,结合技术手段,前置预判、预热及保温。

◦**缓存预热实践:**通过对某客户大促前集中采购期及大促节点SKU品类重合度分析,发现以下规律

▪集采入视角:大促集采期SKU品类,相对开门红品类重合度≈69%,相对11.11品类重合度≈75%。

▪销售出视角:起售期SKU品类,相对开门红重合度≈94%,开门红相对11.11品类重合度≈75%。

▪以上数据证明,通过在开门红以及11.11大促等关键促销节点前,将集采期及前一促销期的SKU可用库存数据,进行缓存预热,有助于提升预占请求的缓存命中率。

大促主要环节 SKU品类重合度分析

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_19

◦**异常场景识别:**库存场景对数据三性(准确性、及时性、完整性)要求较高,在数据库与缓存的双向同步过程中,需避免因一致性问题引发的业务异常。

▪超卖异常识别:大促单量峰值期,为保护主数据库安全,通过缓存同步限流减缓主库压力,造成缓存至数据库同步延迟,同一SKU在数据库层未及时扣减,如此时叠加缓存Key到期情况,接口直接返回MySQL数据,可能会引发超卖业务异常。

▪系统优化思路

▪静态方案:单量高峰期期间,延长Key效期,覆盖大促关键环节间隔。

▪动态方案:增加热点SKU缓存效期延时策略,Key到期T-1天,日均预占请求量大于1的SKU,自动延长Key有效期。

5、测试策略改进思考

场景拓展

▪直播电商模式主流化趋势强劲(2023年前三季度全国直播电商销售额达1.98万亿元,增长60.6%,占网络零售额的18.3%,直播电商拉动网零增速7.7个百分点),相较传统电商,其限时促销模式叠加社交传播扩散属性,单品瞬时流量大,不同促销场次品类重合度更低,促销频次高,对系统性能提出了不同的要求。

▪反推性能测试策略,从平台视角出发,需要尽可能提升选用SKU的多样性,同时降低压测单次请求SKU的品类重合度,识别真实复杂场景下的性能隐患。

效率提升:复杂场景的仓配订单性能测试工作,需要前置基础数据的大量储备(商品、库存),以及高复杂度接口请求数据准备。如何确保商品和库存等基础数据快速就绪?同时下单请求的报文体根据SKU密度和复杂度需要,自动化快速构建组装?需要在现有压测框架基础上,开发扩展功能,以支撑从基础数据到复杂单据的一键快速初始化构造能力,降低复杂场景构建难度,提升测试工作效率。

三、无效调用量分析、识别及调优实战

在性能测试的流量分析阶段,结合业务场景调研,前置识别性能瓶颈疑点。

推动排查及调整核心链路调用逻辑后,在标定的业务窗口期,核心接口调用总量降低60%↓。

深入细分业务场景,推演潜在的调优空间。

1、背景

物流系统在订单出库后,由 订单明细查询应用,提供订单及其关联包裹明细信息的对外查询能力。主要由外部系统(Top2量级调用方:接入回传67%、履约回传11%)调用,在单据出库后,输出出库货品的数量和包裹详情等订单基础信息。

关键(Top2)调用方拓扑

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_20

2、场景调研及疑点识别

场景调研及风险预判(生产流量分析)

▪对“订单包裹明细查询接口”进行调用量趋势分析,取样23年10.12 06:30~23:00(流量分析期),环比最近一次促销同时段(最近一次大促请求高峰期),Top2调用方峰值调用总量激增305%。

▪基于前期调研,从调用量看,常规情况下仓库出库能力均值≈400000单/分钟,仓库出库高峰时段为每日08:00~18:00,仓出库次数:“订单包裹明细查询接口”峰值调用量≈1:10为“常规比例”。

▪通过对10月12日线上数据观测,仓出库次数:“订单包裹明细查询接口”调用峰值(400000/6532200)≈1:16,相较“常规比例”偏差较大。

▪以上,通过生产流量分析工作,识别出在仓库出库高峰时段,“订单包裹明细查询接口” 调用量存在疑点,并进一步深入分析。

最近一次促销期 关键应用调用量

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_21

2023年10.12 关键应用调用量

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_22

调用链粗筛

▪仓配出库单据维度,履约回传应用,向订单系统推送出库明细时,会调用仓明细查询接口。

▪接入回传应用,在回传订单信息时,会调用仓明细查询接口。

▪履约状态回传调用峰值 / 接入回传调用峰值 ≈ 1:9,接入回传调用峰值明显偏大,逐步锁定疑点系统(接入回传应用)。

疑点深剖

▪经深入排查,首先确认前期对异常流量和疑点系统的判断基本准确。

▪技术架构层面,接入回传应用在未判断订单状态情况下,调用目标接口。导致单据在未出库且没有出库明细时,发生大量无效调用。

▪同时发现,因AB测试环境别名配置错误,导致生产流量误叠加。

3、调优策略

◦调用逻辑调整

▪“I” 业务场景订单回传阶段,如单据状态为出库前,不发起“订单包裹明细查询接口”调用,剔除无效查询。

▪根据最终的回传内容(是否需要明细信息),判断调用的必要性,剔除非必要查询。

◦调整AB测试环境别名配置,避免测试流量对生产环境产生非必要压力。

优化前接入回传应用逻辑

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_23

优化后接入回传应用逻辑

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_缓存_24

4、调优效果

◦相对调优前(10.12),“接入回传应用” 调用总量降低60%↓(前:2397252500 后:925890100),峰值调用量降低64%↓(前:5921500 后:2121800)。

下图分别为调整前、后调用量分布,用以对比

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_25

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_性能测试_26

5、性能风险前置识别

◦压测实施阶段不是发现性能隐患的唯一阶段,如果有能力在流量分析阶段识别性能风险并推动论证,问题发现越早,风控代价(资源)越小,质量风险越低。

6、OpsReview常态化

◦流量异动观测:流量分析及性能风险识别,需要结合实际的生产运营特征,以及接口的关键调用链,定义系统调用量的普遍规律。被调用方有必要不断积累识别调用来源和常规量级,盘点外部调用策略,在调用量出现异动时,排查风险。

◦编码规范:对于接口调用逻辑,有必要抽象为标准方法,避免团队协同开发过程中出现因人而异的Coding差异,降低无效查询发生概率。

◦定制化逻辑排查:系统内非标业务存在较多的定制化逻辑,有必要针对特殊逻辑排查无效查询风险。

7、潜在调优空间推演

◦基于测试经验,经过业务场景梳理,发现 “I场景” 下存在细分的非标定制化流程,以及与 “I场景” 并列的 “P场景” 标准流程。

◦联动研发深入分析 “I场景” 中的非标定制化流程 以及 “P场景” 中的标准流程,已确认,存在进一步优化空间,并明确优化方案(如下图)。

【积微成著】性能测试调优实战与探索(存储模型优化+调用链路分析)| 京东物流技术团队_数据库_27

四、总结

性能测试作为系统能力巩固升级的关键措施,通过对典型案例的陈述和思考,探索系统能力和性能测试策略的提升空间。确保核心系统链路稳定高效承载业务峰值流量,同时从容应对极端场景。

作者:京东物流 刘锐等

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

标签:SKU,缓存,数据库,调用,预占,调优,链路,积微成著,库存
From: https://blog.51cto.com/u_15714439/9065740

相关文章

  • JVM如何线上调优?
    晚上8点是我和们的业务高峰,—到高峰的时候,发现TP8的蚝时会变高,有明显的手剩,通过排查发现内存使用率也会增大,然后再释放,其他各项指标证正常,于是怀疑是GC导致的,观察服务器的GC情况,发现yongGC情况如下,大概每5分钟,GC55次,峰值最高可以达到20次。FiulGC比较频繁,每5分钟大概0.5次,峰值8次......
  • IP模块组装网络包及转发网络包链路
    引言之前协议栈系列的文章讲解了连接,收发网络包,断开连接这些操作协议栈模块的处理,但是协议栈是上层接下来会委托ip模块进行真正的处理。网络包网络包的组成网络包由头部的控制信息和头部后面的传输数据组成。控制信息代表了包要发往的目的地,传输数据就是要发送的数据网......
  • 大厂性能测试监控指标及分析调优指南
    一、哪些因素会成为系统的瓶颈CPU:如果存在大量的计算,他们会长时间不间断的占用CPU资源,导致其他资源无法争夺到CPU而响应缓慢,从而带来系统性能问题,例如频繁的FullGC,以及多线程造成的上下文频繁的切换,都会导致CPU繁忙,一般情况下CPU使用率<75%比较合适。内存:Java内存一般是通过jvm......
  • JVM-实战篇-GC调优
    1GC调优GC调优指的是对垃圾回收进行调优。GC调优的主要目标是避免由垃圾回收引起的程序性能下降。GC调优的核心分为三部分:通过JVM参数的设置;特定垃圾回收器的JVM参数的设置;解决由频繁的FULLGC引起的程序性能问题。GC调优没有唯一的标准答案,重点学习调优的工具和方法。......
  • JVM-实战篇-内存调优
    1内存溢出和内存泄漏概念:内存泄漏:在Java中如果不在使用一个对象,但是该对象依然在GCROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称之为内存泄漏。内存泄漏绝大多数情况都是由堆内存泄漏引起的,所以后续没特殊说明讨论的均为堆内存泄漏。若持续发生内存泄漏,不管有......
  • 数据链路层技术及应用
    数据链路层技术及应用1、移动承载网络中的数据链路层技术虚拟局域网(VirtualLocalAreaNetwork,VLAN)用于基站之间或者专线用户之间的数据隔离,每个基站或者每个业务属于一个独立的局域网。链路聚合(LinkAggregation,LAG)可以将多条链路进行捆绑,当一条链路出现问题时,其余链路能......
  • ACL&SCO链路介绍
    1、蓝牙协议栈体系结构按照各层协议在整个蓝牙协议体系中所处的位置,蓝牙协议可分为三大类:1,底层协议:射频RF,基带协议和链路管理协议。2,中间层协议:逻辑链路管理和适配协议,服务发现协议,串口仿真协议,以及电话通信协议等3,应用层协议:对应各种应用的profiles2,链路管理协议:链路管理协......
  • 人工智能大模型原理与应用实战:预训练模型的优化与调优
    1.背景介绍人工智能(ArtificialIntelligence,AI)是计算机科学的一个分支,研究如何使计算机具有智能,能够理解人类语言、进行问题解决、学习和自主决策等。随着数据量的增加和计算能力的提升,深度学习(DeepLearning)成为人工智能的核心技术之一,它能够自动学习表示和特征,从而实现人类级别......
  • Java应用怎么调优?【转】
    一、Java应用调优的关键指标调优之前首先我们要知道怎样才算是“优”,不能笼统的说我的程序性能很好,所以就需要有一个具体的指标来衡量性能情况,而在JVM里面衡量性能两个指标分别“吞吐量”和“停顿时间”。吞吐量程序运行过程中执行两种任务,分别是执行业务代码和进行垃圾回收,吞......
  • TSNE 的参数调优: 实现更好的数据可视化效果
    1.背景介绍T-SNE(t-distributedStochasticNeighborEmbedding)是一种用于非线性降维的算法,主要用于数据可视化。它可以将高维数据降至二维或三维,使数据点之间的距离尽可能保持不变,从而实现数据的可视化。T-SNE算法的核心思想是通过一个高斯分布的概率模型来描述数据点之间的相似性......