性能:流量回放搭建


OTDD (Online Test Driven Development的縮寫),是一個開源的流量回放系統,其主頁:https://otdd.io,github:https://github.com/otdd/release

和傳統的流量回放相比,其最大的區別是它會自動將服務的請求/返回(inbound request / response )和其第三方依賴請求和返回(outbound requests / responses) 自動關聯起來,所以它有如下巨大的價值:

1. 可以直觀的檢查和理解線上的處理流程細節

2. 可以正確的mock掉所有第三方依賴,同時這些mock還可以編輯,極大的加快開發過程

3. 可以用線上錄制的流量精准的對開發代碼進行測試

為什么要用OTDD?

微服務架構主要面臨如下問題:

1. 難以在線下構造第三方依賴

眾多被依賴的服務需要在開發/測試環境啟動,且其數據狀態不一致問題突出和難以解決。

2. 難以構造復雜的測試場景

復雜的測試場景對應復雜的第三方依賴的返回,要么手動mock,要么構造第三方數據,特別繁瑣。

3. 測試case難以維護

微服務經常升級,測試case難以維護。

而OTDD完美的解決了這些問題

1. 所有的第三方服務會被用錄制的線上數據自動mock,完美解決第三方依賴問題。

當流量回放時,被測服務的所有outbound request通過iptables被轉發到本地的OTDD test runner,然后該runner根據線上錄制的數據返回對應的response.

2. 線上流量自動被OTDD錄制,無論場景有多復雜

3. 當有新的feature上線后,錄制的流量自動更新,不再需要手工更新test case庫

OTDD是如何工作的?

OTDD重點解決兩方面的問題

1. 線上流量的錄制

OTDD運行在kubernetes和istio之上,利用istio對所有流量的托管,通過編譯到envoy的otdd filter對流量進行特殊的處理,讓流量在單個服務上間隔一個時間gap串行的處理,利用這個時間gap來對inbound req/resp和outbound reqs/resps建立對應關系。

當應用OTDD進行流量錄制的時候,OTDD會自動創建一個redirector和recorder。該redirector和其他正常的服務pod一樣,會自動接收到正常的線上請求,然后隨機采樣間隔性的串行轉發請求到recorder。而recorder則只會接收到redirector轉發過來的串行請求。然后inbound req/resp和其對應的outbound reqs/resps將在recorder上被錄制。

2. 流量的回放

OTDD test runner

OTDD對流量的回放都發生在tcp層級。

OTDD 的test runner運行在本地,其會不斷從otddserver拉取指定的流量來回放。當一個流量被拉取到后,其inbound request會被其直接發送到本地的被測服務,同時,通過iptables攔截該被測服務的所有outbound請求,然后用流量的outbound response來自動mock。

OTDD test runner有兩種運行模式:

a. 以一個standalone docker的方式運行

該方式適用於被測服務運行在docker里面的場景,比如一個php docker或者nginx docker。

其會獨立啟動一個test runner docker,然后被測docker共享其網絡到test runner docker實現回放。

b. 以一個service的方式運行

該方式適用於大多數傳統的linux下的開發模式。

test runner將會運行在獨立的linux用戶里,然后將被測服務通過iptables進行網絡攔截。

DDL語言

由於所有的流量都在tcp層級,為了可讀性和可編輯性,針對不同的application protocol引入了DDL語言,及其對應的encoder/decoder plugin實現。

encoder/decoder plugin主要負責:

a. 解析tcp層面的數據到DDL,使其變得humman readable,且可以編輯。

b. 將DDL encode成tcp層面的數據,使其可以回放。

由於OTDD在不斷的添加對不同application protocol的支持,所以這些ddl plugin被設計成可以在otddserver里面去管理(安裝或者卸載)。目前支持的protocol有:http, thrift, redis等。

 

OTDD目前來看是流量回放領域里面的一顆新星,解決了長期以來傳統的流量回放只管線上流量的無序錄制,卻無法有序管理和利用的老大難問題,目前其已經正式發布了0.1.0版本,趕緊去試試吧! https://otdd.io/getstarted


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM