Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >重构大杀器!流量回放让线上BUG无处遁形,QA团队集体沉默…

重构大杀器!流量回放让线上BUG无处遁形,QA团队集体沉默…

作者头像
JavaEdge
发布于 2025-06-01 03:59:20
发布于 2025-06-01 03:59:20
820
举报
文章被收录于专栏:JavaEdgeJavaEdge

本文已收录在Github关注我,紧跟本系列专栏文章,咱们下篇再续!

流量:某个时间段内的所有请求,通过手段把发送到A应用的所有请求录制,然后把这些请求统一转发到B应用,让B应用接收到的请求参数跟A应用一致,实现A接收到的请求在B应用里面重新请求了一遍。整个过程即“流量回放”。

1 流量回放的意义

经常多需求并行开发,还可能夹杂着应用重构和拆分。基本很难做到不改动老逻辑,只要有改动就可能存在考虑不周。

代码小改动的业务需求,这做法一般不出问题。但对大改动应用,如应用中很多基础逻辑都被改动过,还通过已有Case去验证功能正确性,就很难保证应用上线后不出故障,毕竟我们靠自己维护的Case相对线上运行的真实环境少很多。

会向QA求助,希望他们多加Case。但因改动代码逻辑影响范围大,想圈定一个比较确定的测试范围难,相对保险的是把整个项目都回归测试,最大程度避免上线出问题,但也不是万无一失,因为线上不仅环境复杂,而且使用场景不好评估,这种方式耗时也长。

2 更可靠、廉价方案?

传统QA测试出问题的根本原因:改造后的应用在上线后出现跟应用上线前不一致的行为。

测试就是为保证改造后的应用跟改造前应用的行为一致,测试Case也都尽力模拟线上运行行为,但仅通过我们自己枚举测试Case不能代表线上所有行为。因此最好用线上流量验证,但直接把新应用上线肯定不行,一旦新改造的应用存在问题就可能导致线上调用方业务受损。

可先把线上一段时间内的请求参数和响应结果保存,然后把这些请求参数在新改造应用里重新请求,比对改造前后的响应结果是否一致,间接达到使用线上流量测试的效果。

有了线上的请求参数和响应结果后,再结合持续集成,可让改动后的代码随时用线上流量验证。

3 RPC实现流量回放

如TcpCopy、Nginx。但线上环境要使用这些工具时,还得找运维团队帮把应用安装到应用实例,再按照你的需求给配置好才能使用,整个过程繁琐而且重复做无用功,有无更好办法?尤其是在RPC情况下。

RPC是用来完成应用间通信,即应用间所有请求响应都会经RPC,那在RPC里是否就能很方便地拿到每次请求的出入参数?拿到这些出入参数后,把它们旁录下来,用异步方式发到一个固定地方保存,就完成流量回放里面的录制功能。

咋把这些请求参数转发到要回归测试的应用?

在RPC中,把能接收请求的应用叫服务提供方,只需模拟一个应用caller,把刚才收到的请求参数重发一遍到要回归测试的应用,然后比对录制拿到的请求结果和新请求的结果,完成请求回放。

RPC回放过程

相对其它现成流量回放方案,在RPC里内置流量回放功能,更方便,还可更多定制,如在线启停、方法级别录制。

4 总结

保障线上应用的稳定,不管是通过应用架构升级,还是修复现有问题。就是不仅要保障已有业务稳定,还要快速完成各种新需求,应用代码就经常变化,变化后就会引入新的不稳定因素。

为保障应用升级后,业务行为还能保持和升级前一样,大多都是依靠已有TestCase验证,但不是完全可靠。最可靠是引入线上Case去验证改造后应用,把线上真实流量在改造后应用里回放:

  • 节省整个上线时间
  • 弥补手动维护Case存在的漏测缺陷

应用引入RPC,所有请求流量都会被RPC接管,很自然在RPC里支持流量回放。虽然这个功能本身不是RPC核心功能,但对使用RPC的人,有了这功能,就可更放心升级应用。

5 FAQ

还可用流量回放做啥?

  • 监控和告警:通过持续回放关键接口的流量,实时监控系统的正确性和性能,及时发现异常。
  • 版本对比:在新旧版本同时运行时,将流量同时发送到两个版本,对比响应结果,确保新版本兼容性。
  • 自动化测试增强:结合自动化测试框架,使用真实流量作为测试用例,补充人工编写的测试用例,提高覆盖率。
  • 故障演练:模拟故障场景,观察系统在真实流量下的容错能力,比如服务降级、重试机制等。
  • 数据迁移验证:在数据迁移后,回放历史请求,验证新数据存储的正确性。
  • 用户体验分析:分析用户请求模式,优化接口性能,提升用户体验。

不过,每个用途都有其挑战。例如,版本对比需要同时维护两个版本的环境;故障演练需要精细的控制机制避免影响真实用户;数据迁移验证需要确保数据一致性和隔离性。

类似的线上验证系统

核心就是拿到线上接口的出入参和接口信息,转存到另一个系统,在这系统再调用改造、开发、或重构的接口(总之只要有变化或想测试一下同样的如入参,调用同样的方法,只是逻辑稍微不同了,是否结果一样)就可以通过,线上验证系统来验证一下。

使用限制
  • 底层数据依赖是否一致,入不一致那结果不一致也太正常了
  • 和当前系统状态或者当前系统时间是否相关,如果相关,结果也可能不一致
  • 方法是否幂等,如果不幂等,结果大概率也不一致的。

虽有局限性,不过也能解决一些问题。结果是否一致可定制化,所以对某些特殊情况也可使用。

实现思路
  • 使用动态代理,AOP切面拦截对应的方法,获取出入参
  • 把拦截信息异步转存到线上验证系统
  • 通过线上验证系统调用待验证的方法
  • 收集结果比对信息,有报警功能(当然,在验证系统侧需要先收集和配置响应的待验证系统的信息,比如:定制化结果是否一直的条件)
  • 一般就是用于线上验证或系统重构时使用

阿里开源sandbox-repeter:https://github.com/alibaba/jvm-sandbox-repeater。

Q:既然能在rpc做,是不是可放到网关做,如机房迁移或服务重新部署一套,在网关做流量采集然后回访到另一网关,后面的服务都涉及到了,可行?

A:在入口流量上做也是一种方案。

Q:应该还可恢复数据,如一段时间数据由于某种原因丢,用流量回放功能恢复这段时间数据,当然要求接口幂等,否则会导致错误数据。

A:恢复数据更多是采用log。

Q:游戏角度,可用流量回放进行玩家脚本录制,然后多线程进行大批量脚本执行从而达到压力测试的效果。

一般rpc都会有扩展,只要在扩展里面进行异步处理一下就可以满足。

Q:只是录制请求和响应感觉不够。 响应可能和用户数据有关。 响应=请求参数+用户状态+其他依赖方状态。

A:你想表达数据隔离?好比如count场景确实可能不够。

Q:流量回放还可:

  • QA做接口探活,用线上数据调用接口(http接口只探get方法)
  • 算法逻辑的验证:可用历史请求参数重跑一遍新算法逻辑,验证新算法逻辑的效果

Q:参数和返回值也得存下来,安全隐患较大

A:确实,存储请求和响应数据可能包含敏感信息,比如用户个人信息、支付信息等。因此,在实施流量回放时,必须对数据进行脱敏处理,或者确保存储和传输的安全性。例如,可以对敏感字段进行加密或替换,避免数据泄露

Q:非幂等接口想用的话,TC里最好有完整的创建数据,清理数据调用,难度也比较大。

A:如支付接口,如果回放时重复调用,可能导致多次扣款。这时候,处理起来确实复杂。可能方案:

  • 在测试环境中使用mock的支付服务,避免真实交易
  • 在回放前清理测试数据,确保每次回放都在干净的环境中进行
  • 标记测试请求,让下游系统识别并处理测试数据,避免影响真实业务

