終極 Web 應用性能和壓力測試工具 Gor
常見的 Web 應用的壓力測試工具
Web 應用壓力測試工具有很多,比如 Apache ab,node-ab,Apache JMeter, LoadRunner, httperf。但是這些工具都沒能解決一個問題:
如何正確模擬生產環境的流量
如今 Web 應用的架構變得非常復雜,內部包含復雜的各種負載均衡、 服務和 RPC 調用關系,簡單的發送 GET 請求到某些 URL 或者 API 接口完全無法模擬真實的流量。假如回放 HTTP 日志,操作又異常麻煩。Tcpcopy 雖然能夠復制實時流量,但是操作也很復雜。之前的 亞馬遜云平臺的遷移 就用到了 Gor 這個工具。
Gor 是 Web 應用壓力測試的完美方案
我一直在找一個簡單又方便的解決方案,直到找到了 Gor 。Gor 是用 Golang 寫的一個 HTTP 實時流量復制工具。只需要在 LB 或者 Varnish 入口服務器上執行一個進程,就可以把生產環境的流量復制到任何地方,比如 Staging 環境、Dev 環境。完美解決了 HTTP 層實時流量復制和壓力測試的問題。
Gor 的功能
Gor 支持流量的放大和縮小、頻率限制,這樣不需要搭建和生產環境一致的服務器集群也可以正確測試。Gor 還支持根據正則表達式過濾流量,這意味著可以單獨測試某個 API 服務。還可以修改 HTTP 請求頭,比如替換 User-Agent, 或者增加某些 HTTP Header 。
Gor 還可以把請求記錄到文件,以備回放和分析。Gor 支持和 ElasticSearch 集成,將流量存入 ES 進行實時分析。
Gor 的常用命令
簡單的 HTTP 流量復制:
gor –input-raw :80 –output-http “http://staging.com”
HTTP 流量復制頻率控制:
gor –input-tcp :28020 –output-http “http://staging.com|10″
HTTP 流量復制縮小:
gor –input-raw :80 –output-tcp “replay.local:28020|10%”
HTTP 流量記錄到本地文件:
gor –input-raw :80 –output-file requests.gor
HTTP 流量回放和壓測:
gor –input-file “requests.gor|200%” –output-http “staging.com”
HTTP 流量過濾復制:
gor –input-raw :8080 –output-http staging.com –output-http-url-regexp ^www.
最后
這個 Golang 寫的 Gor 是開源的,意味著可以方便的集成到自己的架構中,可以用在壓力測試平臺、實時流量分析、應用層防火墻等等方面。
有用的鏈接
https://github.com/buger/gor
https://github.com/doubaokun/node-ab
https://github.com/session-replay-tools/tcpcopy
https://github.com/httperf/httperf
https://github.com/buger/gor/blob/master/ELASTICSEARCH.md