流量复制_快速体验之《gor+diffy实现线上流量复制到测试环境》
生活随笔
收集整理的這篇文章主要介紹了
流量复制_快速体验之《gor+diffy实现线上流量复制到测试环境》
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
對于沒有副作用的接口(重復發送不會產生兩份數據、不會產生多余的監控統計等等),就可以用這種方式方便的做回歸測試。 部署三個不接外部流量的服務,兩份老版本、一份新版本,把生產環境的流量復制到 Diffy 上。 如果生產環境支持通過請求頭之類的方式區分測試流量和真實流量,就可以擴大使用范圍。
啟動serverA-8000
# 啟動服務docker run --detach --publish=8000:80 --name=serverA nginxdocker exec -it serverA bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一個 Pathlocation /testerhome { default_type application/json; return 200 '{"tag":"old","noise":"1"}';}# :wq 保存退出,重載 Nginxnginx -s reload# 退出容器exit# 輸出 Nginx log 到終端上docker logs -f serverA訪問 http://127.0.0.1:8000/testerhome
curl http://127.0.0.1:8000/testerhome # 可以看到返回了 {"tag":"old","noise":"1"},終端也輸出了如下日志172.17.0.1 - - [13/Oct/2019:07:04:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"啟動serverB-8010
# 啟動服務docker run --detach --publish=8010:80 --name=serverB nginxdocker exec -it serverB bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一個 Pathlocation /testerhome { default_type application/json; return 200 '{"tag":"old","noise":"1"}';}# :wq 保存退出,重載 Nginxnginx -s reload# 退出容器exit# 輸出 Nginx log 到終端上docker logs -f serverB# 再打開一個終端,啟動gor流量復制sudo ./gor --input-raw :8000 --output-http http://127.0.0.1:8010訪問 http://127.0.0.1:8000/testerhome
curl http://127.0.0.1:8000/testerhome # 可以看到 8010 端口上的 serverB 也產生了訪問日志172.17.0.1 - - [13/Oct/2019:07:14:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"啟動serverC-8020
# 響應是 {"tag":"old","noise":"2"}# 啟動服務docker run --detach --publish=8020:80 --name=serverC nginxdocker exec -it serverC bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一個 Pathlocation /testerhome { default_type application/json; return 200 '{"tag":"old","noise":"2"}';}# :wq 保存退出,重載 Nginxnginx -s reload# 退出容器exit# 輸出 Nginx log 到終端上docker logs -f serverC啟動serverD-8030
# 響應是 {"tag":"new","noise":"3"}# 啟動服務docker run --detach --publish=8030:80 --name=serverD nginxdocker exec -it serverD bashapt updateapt install vimvim /etc/nginx/conf.d/default.conf# 添加一個 Pathlocation /testerhome { default_type application/json; return 200 '{"tag":"new","noise":"3"}';}# :wq 保存退出,重載 Nginxnginx -s reload# 退出容器exit# 輸出 Nginx log 到終端上docker logs -f serverD訪問 http://127.0.0.1:8000/testerhome
curl http://127.0.0.1:8000/testerhome # 可以看到 8010 端口上的 serverB 也產生了訪問日志172.17.0.1 - - [13/Oct/2019:07:14:04 +0000] "GET /testerhome HTTP/1.1" 200 28 "-" "curl/7.54.0" "-" "-"啟動diffy服務
# primary 主要版本返回的結果# secondary 如果開啟降噪處理,會認同這個版本接口返回的結果# candidate 要對比的版本docker run -d --name diffy-01 -p 8880:8880 -p 8881:8881 -p 8889:8889 diffy/diffy -candidate=10.2.76.154:8030 -master.primary=10.2.76.154:8010 -master.secondary=10.2.76.154:8020 -service.protocol=http -serviceName=My-Service -proxy.port=:8880 -admin.port=:8881 -http.port=:8889 -rootUrl='localhost:8889' -summary.email="happy@a.com"訪問 [http://127.0.0.1:8889]訪問 [http://127.0.0.1:8889]訪問 [http://127.0.0.1:8889]
看到展示 Diffy 結果的界面
重啟 gor
這次把將 8000 端口監聽到的請求復制一份轉發到 Diffy 的 8880 端口
sudo ./gor --input-raw :8000 --output-http http://127.0.0.1:8880訪問http://127.0.0.1:8000/testerhome
可以看到 8010、8020、8030 端口上的三個服務都產生了訪問日志
對比diffy上面的結果
如果一個字段在 master.primary 和 master.secondary 上不一致,很有可能不是 bug,時間戳或者個性推薦之類的數據會這樣。這時候可以 把 Exclude Noise 開關打開,排除這些“噪聲”。如果一個請求過去,返回的value可以是不同的場景
總結
以上是生活随笔為你收集整理的流量复制_快速体验之《gor+diffy实现线上流量复制到测试环境》的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS开发ARC入门和使用
- 下一篇: RestFull架构