Sharingan流量录制回放工具
Sharingan(写轮眼)是一个基于 golang 的流量录制回放工具,适合项目重构、回归测试等。
特性
- 支持下游流量录制。相比tcpcopy、goreplay等方案,回放不依赖下游环境。
- 支持并发流量录制和回放。录制对服务影响小,回放速度更快。
- 支持时间重置、噪音去除、批量回放、覆盖率报告、常见协议解析等等。
- 支持写流量回放,不会污染应用数据。
- 不依赖业务框架,低应用浸入。
使用示例
# Step1: 下载sharingan项目 $ git clone https://github.com/didi/sharingan.git $ cd sharingan # Step2: 使用定制版golang,以go1.13为例「慢?科学上网试试」 $ sh install.sh go1.13 # 支持go1.10 ~ go1.15,限mac、linux amd64系统 $ export GOROOT=/tmp/recorder-go1.13 $ export PATH=$GOROOT/bin:$PATH # Step3: 编译、后台启动replayer-agent「默认会占用3515、8998端口,可修改」 # [回放接入文档]内有直接下载bin文件的链接,无需build $ cd replayer-agent $ go build $ nohup ./replayer-agent >> run.log 2>&1 & # Step4: 编译、后台启动example示例「默认会占用9999端口,可修改」 $ cd ../example $ go build -tags="replayer" -gcflags="all=-N -l" $ nohup ./example >> run.log 2>&1 & # Step5: 打开回放页面 $ 浏览器打开,http://127.0.0.1:8998 # 非本机替换IP即可 $ 页面选择要回放的流量点执行 # 内置提前录制好的3条example示例流量
模块划分
- recorder: 流量录制模块,录制流量本地文件存储、发送流量到录制agent等。
- recorder-agent:流量录制agent,单独进程启动,控制录制比例、流量存储等。
- replayer: 流量回放模块,重定向连接到Mock Server、Mock时间、添加流量标识等。
- replayer-agent:流量回放agent,单独进程启动,查询流量、查询/上报噪音、流量diff、批量回放、生成覆盖率报告等。
整体架构图
录制方案
- 修改golang源码,对外暴露Hook接口。「所有改动通过官方测试用例」
- 提供API串联不同goroutine之间的网络调用。「常见的http、mysql、redis流量都不需要特别设置」
- 提供单独的agent筛选流量、控制比例。
- 更多参考:流量录制实现原理。
回放方案
- 连接重定向:将服务所有Connect网络调用重定向到Mock Server。「安装replayer-agent时候自带」
- 流量匹配:Mock Server会根据服务真实的下游请求匹配一个返回。「mock下游调用」
- 时间重置:将程序执行时间回退到录制执行时刻,尽量避免时间因素带来的干扰。
- 噪音去除:提供API可以将已知的噪音流量去掉,如:traceID,每次请求本来就不一样。
- 常见协议解析:会解析http、mysql、redis、thrift等协议,方便diff对比。
- 更多参考:流量回放实现原理。
评论