近日,滴滴在 GitHub 上開源後端研發、調試、測試的實用工具 Rdebug,全稱 Real Debugger,中文名 真・Debugger。使用真實的線上流量進行線下回放測試,提升研發效率、保障代碼質量,進而減少線上事故。
背景
隨着微服務架構的普及和應用,一個複雜的單體服務通常會被拆分成多個小而美的微服務。在享受微服務帶來便利的同時,也要接受因爲微服務改造帶來的問題:需要維護的服務數變多、服務之間 RPC 調用次數增加。
這就造成線下環境維護成本大大增加,其次線下環境涉及到的部門較多,維護一個長期穩定的線下環境也是一個挑戰;業務快速發展、需求不斷迭代,手寫單測又因複雜的業務邏輯以及複雜的服務調用需要 mock 多個下游服務,導致手寫和維護單測成本特別的高;手動構造數據,又不夠全面真實。以上問題都嚴重影響 RD 的研發效率,並且增加線上產生事故的隱患。
RD 迫切需要一個只需在本地部署代碼、不用搭建下游依賴、使用真實數據,進行快速開發、調試、測試的解決方案。Rdebug基於流量錄製、流量回放的思路,能夠巧妙的實現上述方案。
宗旨
提升研發效率、降低測試成本、縮短產品研發週期,保障代碼質量、減少線上事故。
全新的研發體驗
- 只需部署模塊代碼,無需搭建下游服務;
- 在macOS本地回放,開發、調試、測試無需登錄遠程服務器;
- 流量錄製支持常用協議,FastCGI、HTTP、Redis、Thrift、MySQL 等;
- 回放速度快,單次回放秒級別。
路徑重定向
爲了方便 RD 在本地開發、測試,Rdebug 支持路徑重定向。
當線上部署路徑和本地代碼路徑不一致時,當代碼中存在大量線上路徑硬編碼時,無需入侵式修改代碼,只需要簡單的配置即可實現路徑重定向。
即代碼可以存放在任何路徑下回放。
時間偏移
流量回放時會自動把時間偏移到流量錄製的時間點。
在代碼中獲取時間時,會獲得錄製時間點之後的時間。所以,當業務接口對時間敏感時,也無需擔心。
文件Mock
流量回放支持文件 Mock,指定文件路徑和Mock的內容,即可快速實現文件Mock。
結合錄製上報功能,在線上上報配置讀取,在線下使用文件Mock實現配置“重現”。
Elastic搜索
對存儲在 Elastic 中的流量,支持 URI、輸入輸出關鍵詞、下游調用等多維度搜索。
回放支持指定文件,也支持上述搜索回放,使用體驗更佳。
Xdebug 調試
最高效的功能是 Xdebug 聯動調試,通過對代碼設置斷點即可使用線上流量進行調試。通過這種方式,可以用來研究代碼、排查問題、查看下游接口響應格式及數據等,是一個開發調試利器。
回放報告
回放報告,彙總線上線下的輸入、輸出、結果對比,一目瞭然。
下游調用報告,會列舉出所有的下游調用,包括協議、請求內容、匹配上的響應以及相識度。通過不同的背景顏色,標記出完全匹配的流量、存在噪點的調用、缺失的調用、新增的調用等。
結合 Xdebug 生成覆蓋率報告,能夠清楚的看到哪些代碼被執行、哪些代碼未被執行以及接口的覆蓋率情況。
有關安裝、使用過程以及常見問題解答,請查看以下鏈接:
GitHub:https://github.com/didi/rdebug
Wiki:https://github.com/didi/rdebug/wiki
Documentation:https://github.com/didi/rdebug/blob/master/doc/DocList.md