一、流量比对提出背景

我们在进行代码重构以及需求迭代时,在上线之前需要进行一轮、二轮以及回归测试,如果业务场景比较复杂,那么就会存在以下几个方面的问题:

(1)测试的周期就会相应的拉的比较长;

(2)随着业务功能的不断迭代,测试案例不一定能够覆盖全,一些冷门的隐藏比较深的问题不一定可以及时发现,回归测试难度逐渐增大;

(3)影响发布频率;

(4)开发以及测试人员消耗在测试阶段时间比较长,不利于腾出时间进行下一步的业务迭代、技术改造等工作;

(5)代码质量很多时候依赖人为的code review,迭代代码行较多,code review占用时间较多;

为此,我们能否解决这些痛点,使得我们的工作效率得到一定的提升,以及我们代码的质量得到一定的保证,是我们需要思考的一个问题。业内的做法一帮将线上的流量引入对比机器,将生产结果和对比机器进行实时对比,及时暴露问题,开发和测试能够及时发现并进行修改。

二、和流量回放平台的对比

目前业内的流量回放平台基本都是基于流量的录制,将流量引到测试环境进行回放,回放后分析系统存在的问题,在一定程度上只能释放一些回归测试的资源,并不能使我们开发中存在的问题在提测之前可以及时暴露,提前让开发人员解决问题,提高代码提测的质量,我们的目标是要做到即使没有测试参与,也要保证我们的代码质量,如果对线上存量业务的有影响,能够及时得到反馈,形成一个闭环处理,一个实时性的比对方案是很有必要的。

三、流量比对方案

对于一般的业务系统,我们比对的维度一般包括数据库落地数据、mq消息、接口调用请求参数以及输出四个维度,一般情况下在对比流量是整个生产流量50%情况下,基本可以覆盖生产案例场景,在此基础上针对这三个维度对比结果一致率接近100%,那么我们的上线的迭代版本对存量业务的影响是可以得到保证的。主要思路是构建请求报文,执行请求再到分析比对结果。

(1)整体架构

当生产应用处理完对应请求时,所有涉及接口的调用,mq消息的发送等埋点信息都会被记录到ES(鉴于ES是分布式、高扩展、高实时的搜索和数据分析引擎,通过其提供的接口,可以很方便的获取埋点信息),这时候会发出一条mq消息,对比工具监听mq消息进行消费,根据对应的订单信息,查询生产订单数据并进行mock,然后调用对比应用,对比工具延迟一定时间后,根据需要对比的内容进行对比,将比对结果发送ES,可以根据ES对比结果埋点查看对比一致率以及不一致的具体原因。

:生产应用:实际的生产应用集群

对比应用:我们的迭代版本部署集群

对比工具:单独专门用来跑对比的一个应用

(2)数据埋点

数据买点是比对的前提,包括接口请求的埋点、q消息的埋点,输入请求的埋点,后续对比工具读取数据进行比对

(3)数据mock

对比应用不能实际操作db以及和上下游系统进行交互,所有数据需要进行mock,mock的数据主要是调用下游接口的应答数据,mock的数据可以写入redis,对比应用在处理业务逻辑时,可以直接读取redis相应的mock数据作为返回。

(4)对比配置+数据对比

对比配置一般配置在配置中心,可以根据实际对比的维度进行配置化管理,对比表字段的对比,比如一些时间,可以配置成忽略字段,接口和mq里面的一些参数也可以进行配置化忽略对比,比如订单号、发送时间之类。

(5)结果一致率分析

对比工具可以将对比结果发送至ES,我们可以通过ES根据具体的埋点actionType筛选对应的比对结果,一致率和不一致原因。

四、总结

线上流量对比方案总体是基于基本的业务埋点,对一个业务流程里面所涉及到的具体接口,mq消息都需要有一个全面的梳理,需要指出的是,想要真正利用实时对比方案提前知道迭代风险的前提时,我们可以随时发布对比应用,这一点上面应该不要做限制。 我们的愿景是在即使没有测试参与的情况下,开发也可以保证上线代码的安全性,开发自己可以形成闭环。此对比方案存在一些优缺点如下:

优点

(1)可以及时发现代码重构以及版本迭代改动中存在的问题,并及时修复,不必等到提测之后再由测试发现,潜在问题可以提前暴露。不必过度依赖测试来发现问题;

(2)一定程度上释放回归测试的资源;

(3)保证整个研发过程的质量;

(4)可以提升发布频率;

(5)对比应用不需要单独搭建一套对比数据库用于对比,降低对比成本;

(6)对比应用和对比工具作为非核心应用,随改随发,有一定的灵活性;

(7)对比内容灵活化配置;

缺点

(1)对代码有一定程度的入侵,需要发出一个对比的mq消息

