
流量回放近幾年一直是大家熱衷討論的話題,具體的效果智者見智,文章作者也是在技術工程領域有豐富的實踐經驗,推薦一看,
本篇背景是另外一同事朋友,最近在利用流量回放技術應用在服務端介面自動化測驗方面,還在各部門全力推進階段,未來效果暫且不好說,但這部分內容確實各大公司,測驗技術大會等等的熱詞,由于我沒參與但我很感興趣,所以邀請普及一篇,后邊應該還會帶來實戰篇,本公眾號堅持原創和干貨分享,歡迎長期關注,一同成長,如果你有好的實戰分享也歡迎投稿,
前言
在日常的測驗作業中我們或多或少總會遇到下列問題:
1)服務架構升級或重構,需要驗證原始介面邏輯,對原有的一堆介面做回歸
2)對于業務邏輯復雜的場景,每個迭代版本都需要大量的時間用于回歸測驗
3)撰寫自動化用例時復雜場景造數麻煩,日常自動化維護成本高
4)構造壓測模擬資料麻煩
…等等
那么從服務的所有環境來看,僅線上環境擁有場景豐富、資料真實、覆寫全面的條件,那么我們將線上環境的請求資料獲取下來,在指定的環境中模擬用戶請求基本上可解決或者優化上面的這些問題,因此有必要需要對流量回放這項技術探究一下,首先從資料總結和自身搭建講演來講,總結流量回放的大概流程可為:流量錄制 - 資料持久化 - 回放計劃 - 環境維護 - 流量回放 - 結果比對,其次,所謂工欲善其事,必先利其器,下面我們看一些常用的流量回放分類以及工具的優缺點,
工具分類
根據流量錄制的位置大致可分為:基于web服務器錄制、基于應用層錄制、基于網路協議堆疊錄制,
web服務器錄制
方案:在服務上定制化代碼
優點:請求型別比較多樣
缺點:不通用,維護成本高,會占用大量線上資源
應用層錄制
方案:在網關或基于AOP切面進行錄制
優點:對代碼無侵入、實作相對比較快捷簡單
缺點:會占用線上部分資源、可能會對業務有影響
常用工具:Nginx插件-ngx_http_mirror_moudle、Java-sandbox
網路協議堆疊錄制
方案:直接監聽網路埠,復制資料包方式錄制
優點:基本對應用無影響
缺點:比較偏向底層實作成本較高
常用工具:goReplay、tcpCopy、tcpReplay
常用工具介紹
ngx_http_mirror_module

流量請求到nginx后,nginx正常轉發請求到目標應用,同時復制流量到mirror服務后不再管控,
優點:
-
原生模塊支持,在nginx 1.13.4版本后內置該模塊
-
支持配置多份鏡像放大流量
-
配置比較簡單,nginx-server將流量復制到mirror后無交集,達到對真實流量無影響目的
缺點:
-
修改配置后需要執行“nginx -s reload”命令使變更生效,線上環境不建議這么做
-
實際業務中經由nginx轉發的模塊較多,無法篩選指定請求
-
只支持錄制http流量
-
mirror為子請求,當mirror未結束時,主請求的記憶體無法釋放,可導致nginx性能下降甚至阻塞
TcpCopy
專案地址:https://github.com/session-replay-tools/tcpcopy

流轉示意圖:

TcpCopy主要有tcpcopy和intercept兩個模塊組成,tcpcopy模塊運行在線上機器,主要負責捕獲在線請求并修改請求頭中的目標地址和 源地址,然后使用raw socket輸出技術發送資料包到目標服務器,目標服務器上根據配置的資訊將回應資料包路由到intercept輔助服務器,intercept輔助將提取的回應頭資訊發送給tcpcopy,tcpcopy利用收到的資訊修改捕獲的資料包屬性并發送至目標服務器,
優點:
-
使用線上的真實資料
-
適合高并發場景
-
對目標服務器基本無干擾
-
支持復制基于TCP任意層協議的流量
缺點:
-
由于只做資料包復制未做流量例外鑒別,可能導致例外資料進入目標服務器
-
無法對應用層的資料進行篩選和修改
-
可能會丟失資料包導致請求丟失
GoReplay
專案地址:https://github.com/buger/goreplay

GoReplay是基于Go語言實作與Tcpdump一樣都是依賴pcap庫,主要監聽網路介面流量來錄制流量,支持在線和離線方式回放流量
優點:
-
輕量程式基本無需配置,環境準備簡單
-
程式資源消耗少,無侵入應用運行環境
-
提供不限制語言的插件機制,方便拓展
缺點:
-
社區版僅支持錄制http協議,且與核心邏輯耦合,應用面不廣泛
-
大公司使用少,整體成熟度不高
Jvm-sandbox-repeater
專案地址:https://github.com/alibaba/jvm-sandbox-repeater

使用jvm-sandbox沙箱技術,通過Java agent或者attach方式掛載到Java應用上,repeater模塊根據配置的規則錄制或回放資料,console模塊主要負責觸發和資料互動,
優點:
-
通過位元組碼增強的方式可以直接錄制Java方法、子呼叫
-
對業務代碼0侵入
-
模塊功能豐富
缺點:
-
對服務運行環境有一定侵入
-
在掛載瞬間會占用較多的機器資源,當業務量大時可能會導致服務夯住
-
當前功能不完善,需要代碼開發能力
總結
通過技術方案可以方便我們利用線上真實流量驗證壓測、自動化、回歸等場景,根據自己實際的需求選擇合適的工具,但一切以不影響線上服務的穩定可用為前提,也期待后續會有更多的更完善的流量回放方案,
下面是配套資料,對于做【軟體測驗】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴我走過了最艱難的路程,希望也能幫助到你!

最后: 可以在公眾號:傷心的辣條 ! 免費領取一份216頁軟體測驗工程師面試寶典檔案資料,以及相對應的視頻學習教程免費分享!,其中包括了有基礎知識、Linux必備、Shell、互聯網程式原理、Mysql資料庫、抓包工具專題、介面測驗工具、測驗進階-Python編程、Web自動化測驗、APP自動化測驗、介面自動化測驗、測驗高級持續集成、測驗架構開發測驗框架、性能測驗、安全測驗等,
學習不要孤軍奮戰,最好是能抱團取暖,相互成就一起成長,群眾效應的效果是非常強大的,大家一起學習,一起打卡,會更有學習動力,也更能堅持下去,你可以加入我們的測驗技術交流扣扣群:914172719(里面有各種軟體測驗資源和技術討論)
喜歡軟體測驗的小伙伴們,如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
好文推薦
轉行面試,跳槽面試,軟體測驗人員都必須知道的這幾種面試技巧!
面試經:一線城市搬磚!又面軟體測驗崗,5000就知足了…
面試官:作業三年,還來面初級測驗?恐怕你的軟體測驗工程師的頭銜要加雙引號…
什么樣的人適合從事軟體測驗作業?
那個準點下班的人,比我先升職了…
測驗崗反復跳槽,跳著跳著就跳沒了…
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/357070.html
標籤:其他
