Duplicate Production Requests for Testing

當我們上新的架構或者調整資料庫參數等等的時候,總希望能夠用 production 環境來測試才比較準確,不過這麼重大的改變不能隨便拿正式環境和使用者當白老鼠;就算使用 production 資料庫的 dump, 也無法重複真正使用者的行為。

一般常用的方式是偷偷把 production 環境的流量複製一份,導到測試機器/環境去,觀察看看行為是否符合預期。

相較於以往看到較為複雜的 solution, 這邊介紹一個用 Go 開發的工具 – gor

簡介

gor 已經發展了一年多了,進展的非常快。現在是一個簡單又非常好用的工具。可以監聽你指定的 port, 把流量轉到其他機器、或者 dump 成檔案,之後可再從這個檔案 replay、如果有統計分析的需求,也可以直接 redirect 進 elasticsearch 中再進行處理。

Usage

這邊列幾個基本常用的用途:

  • 把 request dump 到檔案

sudo ./gor --input-raw :80 --output-file requests.gor

  • 從檔案 replay 流量 (限定 GET)

sudo ./gor --input-file requests.gor --output-http http://10.2.7.202 --output-http-method GET

  • 直接複製流量丟到測試機

sudo ./gor --input-raw :80 --output-http http://10.2.7.202 --output-http-method GET

注意:這個動作會比較吃 CPU, 官方文件是建議開兩個 process 一個錄流量,一個丟到 output.

除此之外還有很多功能,例如各種 regex, filter, 插入 header, http basic auth, 丟到多個機器…等等。

Comments