(2)对于增量业务,因为其没有对比参考对象,目前还没有有效的方式确保代码质量,只有通过ut单元测试、代码code review等手段进行辅助。

文/HUZHIMIN

关注得物技术,做最潮技术人!

线上流量对比应用实践相关推荐

  1. 微服务引擎的线上流量治理最佳实践

    简介:本实践将重点介绍如何快速集成主流开源微服务框架,实现业务零改造,解决开源框架在生产落地过程中的痛点,例如无损上下线.标签路由等,并通过托管微服务开源组件(API网关.注册中心.配置中心等)的服务 ...

  2. TCPCopy 线上流量复制工具

    TCPCopy是一种重放TCP流的工具,使用真实环境来测试互联网服务器上的应用程序. 一.描述: 虽然真实的实时流量对于Internet服务器应用程序的测试很重要,但是由于生产环境中的情况很负责,测试 ...

  3. 使用tcpcopy导入线上流量进行功能和压力测试

    使用tcpcopy导入线上流量进行功能和压力测试 JAN 8TH, 2014 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力 ...

  4. 一次线上 JVM 调优实践,FullGC 40 次/天到 10 天一次的优化过程

    点击关注公众号,Java干货及时送达 来源 | https://blog.csdn.net/cml_blog/article/details/81057966 通过这一个多月的努力,将 FullGC ...

  5. 一次线上JVM调优实践,FullGC40次/天到10天一次的优化过程

    作者 | cmlbeliever 来源 | https://blog.csdn.net/cml_blog/article/details/81057966 通过这一个多月的努力,将FullGC从40次 ...

  6. 有赞线上拨测系统实践(一)

    前言 一直以来,作为互联网软件工程师接触最多的事务之一便是持续集成(Continuous integration,简称 CI).持续集成俨然已成为主流互联网软件开发流程中一个重要的环节.现今有赞内部在 ...

  7. java线上流量复制工具_tcpcopy复制线上流量

    TCPCopy七大功能 1)分布式压力测试工具,利用在线数据,可以测试系统能够承受的压力大小(远比ab压力测试工具真实地多),也可以提前发现一些bug 2)普通上线测试,可以发现新系统是否稳定,提前发 ...

  8. 线上流量突增百万高可用保障方案

    一:事前预防 1.预估系统瓶颈 1.1 梳理核心接口 按调用量梳理Top100 PM按业务重要等级梳理下端可能起量的接口 输出终版的接口文档 1.2 评估核心接口最高的TPS 测试环境模拟生产环境数据 ...

  9. VR线上展会对比线下展会的优势,打破时空束缚

    在疫情初始,很多展会都被迫陷入沉寂,经过VR全景技术的提升,才重新让线上展会进入我们的视野.现阶段,线上结合线下展会的营销模式则成为了展会行业发展的新趋势.有了VR线上展会,不是说将线上和线下展会分开 ...

最新文章

  1. Project interpreter not specified(eclipse+pydev) (转)
  2. Graph Cut and Its Application in Computer Vision
  3. 大三下学期十一周总结
  4. 利用Docker volume修改Nginx Docker镜像里index.html
  5. Python easy_install
  6. linux系统安装与初用
  7. 迭代器适配器{(插入迭代器back_insert_iterator)、IO流迭代器(istream_iterator、ostream_iterator)}...
  8. TIME_WAIT状态过多的排查
  9. 【每周荐书系列】——《认知盈余》
  10. 内网隐蔽隧道之DNS隧道搭建(iodine)
  11. android保存裁剪图片,Android选择图片并裁剪,无法保存经过裁剪的图片
  12. 今天来看一下云测平台的测试实验
  13. IT4IT 标准助力 IT 经理控制乱局
  14. semi-suppervised learning 半监督学习
  15. 百度回应“柬埔寨吧”为境外赌场招工:情况属实 已报案
  16. python模块cpca修改源码支持国外地址解析
  17. ubuntu14.04 iso硬盘安装
  18. [编程题] 字符迷阵
  19. App推广技巧之渠道免费资源
  20. Linux使用scp命令远程复制/上传文件

热门文章

  1. 解决chrome71.0以上版本flash永久允许
  2. 【SSA三维路径规划】基于matlab麻雀算法无人机三维航迹规划【含Matlab源码 301期】
  3. 连接计算机与网络传输设备的接口设备,1394连接和本地连接有什么不同
  4. 雄岸基金战略投资 Filenet,共建分布式存储新生态
  5. html怎样图片不会失真,css解决图片失真
  6. C++重载双目运算符
  7. 通俗意义计算机网络安全,计算机网络安全技术问题与策略
  8. 大数据流的在线Heavy Hitters算法(上篇):基于计数器的方法
  9. unity mega_[MEGA DEAL] Unity A至Z游戏开发套件(96%折扣)
  10. Linux学习笔记1(鸟哥的私房菜)