Q:感觉没啥用处。如付款接口,你不能通过入参、出参相同就判断里面执行结果相同,都是返回付款成功,你咋知道实际付款了一次or两次?你可能会说把付款成功金额返回,但有bug的情况,付款了两次,却返回一次的成功金额。按回放功能来跑,这bug发现不了。

A:如果系统存在bug,导致重复付款但返回成功一次,这种情况流量回放可能无法发现,因为响应结果相同。这时需结合日志分析或其他监控手段检测重复操作。或在回放时不仅比对响应结果,还检查数据库状态或其他副作用,但这增加复杂度。

重现生产问题:不好定位问题的时候,也是可以试试流量回放重现生产问题。

Q:用生产环境的流量来做压测。

A:使用真实流量进行压测,比人工构造的请求更贴近实际场景,能更真实地反映系统性能。但需要注意,压测环境和生产环境的数据隔离,避免影响真实用户。

Q:可是场景模拟,镜像流量只是其中一步,所有外部接口的mock也得和线上当时的场景一致,不然最后也可能脱离预期。

A:外部接口的mock。为了准确模拟线上环境,所有依赖的外部服务在回放时需要保持与录制时一致的状态,或者使用录制的外部响应数据进行mock。否则,回放结果可能因为外部服务状态变化而不准确。

Q:流量回放适用的方法是不是有限制,需要幂等的方法才可以?

A:只要做好隔离了,不用区分。

