自研流量回放工具原理及在广告业务的应用实践

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

首页 - Wiki
Copyright © 2011-2024 iteam. Current version is 2.124.0. UTC+08:00, 2024-05-02 18:16
浙ICP备14020137号-1 $访客地图$