《自研流量回放工具原理及在广告业务的应用实践_李茂森.pdf》由会员分享,可在线阅读,更多相关《自研流量回放工具原理及在广告业务的应用实践_李茂森.pdf(28页珍藏版)》请在三个皮匠报告上搜索。
1、自研流量回放工具原理及在广告业务的应用实践分享人:李茂森个人简介姓名:李茂森所在组织:技术中台-质量工程部专业领域:服务端测试目 录010203业务背景及测试挑战自研流量回放工具FlowCopy介绍流量回放在广告业务中的应用04总结与展望业务背景与测试挑战01广告投放系统介绍高并发 亿级PV 万级QPS低时延 处理时间100ms 传输数据量大链路复杂 大型分布式系统 对外为HTTP接口 多模块之间频繁RPC通信广告系统技术特点测试挑战随着系统复杂度的提高,传统自动化测试的弊端凸显高成本人工编写自动化脚本,耗时高需求变动较快,自动化脚本维护成本高自动化脚本质量与QA个人经验和能力强相关覆盖场景有
2、限自动化脚本只覆盖核心场景特殊场景(第三方/模型依赖)覆盖难效率低排查自动化问题效率低,赋能RD效果差自研流量回放工具FlowCopy介绍02流量回放介绍简单来说,流量录制与回放是通过复制线上真实流量(录制),在测试环境进行模拟请求(回放)相对于传统自动化测试,流量回放技术可明显提高测试效率低成本无需人工编写自动化脚本使用工具录制回放流量,维护成本低覆盖场景全面使用真实流量,覆盖大部分场景定制筛选特殊流量,辅助人工测试效率高大量真实请求测试,快速定位问题广告业务测试中的流量录制回放需求现有流量回放工具是否能满足需求广告引擎流量录制回放需求:RPC协议支持流量的录制需要支持多种RPC协议,如Th
3、rift、Brpc等 明文流量录制多数RPC协议为二进制,需要录制为明文流量 C+语言支持尽量的多语言支持,必须能够录制C+相关应用现有流量回放工具介绍业务无侵入,因为intercept的存在,实时导流对线上影响小基本tcp协议栈的协议都可以支持,几乎是目前支持协议最多的流量回放工具基于ip层发送,流量更加真实支持分布式架构,可以当作压测工具使用优点:不足:部署难度大,需要同时部署tcpcopy和intercept,参数较复杂 录制和回放都是基于底层数据包,难以进行流量的筛选和定制安装部署简单、对业务应用无侵入,只占用机器带宽支持过滤和修改流量,可实时转发流量支持回放速率控制,可用于性能测试优
4、点:不足:开源版本只支持HTTP1.1及以下协议 无法解析二进制的数据交互协议,如Protobuf等不仅支持流量回放,还可以扩展到sandbox的其它能力通用的录制/回放能力,多协议支持强大的debug功能,支持内部调用链的追踪优点:不足:只适用于JAVA类应用 有一定上手难度,熟悉JAVA/JVM是否满足需求:是否满足需求:是否满足需求:不满足,不支持C+应用不满足,无法录制明文流量不满足,无法录制RPC协议流量回放的演进之路1.0基于应用层录制2.0基于网络协议栈录制流量回放1.0业务测试中需要明文流量,但现有工具无法支持RPC流量录制背景:1、人工在业务系统中插入代码并编译2、搭建测试环
5、境后,使用tcpcopy等工具在系统入口处回放流量实现方案:1、系统代码变更,需要同步修改编译,维护成本高2、侵入式保存流量,可能影响程序功能3、依赖真实测试环境配置,环境搭建成本高4、测试环境配置会影响流量保存的真实度存在问题流量回放2.0无侵入式保存HTTP/RPC明文脱敏流量,支持千级QPS流量保存/改写FlowCopy架构通过网络协议栈获取流量,无侵入使用epoll多路复用加多线程处理,高性能HTTP/RPC多协议支持,明文脱敏流量存储录制请求流量无需测试环境FlowCopy使用以GRPC接口录制为例:流量录制FLowcopy1、无需手动编译proto文件,运行指定方法名称即可2、无需
6、真实测试环境,以JSON格式存储protobuf请求数据3、支持转发到特定服务,获取相关返回流量1、启动flowcopy,机器ip为192.169.5.3-req_addr=192.162.1.2:8000-port=8000-timeout=1000-method_name=example.personSerivce/sendrequest-output_filename=./dump.json2、启动tcpcopy,目标ip为flowcopy机器iptcpcopy-x 8000-192.169.5.3:8000-s 192.168.5.4-c 192.168.1.x零代码编写、一键录制!参
7、数字段描述示例服务转发地址req_addr需要转发gRPC服务的IP地址127.0.0.1,为空则不转发服务端口portgRPC服务的端口号。50051请求超时时间timeout单个请求的最长转发时间,单位为毫秒。5000方法名method_namegRPC方法的全名。说明格式为包名.接口名/方法名。package.service/methodproto文件名proto_namegrpc方法所在a:1,b:2说明多个元数据以半角逗号(,)分隔。流量输出路径output_filename流量存储的文件名称./dump.json线上服务技术难点-明文流量录制/Person.protomessage
8、 Person required string userName=1 optional int64 favoriteNumber=2;repeated string interests=3;/Person.json userName:Martin,favoriteNumber:1337,interests:daydreaming,hacking/Person.thriftstruct Person1:required string userName,2:optional i64 favoriteNumber,3:optional list interestsIDL序列化为JSON格式HTTP协
9、议多为明文传输,Protobuf、Thrift等二进制数据传输格式,如何用明文表示?为什么使用JSON格式:1、JSON格式较主流,易于构造和阅读2、目前IDL多为TLV(Tag|Length|Value)格式,方便转换注意:1、暂无通用序列化方式2、自研序列化时需制定统一的转换规则自动化流量录制 流量脱敏采集,千万级存储,随用随取 全自动化录制,无需人工干预 自动更新废弃数据,周期执行 通用JSON数据格式,相关测试工具直接使用流量录制流量回放在广告业务中的应用03流量回放的应用-Diff测试优点:基于线上真实数据,覆盖场景全面 效率高,快速发现问题 操作简单、标准化程度高整体思路:获取线上
10、真实流量 使用自研工具,在不同的环境进行请求回放 对比接口的返回结果Diff测试-应用举例测试场景:系统的重构或迁移,整体功能不变或变动更少,DIFF测试可快速发现问题问题举例:XX服务重构项目中,90%问题通过DIFF测试发现,大幅节省QA时间系统重构测试:测试场景:新功能提测,DIFF测试保证历史逻辑不受新代码影响问题举例:XX服务新功能代码修改,新功能实验关闭下存在较多Diff,排查后发现代码逻辑有误功能回归测试:测试场景:新功能提测,可以通过DIFF测试结果,判断是否功能符合预期问题举例:对于XX服务效果提升类DIFF测试,针对特定字段结果分析,判断功能不符预期新功能验证测试:Diff
11、测试应用中遇到的问题 除了程序bin文件,其它配置/数据需要完全相同 可利用容器数据卷,Apollo同步等方式实现数据一致性:第三方/下游依赖:程序逻辑存在随机?配合RD进行业务去随机开关 时间戳等动态变化字段?结果预处理,黑白名单规则、浮点截断 返回数组格式顺序不一致?复杂数据排序,JSON-Schema规则对比程序逻辑随机,特殊字段处理:核心数据脱敏:录制流量时,对敏感数据做预处理,确保数据加密和脱敏 录制流量时,需要同时录制请求对应的响应数据 配合自研MockServer进行测试.流量回放的应用-性能测试整体思路:线上获取流量 使用自研工具,在测试环境对程序进行性能测试 对比不同版本的性
12、能结果 真实流量压测,结果指标可信度强 可筛选特定流量,按需压测 完全节省压测请求构造时间,随用随压优点:性能测试-应用举例测试场景:对于测试服务上线前进行性能测试,得到的结果与基线版本(线上)对比问题举例:XX服务在QPS300情况下平响时间上涨18%,排查为代码逻辑缺陷导致,修复后上线上线前性能卡点:测试场景:对于性能优化的需求,可基于性能测试得到的结果反复优化,以达到预期目标问题举例:XX服务性能优化项目,QPS800下压测平响时间降低8%,TP99时间降低12%,与上线后数据基本一致性能专项验证:测试场景:对于测试服务上线前可进行稳定性测试,提前发现导致程序崩溃等严重的问题问题举例:X
13、X服务在压测后进程崩溃,分析Coredump后发现多线程处理异常逻辑,修复后上线程序稳定性测试:流量回放的应用-功能测试&问题排查整体思路:线上获取流量 使用自研工具,在测试环境对程序进行请求 观察测试环境返回或日志,排查问题 功能测试:根据线上真实请求,转换为测试请求 问题排查:基于线上问题场景,快速筛选流量进行排查应用举例:应用数据流量存储级别1000w+接口覆盖率发现问题数量100%500+流量回放相关测试技术建设至今,已经应用于360广告投放引擎的所有模块,完全嵌入功能、性能及Diff测试流程,成为引擎端QA质量保障的重要手段总结与展望04未来展望流量回放3.0 探索基于ebpf的云原生流量回放方案 降低部署难度,提高功能丰富度 智能流量采集.平台化/服务化 更好结合现有测试平台,实现流量回放平台化 结合流水线能力,实现服务化推广到更多业务 更多业务推广,提升工具ROI 完善接口规范和使用说明THANK YOU