《得物流量录制回放实践.pdf》由会员分享,可在线阅读,更多相关《得物流量录制回放实践.pdf(34页珍藏版)》请在三个皮匠报告上搜索。
1、POIZON2018年硕士毕业武汉大学拥有5年的后端开发经验;曾任职美团、喜马拉雅,现任于得物,主要负责流量录制回放平台POIZON基 本 介 绍01平 台 成 果02业 务 架 构 图03预 发 不 m o c k 回 放04线 下 m o c k 回 放05稳 定 性06应 用 场 景07展 望08什么是流量回放流量回放vs接口自动化流量回放接口自动化用例编写人工写代码自动维护成本高低检查点人工定义-关键字段1.自动-Response全文2.自动-子调用入参业务逻辑测试支持支持不好覆盖率人工准备场景真实流量不计成本:接口自动化流量回放相同成本:流量回放接口自动化接入应用数 平台发现问题技术
2、改造节省人日接口中含有Redis部分写操作(没有其他写操),这种情况也可以标记只读。在回放过程中针对这种情况平台也会进行mockRedis write mock接口中含有发mq消息(没有其他写操作),这种情况也可以标记为只读。在回放过程中针对这种情况平台也会进行mockSend mqmock接口中存在写日志(mybatis insert),这种情况也可以标记为只读。在回放过程中针对这种情况平台也会进行mockMybatis insert mock将将Response的的json排除无需比对字段排除无需比对字段忽略数组顺序影响忽略数组顺序影响结果差异比对结果差异比对只有新增只有删除只有内容变更新
3、增&删除删除&内容变更新增&删除&内容变更接口维度+差异字段分组问题背景解法如何解决小流量场景(稀疏流量)的录制问题?受限于业务方的接口的qps、平台接口采样、平台限流及生产机器集群(只会录制其中某一台机器)的缘故,导致稀疏流量(小流量)很难被采集到,那么流量未覆盖的场景会变成未知的风险。以下主要针对读接口中稀疏流量(主要是接口维度的小流量问题)问题背景解法如何避免生产数据污染?预法回放是不mock回放,如何触发写操作,可能导致污染生产环境的数据(目前我司生产和预发共用一套数据库)【人工】只读接口人工确认【自动】平台回放前对疑似写操作拦截【自动】平台回放中对疑似写操作拦截并阻断回放遗留问题 没
4、有被沙箱切到的子调用无法拦截,如使用httpcomponents客户端的http 目前只能对回放应用本身写操作拦截,无法拦截下游应用的写操作问题背景解法如何解决跨服务下读场景的写操作问题?(流量标识)预发不mock回放可能会影响某些业务,如数据埋点、算法的推荐模型等在链路上下文中添加流量标识,以便区分正常流量和流量回放的流量其他应用场景根据回放标识,业务可以定制回放流量的处理逻辑 影子表方案实施 写保护操作 不同的限流操作 不同的日志策略在实际的使用过程中发现存在以下问题,虽然录制回放很多流量,但是这些流量覆盖哪些场景,用户是无法感知的。原因是没有衡量指标,就无法放心使用其进行回放。如何衡量这
5、个回放结果是否可靠?方案概念优势劣势接口维度覆盖率已覆盖接口/所有的接口简单不能很好衡量,粒度比较粗场景(标签)维度覆盖率已覆盖场景/所有的场景场景有具体的含义标签管理维护比较困难和耗时代码覆盖率将使用一个或多个标准来确定在执行测试期间代码是如何执行的,指标有:函数、分支和行覆盖率等在定义程度上可以反衡量你的代码不能够准确的衡量,原因只能覆盖读的场景检查点一:对录制的子调用与回放的子调用参数匹配,如case1、case2、case3等检查点二:将录制的Response与回放的Response进行diff,如case4将将Response的的json排除无需比对字段排除无需比对字段忽略数组顺序影
6、响忽略数组顺序影响自动忽略时间的差异自动忽略时间的差异结果差异比对结果差异比对接口失败原因失败字段统计报告覆盖率 接口维度覆盖率 多调用-参数不一致 多调用-uri不匹配 少调用$.xx字段比对差异 失败分类饼图 失败结果饼图 流量回放统计数据 子调用链路覆盖率 代码覆盖率问题背景解法如何解决嵌套录制导致回放失败问题一些中间件、第三方框架或业务自己封装的框架可能会出现两个嵌套的子调用(平台切的两个切面),由于录制会录制到两个子调用,但是回放只会匹配到外层子调用(mock掉,不会调用嵌套在里面的子调用),导致回放失败。对于嵌套录制子调用,可以通过只录制嵌套外层的子调用,不录制嵌套在里面的子调用,
7、即可解决上面的问题问题背景解法如何解决时间差异带来的回放失败问题在一些业务服务逻辑中存在和时间相关的逻辑,由于录制的时间和回放的时间不一致导致回放失败。平台这边目前有两种解法,第一种解法通过将时间还原到录制的时间,但是这种解决不了,毫秒级别导致回放;第二种解法通过自定义子调用(自定义切面),通过mock的方式来解决毫秒级别导致回放失败,但是这种方式可能存在缺点是业务可能要改造。问题背景解法如何解决系统噪音带来的回放失败问题?在业务服务中里面会存在一些requestId、traceId等通用噪音字段,这些噪音字段导致回放失败。通过平台支持的全局、应用、接口级别的噪音字段配置,通过这三种方式解决通用字段和业务系统个性化噪音字段,从而提高回放的成功率稳定性沙箱挂载风险点沙箱挂载机器cpu飙高平台措施生产环境只允许一台机器沙箱挂载平台巡检录制风险点开启录制可能会导致死锁录制在一定程度上消耗cpu和可能增加rt平台措施流量录制预热只读接口只录制关键信息录制过程进行监控,异常降级功能迭代需求回归技术改造服务迁移或重构增加数据来源预发不mock回放线下mock回放稳定性POIZONTHANKS