1. 程式人生 > >生產環境模擬:使用Gor復制生產環境流量

生產環境模擬:使用Gor復制生產環境流量

oschina 查看 blog gpo 命令行操作 循環插入 ref 存在 80端口

2017/11/21 發布

一、引言

這兩周在開發廣告服務平臺時,部署新版程序出現了在本地測試與服務器生產環境測試差異很大,導致新版上線延遲的問題。主要表現在線上500臺左右設備請求並發時,新版程序無法穩定運行的問題。

由於是新開發的平臺,測試環境並未配置齊全,並且生產環境服務器並未使用Jenkins等持續集成工具,無法進行良好的版本控制,新版本與上一版本改動較大,無法精準定位問題所在。

因此決定復制生產環境的流量,模擬出同等條件的測試環境,進行問題排查。

我們選擇使用go語言實現的簡單的http流量復制工具——Gor,將80端口的流量進行等量復制到測試環境端口中,模擬條件相同的壓力測試環境,采用與生產環境相同的測試數據庫,找到並且解決問題。

二、Gor簡介

Gor 是一款go語言實現的簡單的http流量復制工具,它的主要目的是使你的生產環境HTTP真實流量在開發環境和語言預演環境(staging server)重現。

Gor下載地址https://github.com/buger/goreplay/releases

工具使用非常簡單,並同時支持linux、mac、windows版本。下面是它的工作的流程,監聽服務器捕捉http流量,把捕捉到的流量發送到重現服務器上或者保存到文件中,重現服務器再繼續把流量發送到一個指定的ip地址。

技術分享圖片

三、用法簡介

使用Gor,將下載的文件復制到目標盤中,windows下為exe文件,在盤符中shift+右鍵進行命令行操作。按照下列操作可以使用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.

註入改變請求流量header:

gor –input-raw :80 –output-http “http://staging.server” –output-http-header “User-Agent: Replayed by Gor” –output-http-header “Enable-Feature-X: true”

可以通過 gor –help 查看更多用法。

四、總結

在測試環境不成熟的開發中,可以通過Gor等流量復制工具,將生產環境的流量進行復制。通過壓力測試進行正式上線的仿真測試。

經壓力測試排查,發現問題根源並非存在於新版程序中,而在於tomcat的環境配置中時區設置出現問題。導致對於數據庫的時間插入以及搜索操作出現時間偏差,導致程序中不斷循環插入檢索相同的字段,導致數據庫的“死鎖”問題。

這也警示我們設計程序的時候,需要考慮到大量並發可能出現的問題,並進行預防。並且需要有良好的測試設計。

生產環境模擬:使用Gor復制生產環境流量