当前位置: 首页 > 软件库 > 开发工具 > 测试工具 >

Sharingan

流量录制回放工具
授权协议 Apache-2.0
开发语言 Google Go
所属分类 开发工具、 测试工具
软件类型 开源软件
地区 国产
投 递 者 公良奇
操作系统 跨平台
开源组织 滴滴出行
适用人群 未知
 软件概览

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对比。
  • 更多参考:流量回放实现原理
 相关资料
  • 目录 概述 基于 QPS/并发数的流量控制 基于调用关系的流量控制 概述 流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。 FlowSlot 会根据预设的规则,结合前面 NodeSelectorSlot、ClusterBuilderSlot、StatisticSlot 统

  • 缺省情况下,启用了Istio的服务是无法访问外部URL的,这是因为Pod中的iptables把所有外发传输都转向到了Sidecar代理,而这一代理只处理集群内的访问目标。 本节内容会描述如何把外部服务提供给启用了Istio的客户端服务使用,你会学到如何使用Egress规则访问外部服务,或者如何简单的让特定IP范围穿透Istio代理。 开始之前 遵循安装指南设置Istio 启动sleep示例,用于测

  • 如控制Egress流量告诉我们可以从服务网格内部应用访问外部(指在Kubernetes外的服务)的 HTTP 和 HTTPS 服务。默认情况下,支持 istio 的应用程序无法直接访问集群外部的 URL 。要启用这种访问,必须先定义 Egress 规则或者配置直接调用外部服务规则。 此任务描述如何配置 Istio 内应用如何访问 Istio 外部的应用。 开始之前 遵循安装指南设置Istio 启动

  • 1 背景 在系统访问量较大时,某些库的负载可能非常高,或者因为临时故障或系统bug导致大量异常SQL打到某个库上。为了防止数据库被这些异常流量打垮,需要在数据库访问层上对MySQL进行保护,因此zebra需要提供对某些特定SQL或某个库进行限流的功能。(SQL限流只是用于临时解决问题,事后还需业务方进行优化或扩容) 2 目标 动态限流,可动态配置限流策略与流量大小 支持限制某个数据源上的某些特定的

  • 网易速度很快,投简历第二天中午hr打电话约的当天下午面试 面试时间也很短,就十来分钟 介绍上段实习内容 介绍自己觉得做的比较好的case 从什么角度分析直播数据 反问:具体工作内容

  • 程序执行流程是指程序语句执行的顺序。 默认情况下,语句会一个接一个地执行。 然而; 很多时候,执行顺序需要从默认顺序改变,以完成任务。 Euphoria有许多flow控制语句,您可以使用它们来安排语句的执行顺序。 exit声明 使用关键字exit退出循环。 这会导致流程立即离开当前循环,并在循环结束后重新开始第一个语句。 语法 (Syntax) exit语句的语法如下 - exit [ "Labe