本文由博客一文多发平台 OpenWrite 发布!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
国产开源一款流量回放平台产品,无侵入线上流量录制和流量回放平台
Moonbox:月光宝盒 Moonbox(月光宝盒)是[JVM-Sandbox]生态下的,基于[jvm-sandbox-repeater]重新开发的一款流量回放平台产品。在jvm-sandbox-repeater基础上提供了更加丰富功能,同时便于线上部署和使用 使用场景 你是否遇到过以下的问题? 线上有个用户请求一直不成功,我想在测试环境Debug一下,能帮我复现一下吗? 压测流量不知道怎么构造,数据结构太复杂,压测模型也难以评估,有什么好的办法吗? 不想写接口测试脚本了,我想做一个流量录制系统,把线上用户
开源日记
2023/04/11
2.3K0
国产开源一款流量回放平台产品,无侵入线上流量录制和流量回放平台
开源 | 流量回放平台 AREX 在携程的大规模落地实践
携程AREX团队,机票质量工程组,主要负责开发自动化测试工具和技术,以提升质量和能效。
携程技术
2024/04/23
8981
开源 | 流量回放平台 AREX 在携程的大规模落地实践
一、为什么要使用流量录制与回放?
近几年,vivo互联网领域处于高速发展状态,同时由于vivo手机出货量一直在国内名列前茅,经过多年积累,用户规模非常庞大。因此,vivo手机出厂内置很多应用,如浏览器、短视频、直播、资讯、应用商店等都是直面用户的高并发、复杂系统。这些面向用户的系统对使用体验要求非常高,对这些业务的质量保障是重中之重。
落寞的鱼丶
2022/02/21
5.8K0
1.8 Star的Go流量录制回放工具,录制线上真实请求流量进行回放测试
随着微服务架构的兴起,服务之间的依赖关系变的越来越复杂,软件测试也面临新的挑战:系统升级频繁、服务依赖众多等等。
入门笔记
2022/11/14
2.5K0
1.8 Star的Go流量录制回放工具,录制线上真实请求流量进行回放测试
基于RPC接口的业务侧流量回放
在产品需求迭代过程中,功能测试与回归测试是必不可少的两个环节。对于改动较大的项目,首先,确保功能的实现符合产品逻辑并做到100%没有问题离不开有效的功能测试;其次,项目中很多逻辑的改动都是在原有功能的基础上进行的,这时候就需要一定的回归测试。通常,在功能测试时,人工case不能模拟线上用户的所有行为,且具有一定的主观性;回归测试时,采用全面回归的方式往往也伴随着测试成本的增加。一个好的方式就是利用线上流量来验证。
科技新语
2022/08/19
3910
流量录制与回放在vivo的落地实践
近几年,vivo互联网领域处于高速发展状态,同时由于vivo手机出货量一直在国内名列前茅,经过多年积累,用户规模非常庞大。因此,vivo手机出厂内置很多应用,如浏览器、短视频、直播、资讯、应用商店等都是直面用户的高并发、复杂系统。这些面向用户的系统对使用体验要求非常高,对这些业务的质量保障是重中之重。
2020labs小助手
2022/02/15
2K0
干货 | 携程QA-流量回放系统揭秘
作者简介 康猛,携程网站运营中心资深技术支持工程师。在互联网系统架构设计、后端开发、性能测试领域有多年实战经验。喜欢钻研新技术,善于转化研究成果,提升工作效率。 一、背景 众所周知,在产品迭代过程中,功能测试与性能测试是必不可少的两个环节。在产品上线的过程中,做容量预估离不开性能测试,在产品迭代过程中,测试Case覆盖率是功能测试必须要关注重要指标,甚至是一行代码的修改,没有经历过严格的功能与性能测试,都有可能导致大的生产故障。 近年来,携程生产环境应用改造项目逐渐增多,快速构造贴近生产的测试用例,压力可调
携程技术
2018/07/05
5.1K0
订单流量录制与回放探索实践
什么是流量录制回放?流量录制回放是应用端通过挂载注入录制器探针自动注册到服务端形成录制流量回流,将所有外部调用依赖的响应内容(如数据库、分布式缓存、外部服务响应等)进行完整记录。由平台向回放器分发流量回放指令。其核心价值是通过直接录制生产的真实数据,将生产真实数据转化成可复用、可执行的流量,快速地在测试环境中进行回放比对接口返回值和中间链路的验证。
用户10346649
2023/02/09
1.2K0
订单流量录制与回放探索实践
什么是流量录制回放?流量录制回放是应用端通过挂载注入录制器探针自动注册到服务端形成录制流量回流,将所有外部调用依赖的响应内容(如数据库、分布式缓存、外部服务响应等)进行完整记录。由平台向回放器分发流量回放指令。其核心价值是通过直接录制生产的真实数据,将生产真实数据转化成可复用、可执行的流量,快速地在测试环境中进行回放比对接口返回值和中间链路的验证。
得物技术
2023/03/22
1.2K0
订单流量录制与回放探索实践
拨开流量录制回放从基建到业务落地的迷雾
作者 | 汪成坤 策划 | 褚杏娟 在泛敏捷思潮变革、DevOps 大行其道的背景下,小步快跑的模式极大程度压缩了质量保障活动的时间,传统的自动化测试工具已无法满足持续交付的需求。流量录制回放的概念近年来愈发火热,从业界大会到社区论坛,众多工程师进行了大量的思辩悟,肯定了 API 录制回放能有效地解决测试、研发工程师在质量活动中的核心痛点从而带来可观测的研发效能提升。 流量录制回放的核心价值是通过直接录制生产的高保真数据,快速地在测试环境中进行回放比对接口返回值和中间链路的验证。录制回放很热,行业
深度学习与Python
2023/03/29
1.1K0
拨开流量录制回放从基建到业务落地的迷雾
从入门到上瘾,滴滴开源的 RDebug 让人欲罢不能
滴滴这家公司,不管它每年所说的亏了多少?赔了多少?也不管它到底有没有方便我们出行?我们只讨论它开源的几个强悍的产品对我们开发的帮助和影响。
业余草
2019/03/15
1.2K0
从入门到上瘾,滴滴开源的 RDebug 让人欲罢不能
流量回放工具
在评估某个服务可用性时,一种常见方式是采用一些压测工具(如ab/hey/jmeter/siege/wrk/locust等)压测某几个核心接口,一般看达到某个TPS/QPS时,CPU/内存等资源的水位;或者固定资源的阈值,看最高能达到的TPS/QPS。
fliter
2023/10/24
6530
流量回放工具
全场景流量验证系统
Tech      导读 本文介绍了一种基于线上流量实现对重构系统进行功能和性能验证的实践方案。针对线上流量如何拦截、如何录制、如何存储、如何回放以及如何发压均作了详细说明,为具有类似需求的读者提供了一种可供参考的思路。 01 业务背景 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Suite执行器还有哪些执行器呢?由此我的Runner探索之旅开始了! 随着百川项目的启动,中台需要对订单流量收口,将ECLP、各BP的接单入口全部切换至百川统一接单系统。且各个接
京东技术
2022/06/17
1K0
全场景流量验证系统
流量录制回放,不是银弹!
前几天在技术交流群,大家又讨论起了流量录制回放的话题。我观察了一下,讨论的人不少,大体有这两种观点:第一种观点认为,流量录制回放的应用前景很广阔,能大幅度提高测试效率和技术逼格,都想在自己团队落地,但需要一些最佳实践参考;第二种观点则认为只有大厂才能做这个实践,小公司就别想了。
老_张
2024/03/04
9920
流量录制回放,不是银弹!
自动化测试之流量回放技术「建议收藏」
本篇背景是另外一同事朋友,最近在利用流量回放技术应用在服务端接口自动化测试方面,还在各部门全力推进阶段,未来效果暂且不好说,但这部分内容确实各大公司,测试技术大会等等的热词,由于我没参与但我很感兴趣,所以邀请普及一篇,后边应该还会带来实战篇,本公众号坚持原创和干货分享,欢迎长期关注,一同成长,如果你有好的实战分享也欢迎投稿。
全栈程序员站长
2022/09/14
5K0
自动化测试之流量回放技术「建议收藏」
数据平台流量回放最佳实践|精选
数据平台利用大数据智能分析、数据可视化等技术,对公司内外部经过采集、建设、管理、分析的多源异构数据进行呈现和应用,实现了数据共享、日常报表自动生成、快速和智能分析,深度挖掘数据价值,满足企业各级部门之间的数据分析应用需求。因而也具有数据量大,场景多,数据准确性要求高,查询性能要有保障等特点。
得物技术
2023/06/28
9220
数据平台流量回放最佳实践|精选
流量录制与回放技术实践
本文主要介绍了流量录制与回放技术在压测场景下的应用。通过阅读本篇文章,你将了解到开源的录制工具如何与内部系统集成、如何进行二次开发以支持 Dubbo 流量录制、怎样通过 Java 类加载机制解决 jar 包版本冲突问题、以及流量录制在自动化测试场景下的应用与价值等。文章共约 1.4 万字,配图17张。本篇文章是对我个人过去一年所负责的工作的总结,里面涉及到了很多技术点,个人从中学到了很多东西,也希望这篇文章能让大家有所收获。当然个人能力有限,文中不妥之处也欢迎大家指教。具体章节安排如下:
田小波
2021/08/31
6.6K3
流量录制与回放技术实践
流量回放平台
测试是产品发布上线的一个重要环节, 但随着业务的不断壮大和快速迭代, 每次上线需要回归的功能会越来越多, 周期越来越长, 测试同学的压力会越来越大, 老板越来越不满意, 恶性循环就此开始...
一个架构师
2022/06/27
1.5K0
流量回放平台
【干货】流量录制回放工具:JVM-sandbox-repeater!
在软件开发和测试过程中,我们经常会遇到需要对网络请求进行录制和回放的需求,以便进行调试、测试和分析。为了模拟真实的用户请求,我们通常会使用各种流量录制回放工具来记录并重放网络请求。
测试开发技术
2024/07/31
5140
【干货】流量录制回放工具:JVM-sandbox-repeater!
如何通过GoReplay进行线上流量录制与回放
GoReplay是一款开源的用来进行http流量录制与回放的工具,因此可以通过它来进行线上真实流量录制然后将录制的流量回放到测试环境用来确认新开发的功能是否有问题,这样可以极大的提高新功能发布的信心,不得不说是一款神器。
测试邦
2019/08/22
7.2K0
如何通过GoReplay进行线上流量录制与回放
推荐阅读
相关推荐
国产开源一款流量回放平台产品,无侵入线上流量录制和流量回放平台
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档