流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等
概述
對于一些有并發要求的業務,特別是對接外部流量時,產品上線前一定要做的就是壓力測試,但是常規的壓力測試并不能覆蓋所有情況。以gemeter、ab,、webbench、http_load為例,這些通過模擬請求的壓測工具,只能發送特定的參數,對于一些參數異常導致的程序處理異常是無法考慮到的,所以就需要一款能復制真實流量,并且不影響線上業務的工具。
流量復制工具有很多,例如Gor、tcpreplay、tcpcopy等,這些工具貼合真實場景,能模擬真實流量,并支持流量的放大或縮小,更容易測試出程序的瓶頸和潛在問題。
幾款流量復制工具:
- gor: https://github.com/buger/goreplay
- tcpreplay: https://github.com/appneta/tcpreplay
- tcpcopy: https://github.com/session-replay-tools/tcpcopy
- Nginx模塊ngx_http_mirror_module,在Nginx 1.13.4中開始引入
下面重點介紹nginx模塊ngx_http_mirror_module和gor。
流量復制--Nginx模塊ngx_http_mirror_module
參考配置
配置如下:
server { listen 8080; access_log /home/work/log/nginx/org.log; root html/org;}server { listen 8081; access_log /home/work/log/nginx/mir.log ; root html/mir;}upstream backend { server 127.0.0.1:8080;}upstream test_backend { server 127.0.0.1:8081;}server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { mirror /mirror; proxy_pass http://backend; } location /mirror { internal; proxy_pass http://test_backend$request_uri; }}流量放大,配置兩個mirror即可
location / { mirror /mirror; mirror /mirror; proxy_pass http://backend; }使用是很方便,但是線上nginx一般都承載了不止一個業務,修改nginx配置后需要nginx -s reload來使之生效,這種操作在線上還是盡量需要避免的。
流量復制--gor
Gor 是用 Golang 寫的一個 HTTP 實時流量復制工具。功能更強大,支持流量的放大、縮小,頻率限制,還支持把請求記錄到文件,方便回放和分析,也支持和 ElasticSearch 集成,將流量存入 ES 進行實時分析。
1、下載安裝
只需要下載安裝,也可以下載編譯好的二進制文件直接使用
#wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor_0.16.1_x64.tar.gz#tar xzvf gor_0.16.1_x64.tar.gz2、流量復制
gor也可以將流量復制到文件,然后再對他們進行回放。回放的時候,流量會維持原始的時間間隔。如果使用了百分比來進行速率限制,那么回放的速率會相應的增加或減少。有了這種速率限制,gor就可以用來進行壓力測試。
#write to filegor --input-raw :80 --output-file requests_origin.gor#read from filegor --input-file requests_origin.gor --output-http "http://localhost:8081"3、流量回放
目前,這種方式只支持"input-file
總結
以上是生活随笔為你收集整理的流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 板框导入_板框结构导入有问题?这几个问题
- 下一篇: linux6.5安装oracle,lin