订单流量录制与回放探索实践

标签: 流量 实践 | 发表时间:2023-02-07 18:10 | 作者:得物技术
出处:https://juejin.cn/backend

1.背景介绍

1.1 得物pandora介绍

什么是流量录制回放?流量录制回放是应用端通过挂载注入录制器探针自动注册到服务端形成录制流量回流,将所有外部调用依赖的响应内容(如数据库、分布式缓存、外部服务响应等)进行完整记录。由平台向回放器分发流量回放指令。其核心价值是通过直接录制生产的真实数据,将生产真实数据转化成可复用、可执行的流量,快速地在测试环境中进行回放比对接口返回值和中间链路的验证。

得物版本的流量录制回放平台pandora在官方开源版本上进行了很大的拓展,支持了很多官方版本不支持的子调用和入口调用。此外,平台还对得物的中间件进行了诸多适配工作,避免了大量的回放失败噪音。

640.png

1.2 市场工具对比

目前市场上已知的流量录制回放平台大部分都是在Jvm-Sandbox-Repeater基础上进行二次开发和改造,并且多数都是只支持Java语言。核心原理也都是通过录制线上真实流量然后在测试环境进行回放,验证代码逻辑正确性。

2.实践落地

2.1 协作模式

在具体的实施层面,目前采用的是业务测试,平台研发,业务研发三方协同的模式。任务分拆如下图所示。

640.jpg

2.2 阶段应用

流量回放在各阶段的理想实施应用:

提测阶段卡点:聚焦核心场景,低成本验证每次提测对于核心场景的影响;

测试回归阶段卡点:全量场景,重点追求覆盖场景全面性,验证新功能对历史功能的影响;

预发环境回归:目前预发跟生产同库,未来会推动落地基于预发&生产环境的流量回放,尽可能拉近录制时环境和回放时环境的仿真差异,从而降低回放阶段的噪音影响;

在得物的整体QA体系中,流量回放短期聚焦在回归兜底保障上。

6401.png

2.3 实践落地

流量回放的开展自发起后,在本域由探索尝试阶段逐渐过渡到应用场景拓展阶段。

订单流量回放模式

在经过一段时间的探索,摸索出了一套适用于本域迭代的模式。

img_v2_b40d37741c984fe4958e2dd539fece4g.png

Part1、尝试接入

团队开始开展流量回放的专项之后,通过调研,选取了40%的服务优先接入。

  1. 阶段目标
  • 完成30%P0应用top10 接口100%场景覆盖,形成迭代落地质量卡点,完成适用性和提效分析;

  • 增加订单域流量回放人员投入,落地质量卡点,覆盖5%回归场景;

  1. 实施方案
  • 调研应用的特性,尝试接入流量录制回放;

  • 梳理服务的P0接口及用例,配置对应的接口及用例标签;

  • 用例自动沉淀到用例集后,在回归阶段尝试进行流量回放。

  1. 收益成果
  • 完成30%应用形成落地质量卡点,落地15%用例回归场景,验证方案可行性和易用性,摸索研发测试协同机制。

Part2、探索升级

上一阶段花费大量的时间梳理接口配置标签,用例沉淀速度缓慢,并且收益与投入不成正比,因此调整了策略,应用智能化分析进行提效,快速沉淀用例,扩大用例量及覆盖的接口量。45%业务应用接入并均实现强卡点落地,配合平台侧优化,解决大部分组件适配和使用问题,迭代应用流程以及应用指标分析机制基本跑顺。

  1. 阶段目标
  • 应用:接入的应用交由对应的服务负责人,负责对应服务的接口维护运营及沉淀、排错分析;

  • 用例:尝试探索新的用例沉淀方式,进一步扩大用例量,增加覆盖的接口量;

  • 排错:根据服务的用例量以及接入的时间,提升测试排错能力,阶段2结束测开排错达到五五开;

2.收益成果

  • 从开始试点到应用卡点,沉淀的用例量也在应用热点流量方案之后开始了升级之路。接入的应用数也超过原定目标达到50%且均实现强卡点落地。

  • 应用智能化分析策略提效效果明显,沉淀的用例数成指数型增长,接入应用的P0接口覆盖率达到100%。

  • 测试排错能力提升,每迭代流量回放发现的bug数也在增加,新方案的可实施性和可推广性基本符合预期。

Part3、专项提速

