1、得物流量录制回放实践周官宝得物 中间件平台周官宝拥有5年的后端开发经验;曾任职美团、喜马拉雅,现任于得物,主要负责流量录制回放平台;得物-中间件平台 资深后端工程师嘉宾照片目录CONTENTS背景01 演进02 03 落地效果04 展望未来05 稳定性01 背景01编写成本高02维护成本高03覆盖率不足04断言维护成本高传统自动化手动要深入理解业务,同时需要额外的造数据和清数据代码变更导致用例失效,线下环境不稳定导致无效排查成本平衡到聚焦P0P1业务场景,带来覆盖率不足的问题断言数量庞大,人工维护力不从心传统自动化手动流量回放优势开源项目选型:Jvm-Sandbox-Repeater&Jvm-
2、sandbox真实流量用例创建成本低成功率稳定无需编写断言02 演进v1.0线下Mock回放v2.0预发不mock单回放v3.0预发不mock双回放v4.0其他模式探索2020年8月2021年12月2022年4月2023年3月四阶段主线-降噪业务架构图演进V1.0-线下mock回放V1.0-线下mock回放-原理&插件插件类型插件类型原版是否支持原版是否支持得物是否支持得物是否支持dubboYYhttp(okhttp)Y(N)Y(Y)Mq(rocketMq/kafka)N/NY/YjavaYYfeignNYSQL(mybatis(plus)/ibatis/spring-data-jpa/jdb
3、c直连)Y(N)/Y/Y/NY(Y)/Y/Y/YNoSQL(redis/es/mongodb/hbase(lindorm)Y/N/N/N(N)Y/Y/Y/Y(Y)本地缓存(caffeine/eh-cache/jetcache/guava)N/N/N/NY/Y/Y/Y其他(email/exception/oss)N/N/NY/Y/Y支持的入口HTTPDubboMQ将回放的子调用URI与生产录制子调用的URI匹配,没有匹配到,表现URI不一致将回放的子调用URI与生产录制子调用的URI匹配,匹配到,再根据录制子调用参数与回放子调用参数匹配,不匹配,表现为参数不一致将生产录制的入口响应与回放的入口响
4、应进行diff生产录制到,回放时,该子调用没有走到,表现为少调用多调用-URI不一致入口响应diff多调用-参数不一致少调用V1.0-线下Mock回放-降噪-失败四种分组V1.0-线下mock回放-失败四种分组-多调用多调用-URI不匹配V1.0-线下mock回放-失败四种分组-多调用多调用-参数不一致V1.0-线下mock回放-失败四种分组-少调用少调用V1.0-线下mock回放-失败四种分组-响应diff响应diffV1.0-线下mock回放-降噪-自动化流程同版本:是指将回放环境的代码分支(CommitID)与生产代码分支部署一致,目的补充用例,提高覆盖率,降低噪音新(待发)版本:是指回
5、放环境的代码分支是提测前的合并的分支,目的是检查新代码是否符合预期V1.0-线下mock回放-降噪时间差异 将回放时间还原到录制时间 自定义子调用,通过mock进行还原时 间 还 原 全局 应用级别(永久和临时)接口级别(永久和临时)忽 略 配 置 应用级别 接口级别 临时预览数 组 排 序系统噪音数组乱序异常流量RPC/Hbase 超时、主线程等子线程超时、限流、数据库主键重复等异常流量产生回放噪音Dubbo依赖下游dubbo服务没有部署,回放会失败配置不一致没有录制配置,回放时会存在配置不一致导致回放失败。V1.0 线下mock回放-降噪Mock回放稳定用例创建成本低无需维护断言噪音大-异
6、步线程、本地缓存发现能力弱部分技术重构和迁移不支持优 势劣 势V1.0-线下mock回放-小结演进V2.0-预发不mock单回放V2.0-【JAVA】预发不mock回放【读操作】-单回放-原理V2.0-【JAVA】预发不mock回放【读操作】-单回放-降噪-读写分离读接口(操作)写接口(操作)将读接口在预发不mock回放将写接口在线下mock回放应用接口接口的业务场景是一个读场景,在不同时候多次发起请求,返回都是一样,这种情况可以标记为“只读”一个接口中存在对redis 的key过期处理,但这个不影响剩余逻辑处理和返回响应,这样的接口也希望通过预发不mock进行回放由于某些读的业务场景需要通过