Sharingan流量录制回放工具

联合创作 · 2023-10-01 16:40

Sharingan(写轮眼)是一个基于 golang 的流量录制回放工具,适合项目重构、回归测试等。

特性

  • 支持下游流量录制。相比tcpcopygoreplay等方案,回放不依赖下游环境。
  • 支持并发流量录制和回放。录制对服务影响小,回放速度更快。
  • 支持时间重置、噪音去除、批量回放、覆盖率报告、常见协议解析等等。
  • 支持写流量回放,不会污染应用数据。
  • 不依赖业务框架,低应用浸入。

使用示例

# 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对比。
  • 更多参考:流量回放实现原理
浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑
举报