在沉淀的用例case大量的增加、用例沉淀速度提效明显的前提下,流量回放在迭代的应用中发现更多的缺陷,规划扩大接入的应用以及覆盖的接口范围。

  1. 阶段目标
  • 应用接入:新增40%应用接入,接入应用占比合计90%;

  • 排错:提升测试的排错能力,新版本排错由平台研发转交业务研发,测试开发排错占比五五开;

  • 用例量:加速沉淀用例量,扩大覆盖的范围,至少65%的应用完成全量用例沉淀;

  • 卡点:接入应用达到100%卡点,提升排错速度,部分应用由生产卡点转为预发卡点;

  • 全域接入应用接口维度覆盖率98%以上,接口配置完善度98%以上,全量用例路径覆盖率60%以上。

  1. 收益成果

随着应用的接入,沉淀的用例量也在扩大,发现的问题数也在增多。同时也增加覆盖率的指标来衡量流量回放用例覆盖的代码占总代码行的比值。随着对覆盖率的关注,平台采样策略也进行了一个调整,删除所有历史沉淀用例,仅沉淀新策略实施之后录制的流量。

  • 流量回放接入90%应用,扩大应用接入和case沉淀,超预期达成目标,沉淀应用Case量是原计划的3倍,此阶段累计发现缺陷数占全域流量回放发现的bug数的45%,充分验证了落地策略的有效性;

  • 从阶段3本域发现的缺陷统计来看,其中回归类BUG占比38%,发现线上自有/隐藏问题占比8%,迭代过程中代码问题(日志报错)和代码规范类问题占比46%,性能问题占比8%;

  • 接口配置完善度100%;接口维度覆盖率96.49%;全量用例路径覆盖率79.32%,全量代码覆盖率平均39.8%;

3.总结分析

3.1 问题归类分析

3.1.1 累计发现的缺陷分类:

6402.png

3.1.2 累计发现的缺陷来源分类:

6403.png

3.1.3 典型案例:

  • 回放时系统异常,排查之后定位为NPE类问题,如:

6405.png

6404.png

  • response返回的业务字段diff对比不一致,如:

6406.png

通过对缺陷以及缺陷来源的归类不难看出:

  • 流量回放发现拦截的问题近一半都是会引起生产业务报错的,其中包括像金额不对涉及资损的问题以及字段传值不对、枚举类型取错等缺陷;作为生产发布前的最后阶段的防线之一,充分展现了流量录制回放作为对测试回归的兜底能力的补充手段的重要性。

  • 45%左右的问题是手工测试过程中难以发现隐藏比较深的代码层面问题,例如NPE报错、入参出参字段未序列化等,这些问题如果仅仅通过前端测试或接口测试不看日志不一一对比所有字段势必会将问题带到生产环境,最终影响生产环境的稳定性。

  • 6%左右的性能问题,例如存在重复子调用,影响接口RT,如果不在生产发布前发现解决,势必给用户体验带来一定的挑战。

  • 从缺陷的来源上看,发现的缺陷来源还是集中在项目迭代需求和技术优化上,充分验证了流量回放整体提速后的有效性以及对测试覆盖兜底能力的补充。

  • 通过对失败用例的排错分析经验的累积和分享培训,参与专项的测试团队的整体技术水平通过流量回放专项提速在技术氛围上有明显提升,培养了多位同学对自身负责模块的实现的代码走读能力,以及深挖缺陷的code diff能力。

3.2 适用性分析

适用场景

  • 适用于返回数据量大、业务流量也很大,以及读取业务占比大的场景,如ToC产品。

不适用场景

  • 挂载沙箱后开启录制会导致RT瞬间飙高,影响生产服务的稳定性。

  • 异步场景目前流量回放平台不支持。

  • 需要验证数据库的落地,节点的流转的链路测试,需要自动化。

先投入能迅速形成能卡点有收益的应用(迭代代码变更相对少,分层结构比较好,异步少,写操作少),把看得到的使用效果做出来。

流量回放能否完全替代手工回归以及自动化?

目前来看,答案是否定的。首先,从沙箱挂载到接口配置再到流量录制这一套流程下来,也需要较长的时间才能达到较高的用例覆盖,对于一些边界极端场景还是需要手工设计;其次,流量录制回放是后置的回归兜底,更侧重于对历史逻辑的回归验证。

1、接口覆盖不全。迭代需求新接口,未配置关联录制,不在流量回放的录制范围。

2、全量代码覆盖率不高。接口已经配置覆盖了,但是由于采样比例小场景极端等原因,接口的分支场景并没有录制到未被覆盖。

3、排错能力的高低影响。接口覆盖了,排错的时候由于新加了子调用,导致失败的用例在排错的时候容易被简单定义为代码变更。

4、平台问题。diff比对异常,显示回放成功,异步线程的回放是一个待攻克的难点。

3.3 面临的挑战

3.3.1 排错的效率

