一、有什么用
将机器http请求复制转发到指定的机器上去。
通常可能会通过ab等压测工具来对单一http接口进行压测。但如果是需要http服务整体压测,使用ab来压测工作量大且不方便,通过线上流量复制引流,通过将真实请求流量放大N倍来进行压测,能对服务有一个较为全面的检验。
二、安装
前往官方下载:https://github.com/buger/goreplay/releases
在Linux服务器上直接执行以下命令即可:
wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor_0.16.1_x64.tar.gz
tar -xf gor_0.16.1_x64.tar.gz
cp gor /usr/bin/
gor -h
三、应用场景
3.1 流量实时复制引流(--input-raw 拦截端口配合--output-http输出)
3.1.1 当对服务功能进行了改造,不能直接上线,需要真实请求来做验证,可以用流量复制引流
gor --input-raw :80 --output-http "http://target_server:8080"
#将本机80端口的HTTP流量复制到targer_server:8080
3.1.2 如果目标服务器使用的库与线上机器一样,需要只引流Get方法,不应该复制上行方法(POST等)
gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080"
3.1.3 当需要对线上服务进行整体性能压测时,可将线上请求扩大N倍,进行引流
gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080|200%" #将请求扩大1倍,也可缩小,调整"|"后面的百分比即可
3.1.4 只复制某个URL请求,--http-allow-url参数
gor --input-raw :8080 --http-allow-method GET --output-http "http://target_server:8080" --http-allow-url mall.*hotword
#--http-allow-url参数可用正则表达式
#--output-http-url-regexp在gor 0.16已经过期,使用--http-allow-url代替
3.1.5 多目标服务器的流量复制引流,有点类似nginx的mirror
gor --input-raw :80 --output-http "http://target_server:8080" --output-http "http://target_server2:8080"
3.2 录制与回放
适合在夜深人静的时候,偷摸干一些和谐的事(≧∀≦)
3.2.1 录制,只是gor输出目标改为本地文件,使用--output-file参数
gor --input-raw :80 --output-file gor_request.log
3.2.2 回放
gor --input-file "gor_request.log|200%" --output-http "http://target_server:8080"