Merge pull request #45 from guowei-gong/master docs(README.md): Syntax error for markdown subtitle
Merge pull request #45 from guowei-gong/master
docs(README.md): Syntax error for markdown subtitle
Sharingan,中文名:写轮眼,是漫画《火影忍者》中的一种瞳术,具有复制、幻术等能力,在幻术世界里,一切因素包括时间,地点,质量等,都由施术者掌控。
Sharingan是一个基于golang的流量录制回放工具,录制线上真实请求流量进行回放测试,适合项目重构、回归测试等。
随着微服务架构的兴起,服务之间的依赖关系变的越来越复杂,软件测试也面临新的挑战:系统升级频繁、服务依赖众多等等。
为此,我们需要开发一套工具来缓解上述问题。
# Step1: 下载sharingan项目 $ git clone https://github.com/didi/sharingan.git $ cd sharingan # Step2: 使用定制版golang,以go1.13为例「慢?科学上网试试」 $ sudo 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示例流量
关于流量录制和回放,在内部进行过多次探索,主要经历下面三个阶段:
录制:利用tcpdump录制流量,改造router层将请求串行化,利用时间来分割请求。
回放:利用iptables转发流量到mock服务,匹配请求并mock返回。支持时间重置、流量对比等。
不足:录制流量覆盖率低,一次只能录制一个请求。iptables转发,噪音干扰严重。
录制:改造golang源码,利用goroutine+工作委托技术串联区分请求。链路追踪原理
回放:利用mock库重定向connect系统调用,转发流量到mock服务。支持Dashboard、噪音去除等。monkey mock原理
不足:录制接口和实现混合,golang多版本支持困难。不支持并发回放,启动阶段流量无法代理会失败,定时任务流量干扰严重。
录制:接口和实现分离,golang源码改造部分只暴露接口,具体录制实现单独提供包支持。确保golang源码改动通过官方测试,支持1.10~1.14所有版本;优化录制服务性能。
回放:添加流量标识,支持并发回放;支持启动阶段流量代理;利用定制版golang,消除定时任务流量干扰;时间重置不再依赖本地文件,支持replayer-agent单独部署;支持常见协议解析。
对于下游请求很多且复杂的情况,支持对下游协议进行筛选
批量回放的并发度默认是10,可通过增加-parallel参数修改。
覆盖率报告支持覆盖率结果累计,即支持 多次 单个回放和批量回放后,统一生成覆盖率结果。
欢迎大家参与进来,更多参考Contribute。
基于Apache-2.0协议进行分发和使用,更多参考LICENSE。
hueng、yj20060714、qiaodandedidi、bikong0411、plpan、fzl-yty。
特别感谢TaoWen ,流量录制和回放初版设计者,为后续开源奠定了很好的基础。
执行 $ sudo sh install.sh go1.13 提示 wget: command not found...
$ sudo sh install.sh go1.13
wget: command not found...
# 首先安装 brew $ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # 然后用 `brew` 安装 `wget`: $ brew install wget
# 下载并运行上述连接中安装包后 $ sudo port install wget
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
Sharingan
Sharingan,中文名:写轮眼,是漫画《火影忍者》中的一种瞳术,具有复制、幻术等能力,在幻术世界里,一切因素包括时间,地点,质量等,都由施术者掌控。
一、简介
Sharingan是一个基于golang的流量录制回放工具,录制线上真实请求流量进行回放测试,适合项目重构、回归测试等。
1.1、背景
随着微服务架构的兴起,服务之间的依赖关系变的越来越复杂,软件测试也面临新的挑战:系统升级频繁、服务依赖众多等等。
为此,我们需要开发一套工具来缓解上述问题。
1.2、方案
1.3、特性
二、快速开始
2.1、使用示例
2.2、接入文档
三、技术方案
3.1、模块划分
3.2、整体架构图
3.3、录制方案
3.4、回放方案
四、演进之路
关于流量录制和回放,在内部进行过多次探索,主要经历下面三个阶段:
4.1、月光宝盒(串行录制、串行回放)
录制:利用tcpdump录制流量,改造router层将请求串行化,利用时间来分割请求。
回放:利用iptables转发流量到mock服务,匹配请求并mock返回。支持时间重置、流量对比等。
不足:录制流量覆盖率低,一次只能录制一个请求。iptables转发,噪音干扰严重。
4.2、Fastdev(并行录制、串行回放)
录制:改造golang源码,利用goroutine+工作委托技术串联区分请求。链路追踪原理
回放:利用mock库重定向connect系统调用,转发流量到mock服务。支持Dashboard、噪音去除等。monkey mock原理
不足:录制接口和实现混合,golang多版本支持困难。不支持并发回放,启动阶段流量无法代理会失败,定时任务流量干扰严重。
4.3、Sharingan(并行录制、并行回放)
录制:接口和实现分离,golang源码改造部分只暴露接口,具体录制实现单独提供包支持。确保golang源码改动通过官方测试,支持1.10~1.14所有版本;优化录制服务性能。
回放:添加流量标识,支持并发回放;支持启动阶段流量代理;利用定制版golang,消除定时任务流量干扰;时间重置不再依赖本地文件,支持replayer-agent单独部署;支持常见协议解析。
五、效果展示
5.1、流量回放
5.1.1、单个回放
对于下游请求很多且复杂的情况,支持对下游协议进行筛选
5.1.2、批量回放
批量回放的并发度默认是10,可通过增加-parallel参数修改。
5.2、覆盖率报告
5.2.1、整体报告
覆盖率报告支持覆盖率结果累计,即支持 多次 单个回放和批量回放后,统一生成覆盖率结果。
5.2.1、覆盖详情
六、更多
6.1、如何贡献
欢迎大家参与进来,更多参考Contribute。
6.2、许可
基于Apache-2.0协议进行分发和使用,更多参考LICENSE。
6.3、成员
hueng、yj20060714、qiaodandedidi、bikong0411、plpan、fzl-yty。
6.4、感谢
特别感谢TaoWen ,流量录制和回放初版设计者,为后续开源奠定了很好的基础。
6.5、联系我们
七、常见问题
执行
$ sudo sh install.sh go1.13提示wget: command not found...