录制流量后对流量进行回放,发现回放结果比对失败的很多。经过对失败原因的排查与分析,有些是代码bug导致的失败,但更多的失败不一定是代码bug,常见噪音主要包含:

  • 代码修改,新增或删除了子调用,导致mock失败

  • 平台不支持的子调用,导致失败

  • 时间戳相关的子调用,diff不一致

  • 子调用中使用随机参数相关,导致mock匹配不上

  • repeater代码自身缺陷

  • 业务自增数据差异

  • 配置中心数据不一致

  • 返回无序元素集合,造成结果对比误差

失败原因很多,真正有效的失败数很少。如此一来,每次回放失败的排查成本就非常高。给业务的推进造成了巨大的阻碍。

原版repeater上报的信息不够丰富,很多情况需要看日志才能排查。目前也没有公开成熟的参考的方案。平台也进行了一些初步的探索,对回放失败的场景自动进行归类,上报更丰富的数据信息提供排查指引,帮助排查人员聚焦定位问题。同时平台也针对一些噪音进行自动识别并在回放时自动过滤降噪。

1.png

3.3.2 异步线程录制回放问题

入口主线程不等子线程执行完就返回的异步场景,当前的策略是用户可配置对异步子线程的多调用忽略,只关注主线程的执行情况。这一方式虽然可以提升这种异步线程场景的回放成功率,但是损失了异步子线程业务逻辑的回归能力。

6407.png

上面的案例就是由于应用开启了排查提效优先的开关,忽略了异步子线程的调用,导致diff比对异常,显示回放成功。该接口在生产发布时报了异常,String类型长度超长被try catch,埋点丢失。

4.展望&未来规划

流量录制回放作为测试领域的一个新兴事物,在诞生初期就吸引了广大测试同仁的关注,市场上也有些公司也对此进行了一些实践。我们对流量录制回放的实践还处于起步的阶段,一些问题的解法也在探索中 。

预发只读接口非mock回放

在得物预发环境是联通生产环境的数据库和下游应用,因此对于预发进行不mock的回放,特别是对只读接口进行不mock的回放能够在上线前的最后阶段进行一次兜底的回归校验。最难解决的问题是,当前是只读的接口难以保证后续的变更不会引入写操作。在当前阶段开放这一功能会引入额外的资损类风险敞口。

对此问题,每次回放前都进行人工校验可能可以解决,但是又引入了极大的效率问题。如何高效地保证在预发/灰度环境进行不mock流量回放不会产生资损风险,是一个值得探索的问题,需要研发跟测试的共同努力。

方案1-单回放(准实时回放)

6408.png

方案1落地遇到的问题:

1.配置中心的数据不一致,噪音比较大

2.时效问题,有10S的时差,一些业务对时效要求比较高

方案2-双回放(实时回放)

6409.png

方案2不仅避免了上面方案1的问题,另外后续规划还可以根据覆盖率沉淀有效用例集,手工添加异常用例。

通过一段时间的运行,目前已经看到了一些流量录制回放在业务迭代中产生了价值,发现了一些隐藏bug。接入流量回放明显的变化是能够将测试从繁重的回归测试、用例梳理维护等重复性高的劳动中解放出来,将重心放在测试计划的设定、思考测试策略以及自我提升的实践上,比如做些辅助排错提效的coding能力提升和加强对业务的熟悉的宽度和深度上,从而最大程度的保障业务系统的质量和稳定性。

未来期望能在不断的实践中把得物的流量录制回放体系建设得越来越完善,解放更多的生产力,产出更多的价值。

文/苏三

相关 [流量 实践] 推荐:

线上流量对比应用实践

- - 掘金 架构
我们在进行代码重构以及需求迭代时,在上线之前需要进行一轮、二轮以及回归测试,如果业务场景比较复杂,那么就会存在以下几个方面的问题:. (1)测试的周期就会相应的拉的比较长;. (2)随着业务功能的不断迭代,测试案例不一定能够覆盖全,一些冷门的隐藏比较深的问题不一定可以及时发现,回归测试难度逐渐增大;.

Oceanus:美团HTTP流量定制化路由的实践

- - 美团点评技术团队
Oceanus是美团基础架构部研发的统一HTTP服务治理框架,基于Nginx和ngx_lua扩展,主要提供服务注册与发现、动态负载均衡、可视化管理、定制化路由、安全反扒、session ID复用、熔断降级、一键截流和性能统计等功能. 本文主要讲述Oceanus如何通过策略抽象、查询、渲染和分组动态更新,实现HTTP请求的定制化路由.

ClickHouse在手淘流量分析业务实践

