<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          推薦一款技術(shù)人必備:線上引流神器GoReplay

          共 6077字,需瀏覽 13分鐘

           ·

          2020-07-28 13:03

          點擊上方“測試開發(fā)技術(shù)”,選擇“加為星標(biāo)

          優(yōu)質(zhì)文章,第一時間送達(dá)!


          開課通知重磅消息 | 2020年最新全棧測試開發(fā)技能實戰(zhàn)指南(第1期)

          一. 線上引流產(chǎn)生背景

          日常大部分的測試工作都是在測試環(huán)境下,通過模擬用戶的行為來對系統(tǒng)進(jìn)行驗證,包括功能以及性能。在這個過程中,你可能會遇到以下問題:

          • 用戶訪問行為比較復(fù)雜,模擬很難和用戶行為一致,模擬不夠真實。
          • 線下模擬場景有限,會出現(xiàn)業(yè)務(wù)覆蓋不全的情況。

          線上引流方案的出現(xiàn)為上述問題提供了很好的解題思路,線上引流本質(zhì)是:通過把線上的真實流量復(fù)制到線下環(huán)境,解決測試環(huán)境模擬不夠真實,或覆蓋不夠全面的問題。

          二. 線上引流常見方案

          目前不少公司都對線上引流方案進(jìn)行了許多實踐探索,常見的有以下4種引流方式(不限):

          引流方式實現(xiàn)方式優(yōu)點缺點
          Nginx層流量復(fù)制安裝lua-nginx-module、ngxdevelkit、headers-more-nginx-module模塊,通過lua腳本實現(xiàn)把請求復(fù)制給測試環(huán)境。安裝和部署還較為簡單。需要開發(fā)lua腳本,且對資源有一定占用。
          基于業(yè)務(wù)代碼層的引流將業(yè)務(wù)代碼的調(diào)用封裝成請求對象,異步的寫入緩存中。引流工具通過讀緩存中的請求,向測試環(huán)境發(fā)起請求。擴(kuò)展性好,可定制化高。需要開發(fā)流量復(fù)制工具,工作量較大,且對工作本身的性能要求較高。
          基于訪問日志回放線上系統(tǒng)記錄訪問日志,引流工具通過解析日志,向測試環(huán)境發(fā)起請求。離線方式,對線上影響小。需要開發(fā)日志解析工具,且解析的開銷會較大。
          基于TCP/IP層的引流目前已開源的工具有TcpCopy安裝、部署使用都較為簡單。安裝、部署使用都較為簡單。

          上述的幾種引流方式各有利弊,有的是需要自己開發(fā)相應(yīng)的工具來支持。而今天給大家介紹的是另外一款簡單易用,學(xué)習(xí)成本低的引流工具GoReplay。

          三. 推薦一款引流工具:GoReplay

          Gor,又稱為GoReplay,是采用Golang 編寫的一個開源的 HTTP 實時流量復(fù)制工具。它只需要在 LB 或者 入口服務(wù)器上執(zhí)行一個進(jìn)程,就可以把生產(chǎn)環(huán)境的流量復(fù)制到任何地方,比如 Staging 環(huán)境、Dev 環(huán)境。常用于壓測及線上問題復(fù)現(xiàn)。

          注:Golang 是采用Gor 實現(xiàn)且開源的,意味著可以方便的集成到自己的架構(gòu)中,可以用在壓力測試平臺、實時流量分析、應(yīng)用層防火墻等方面。

          四. GoReplay工作流程

          下面是goreplay官方之前公布的工作流程圖,簡單來講就是goreplay捕捉線上流量,并將捕捉到的釋放到指定測試服務(wù)器上。

          最新GoReplay 官網(wǎng)上更新了一張更高逼規(guī)格的圖解說明,如下圖所示:

          上述流程圖展示的已經(jīng)很詳細(xì)了,我就不過多解釋。

          注:Gor不是代理人,不需要將第三方工具放到關(guān)鍵路徑上。相反,Gor只是默默地分析你的應(yīng)用程序的流量,并不影響本身程序。

          五. GoReplay支持的常用功能

          • 1、Gor 支持流量的放大和縮小、頻率限制,這樣不需要搭建和生產(chǎn)環(huán)境一致的服務(wù)器集群也可以正確測試。

          • 2、Gor 還支持根據(jù)正則表達(dá)式過濾流量,這意味著可以單獨(dú)測試某個 API 服務(wù)。

          • 3、Gor還可以修改 HTTP 請求頭,比如替換 User-Agent, 或者增加某些 HTTP Header 。

          • 4、Gor 還可以把請求記錄到文件,以備回放和分析。Gor 支持和 ElasticSearch 集成,將流量存入 ES 進(jìn)行實時分析。

          • 5、上線前在預(yù)發(fā)布環(huán)境,使用線上真實的請求,檢查是否準(zhǔn)備發(fā)布的版本,是否具備發(fā)布標(biāo)準(zhǔn)。

          • 6?壓力測試完成后,用線上真實的請求,加速后回放至測試環(huán)境,檢查是否有報錯等問題。

          • 7?用線上的流量轉(zhuǎn)發(fā)到預(yù)發(fā)布或測試環(huán)境,檢查相同流量下一些指標(biāo)的反饋情況,檢查核心數(shù)據(jù)是否需要改善。

          • 8、等等。

          六. 下載安裝GoReplay

          顧名思義,GoReplay是基于go語言實現(xiàn)的,要在目標(biāo)服務(wù)器上安裝go環(huán)境。安裝參考可見 :https://golang.org/doc/install,準(zhǔn)備好go語言環(huán)境后,GoReplay直接提供了編譯好的版本,十分方便,直接解壓即可,可參考以下步驟:

          ?#下載包
          ?wget?https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0_x64.tar.gz
          ?
          ?#解壓
          ?tar?xvf?gor_1.0.0_x64.tar.gz

          也可以進(jìn)入到官網(wǎng)下載地址:https://github.com/buger/goreplay/releases下載最新的Gor二進(jìn)制文件(支持Windows,Linux x64和Mac OS提供預(yù)編譯的二進(jìn)制文件),或者可以自行編譯。

          獲取gor版本:

          https://github.com/buger/goreplay/releases

          源碼地址:

          https://github.com/buger/goreplay

          官方使用文檔:

          https://github.com/buger/gor/wiki

          七. GoReplay 常用命令用法

          輸入?yún)?shù):

          • --input-raw ?用于捕獲HTTP流量,需要指定IP地址或接口和應(yīng)用程序端口。
          • --input-file ? 接收通過--output-file保存流量的文件
          • --input-tcp ?將多個 Goreplay 實例獲取的流量聚集到一個 Goreplay 實例。

          輸出參數(shù):

          • --output-http ?重放HTTP流量到給定的端點,接受基礎(chǔ)URL。
          • --output-file ?錄制流量時指定的存儲文件
          • --output-tcp 將獲取的流量轉(zhuǎn)移至另外的 Goreplay 實例,并與其一起使用--input-tcp
          • --output-stdout ?用于調(diào)試,輸出所有數(shù)據(jù)到stdout。

          其它參數(shù):

          • --http-allow-method 根據(jù)請求方式過濾。
          • --http-allow-url url白名單,其他請求將會被丟棄。
          • --http-disallow-url 遇上一個url相反,黑名單,其他的請求會被捕獲到。

          八. GoReplay 常用實踐場景

          1、流量實時復(fù)制引流(--input-raw 攔截端口配合--output-http輸出),例如將本機(jī)80端口的HTTP流量實時復(fù)制到targer_server:8080。

          gor?--input-raw?:80?--output-http?"http://target_server:8080"

          2?控制臺輸出,獲取經(jīng)過本地8080端口的請求流量,然后打印到控制臺。

          gor?--input-raw?:8080?--output-stdout

          上述命令將監(jiān)控8080端口上所有的流量,并通過終端stdout輸出。你可以通過瀏覽器或者curl訪問8080端口,然后在終端查看gor輸出所有的http請求。

          3?先錄制后回放,將捕捉流量保存到文件中,然后釋放到其它機(jī)器,有時候?qū)崟r同步流量是很難做到的, 所以Goreplay提供了這種先保存后回放的模式:

          第一步, 通過--output-file保存流量:

          gor?--input-raw?:8080?--output-file=requests.gor

          上述命令將8080端口的流量,保存到requests.gor文件中(必須是.gor后綴,其它后綴經(jīng)測釋放時有問題)。

          第二步,回放保存的流量:

          gor?--input-file?requests.gor?--output-http="http://localhost:8081"

          上述命令將釋放所有保存在requests.gor中的請求通過相同的時間順序釋放到服務(wù)器[http://localhost:8081](http://localhost:8081

          4、過濾指定請求方法,如果目標(biāo)服務(wù)器使用的庫與線上機(jī)器一樣,且只需要引流Get方法的請求。

          gor?--input-raw?:80??--http-allow-method?GET?--output-http?"http://target_server:8080"

          5?請求過濾,當(dāng)你需要捕捉指定路徑的請求流量時,可以使用該機(jī)制, 如只同步/api路徑下的請求

          gor?--input-raw?:8080?--output-http?staging.com?--http-allow-url?/api

          只收集請求頭中符合 api-version 為 1.0x 的請求

          gor?--input-raw?:8080?--output-http?staging.com?--http-allow-header?api-version:^1\.0\d

          6?限速機(jī)制,由于生產(chǎn)服務(wù)器配置一般遠(yuǎn)高于測試服務(wù)器配置,所以直接將生產(chǎn)服務(wù)器全部流量同步到測試服務(wù)器是不可行的,goreplay提供了兩種策略:

          a. 限制每秒的請求數(shù)

          gor??--input-tcp?:28020?--output-http?"http://staging.com|10"#?(每秒請求數(shù)限制10個以內(nèi))
          gor??--input-raw?:80?--output-tcp?"replay.local:28020|10%"??#?(每秒請求數(shù)限制10%以內(nèi))

          b. 基于Header或Url的參數(shù)限制一些請求,為指定的header或者url的請求設(shè)定限制的百分比。

          gor??--input-raw?:80?--output-tcp?"replay.local:28020|10%"?--http-header-limiter?"X-API-KEY:?10%"
          gor??--input-raw?:80?--output-tcp?"replay.local:28020|10%"?--http-param-limiter?"api_key:?10%"

          7、流量加壓,當(dāng)需要對線上服務(wù)進(jìn)行整體性能壓測時,可將線上請求擴(kuò)大N倍,進(jìn)行引流,將請求擴(kuò)大1倍,也可縮小,調(diào)整"|"后面的百分比即可。

          gor?--input-raw?:80??--http-allow-method?GET?--output-http?"http://target_server:8080|200%"

          8、只復(fù)制某個URL請求,--http-allow-url參數(shù),-http-allow-url參數(shù)可用正則表達(dá)式(--output-http-url-regexp在gor 0.16已經(jīng)過期,使用--http-allow-url代替)。

          gor?--input-raw?:8080?--http-allow-method?GET?--output-http?"http://target_server:8080"?--http-allow-url?mall.*hotword

          9、多目標(biāo)服務(wù)器的流量復(fù)制引流,有點類似nginx的mirror。

          gor?--input-raw?:80?--output-http?"http://target_server:8080"?--output-http?"http://target_server2:8080"

          10、將流量轉(zhuǎn)發(fā)到多個端點,默認(rèn)情況下,它會將相同的流量發(fā)送到所有輸出。

          gor?--input-tcp?:28020?--output-http?"http://staging.com"??--output-http?"http://dev.com"

          11、將相同的流量發(fā)送到多個站點,并且平分所有流量。

          gor?--input-raw?:80?--output-http?"http://staging.com"??--output-http?"http://dev.com"?--split-output?true

          12、HTTP超時,默認(rèn)情況下,http請求和響應(yīng)的超時時間為5秒。你可以像這樣覆蓋它:

          gor?--input-tcp?replay.local:28020?--output-http?http://staging.com?--output-http-timeout?30s

          13、基本身份驗證,如果您的開發(fā)或登臺環(huán)境受基本身份驗證保護(hù),那么可以在重放期間注入這些憑據(jù):

          gor?--input-raw?:80?--output-http?"http://user:[email protected]"

          14、性能壓力測試,可以將流量復(fù)制到文件,然后再對他們進(jìn)行回放。回放的時候,流量會維持原始的時間間隔。如果你使用了百分比來進(jìn)行速率限制,那么回放的速率會相應(yīng)的增加或減少。有了這種速率限制,gor就可以用來進(jìn)行壓力測試。

          gor?--input-file?"requests.gor|200%"?--output-http?"staging.com"

          目前,input-file僅在使用基于百分比的限制器時才支持此功能。與默認(rèn)限制器不同input-file,它不會降低請求速度,而會減慢速度或加速請求發(fā)射。

          15 、錄制與回放

          ./gor?--input-raw?:8000?--output-file=requests.gor

          執(zhí)行錄制命令后,將會創(chuàng)建新文件并不斷向其寫入所有捕獲的請求。

          16、流量回放,重播來自文件的請求。

          ./gor?--input-file?requests.gor?--output-http="http://localhost:8001"

          您應(yīng)該看到所有記錄到http://localhost:8001的請求,并且它們將以相同的順序重播,并且與錄制的時間完全相同。

          GoReplay更多用法可參考官方文檔:https://github.com/buger/goreplay/wiki/Getting-Started


          更多實用功能,讀者們可自行探索,如果覺得有用,幫忙點個好看朋友圈轉(zhuǎn)發(fā)分享一下就行。


          PS:? 由作者親自授課主講的「全棧測試開發(fā)技能訓(xùn)練營」一期只剩最后幾個名額了,需要參與的同學(xué),請盡快聯(lián)系作者。課程詳細(xì)介紹重磅消息 | 2020年最新全棧測試開發(fā)技能實戰(zhàn)指南(第1期)



          推薦閱讀


          推薦一款技術(shù)人必備的接口測試神器:Apifox

          推薦一款Python開源庫,技術(shù)人必備的造數(shù)據(jù)神器!

          測試?yán)?| 一款開源的Diffy自動化測試框架:超詳細(xì)實戰(zhàn)教程講解

          DevOps研發(fā)模式下「產(chǎn)品質(zhì)量度量」方案實踐

          重磅消息 | 2020年最新全棧測試開發(fā)技能實戰(zhàn)指南(第1期)


          END

          所有原創(chuàng)文章
          第一時間發(fā)布至此公眾號「測試開發(fā)技術(shù)」

          長按二維碼/微信掃碼 ?關(guān)注


          關(guān)注后,回復(fù)「百人計劃」試試
          點擊閱讀原文
          瀏覽 80
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  XXAV在线观看视频 | 久久精品导航 | 三级片在线观看视频 | 天堂在线免费视频 | 在线成人无码 |