- - InfoQ推荐
导读:本文主要介绍手淘流量分析业务发展过程中,实时性业务分析需求的产生,实时分析目标的设定,如何进行技术的选型,以及如何基于ClickHouse构建系统架构和未来的业务预期. 流量分析与业务背景:什么是流量分析,以及我们的业务背景"大数据"带来的难题:当你的数据量是守恒的时候,需要怎么处理你的数据技术选型与产品考虑:在以上背景下,我们在技术选择和产品考虑时,都做了哪些考虑,以及为什么最终选择ClickHouse,并给大家介绍一些技术解决方案.

流量威胁分析系统与Tenable生产实践

- - Candylab
信息安全体系构建中流量监听是一种常见的防护手段,从流量抓取到日志落地,从日志分析到威胁报警,相应产品基于流量分析模式,从最上层的处理逻辑来看是相近的,使用Suricata还是Snort处理流程类似接近,最粗放的方式去理解他们,这些系统都属于“大型字符串处理过滤系统”. 实际生产中可能会使多家厂商的产品配型开源产品使用,或自主开发,无论采用那种方案,我们都可抽象出一种共通的顶层流量数据处理模式,典型的流量过滤与日志分析处理流程.

订单流量录制与回放探索实践

- - 掘金 后端
1.1 得物pandora介绍. 流量录制回放是应用端通过挂载注入录制器探针自动注册到服务端形成录制流量回流,将所有外部调用依赖的响应内容(如数据库、分布式缓存、外部服务响应等)进行完整记录. 由平台向回放器分发流量回放指令. 其核心价值是通过直接录制生产的真实数据,将生产真实数据转化成可复用、可执行的流量,快速地在测试环境中进行回放比对接口返回值和中间链路的验证.

Tuning Linode VPS-小规模低性能低流量网站优化实践

- Yousri - DBA Notes
偶然看到以前写过的这篇帖子 『小规模低性能低流量网站设计原则』,重新发到微博上引起了一点反响,觉得有必要以 Linode VPS 为例再做个简单的优化实践说明,免得总有人问我,也顺便赚点点击量 :). 假定现在你已经有了一个基本的 VPS 可用,基本内存 512MB. 参考官方提供的各种安装指导将 LAMP 这个组合运行了起来,操作系统一般 Ubuntu ,Web 服务器 Apache ,数据库 MySQL ,然后是 PHP ,以及需要安装的应用软件,WordPress 、Drupal 或是 OpenCart 什么的,一步一步配置好,能够正常的浏览页面.

大规模微服务场景下灰度发布与流量染色实践

- - DockOne.io
最近微服务很热,与微服务相关的架构、流程、DevOps都很热. 很多公司,包括传统企业,到互联网公司做交流的时候,会问道,你们互联网公司号称能够加速业务创新、快速迭代,那我们是否也可以引入类似这样的机制. 我们做微服务,主要分为两个方面,一个是业务方面,另一个是技术方面. 最下面是运维部,不过现在我们的运维部已经拓展成云计算,DBA里的数据管理部门,已经发展成大数据,于是就有了技术中台和数据中台,另外还有共享用户中心的业务中台,总体构成了下层的中台部门,在上层业务一定要做微服务化.

流量生意

- flypen - 张磊的blog
前些日子网上盛传某联盟的按月分成数据,其中番茄花园、雨木林风的分成都高达百万. 有人惊呼:原来做盗版软件这么赚钱. 也有人质疑:他们怎么可能赚这么多钱. 他们确实很赚钱,简单说,这就是流量生意. 为什么几乎每个巨头都有一个“网站联盟”. 为什么Google当年愿意付费推广Firefox. 为什么,推广Firefox、自己做Chrome的同时,把微软当作对手的Google还特意提供“优化的Internet Explorer”.

OpenStack实践

- - 开放博客
作者:Baihuogou DevOps Team. 我们在公司内部部署OpenStack主要是内部管理虚拟机的需要. 公司内部之前使用virt-manager来管理内部虚拟机,但是缺点有二:. 虽然提供图形界面,但是是桌面软件形式,需要安装软件. 所以现在需要一个新的管理软件来解决这些问题,满足两个特性:.

linux 查看流量

- - 开源软件 - ITeye博客
在Linux下怎么看网络流量. 在Windows下,我们可以很方便的通过360来查看网络流量,知道哪个进程占用的网络带宽比较多. 那在Linux下怎么看流量呢,对于Web服务器来说这是很重要的. 下面这边博客很仔细的介绍了Linux下看流量的方法:. Linux 各种查看网卡流量的方法  http://jasonyong.blog.51cto.com/47753/174197.