1、POIZON2018年碩士畢業武漢大學擁有5年的后端開發經驗;曾任職美團、喜馬拉雅,現任于得物,主要負責流量錄制回放平臺POIZON基 本 介 紹01平 臺 成 果02業 務 架 構 圖03預 發 不 m o c k 回 放04線 下 m o c k 回 放05穩 定 性06應 用 場 景07展 望08什么是流量回放流量回放vs接口自動化流量回放接口自動化用例編寫人工寫代碼自動維護成本高低檢查點人工定義-關鍵字段1.自動-Response全文2.自動-子調用入參業務邏輯測試支持支持不好覆蓋率人工準備場景真實流量不計成本:接口自動化流量回放相同成本:流量回放接口自動化接入應用數 平臺發現問題技術
2、改造節省人日接口中含有Redis部分寫操作(沒有其他寫操),這種情況也可以標記只讀。在回放過程中針對這種情況平臺也會進行mockRedis write mock接口中含有發mq消息(沒有其他寫操作),這種情況也可以標記為只讀。在回放過程中針對這種情況平臺也會進行mockSend mqmock接口中存在寫日志(mybatis insert),這種情況也可以標記為只讀。在回放過程中針對這種情況平臺也會進行mockMybatis insert mock將將Response的的json排除無需比對字段排除無需比對字段忽略數組順序影響忽略數組順序影響結果差異比對結果差異比對只有新增只有刪除只有內容變更新
3、增&刪除刪除&內容變更新增&刪除&內容變更接口維度+差異字段分組問題背景解法如何解決小流量場景(稀疏流量)的錄制問題?受限于業務方的接口的qps、平臺接口采樣、平臺限流及生產機器集群(只會錄制其中某一臺機器)的緣故,導致稀疏流量(小流量)很難被采集到,那么流量未覆蓋的場景會變成未知的風險。以下主要針對讀接口中稀疏流量(主要是接口維度的小流量問題)問題背景解法如何避免生產數據污染?預法回放是不mock回放,如何觸發寫操作,可能導致污染生產環境的數據(目前我司生產和預發共用一套數據庫)【人工】只讀接口人工確認【自動】平臺回放前對疑似寫操作攔截【自動】平臺回放中對疑似寫操作攔截并阻斷回放遺留問題 沒
4、有被沙箱切到的子調用無法攔截,如使用httpcomponents客戶端的http 目前只能對回放應用本身寫操作攔截,無法攔截下游應用的寫操作問題背景解法如何解決跨服務下讀場景的寫操作問題?(流量標識)預發不mock回放可能會影響某些業務,如數據埋點、算法的推薦模型等在鏈路上下文中添加流量標識,以便區分正常流量和流量回放的流量其他應用場景根據回放標識,業務可以定制回放流量的處理邏輯 影子表方案實施 寫保護操作 不同的限流操作 不同的日志策略在實際的使用過程中發現存在以下問題,雖然錄制回放很多流量,但是這些流量覆蓋哪些場景,用戶是無法感知的。原因是沒有衡量指標,就無法放心使用其進行回放。如何衡量這
5、個回放結果是否可靠?方案概念優勢劣勢接口維度覆蓋率已覆蓋接口/所有的接口簡單不能很好衡量,粒度比較粗場景(標簽)維度覆蓋率已覆蓋場景/所有的場景場景有具體的含義標簽管理維護比較困難和耗時代碼覆蓋率將使用一個或多個標準來確定在執行測試期間代碼是如何執行的,指標有:函數、分支和行覆蓋率等在定義程度上可以反衡量你的代碼不能夠準確的衡量,原因只能覆蓋讀的場景檢查點一:對錄制的子調用與回放的子調用參數匹配,如case1、case2、case3等檢查點二:將錄制的Response與回放的Response進行diff,如case4將將Response的的json排除無需比對字段排除無需比對字段忽略數組順序影
6、響忽略數組順序影響自動忽略時間的差異自動忽略時間的差異結果差異比對結果差異比對接口失敗原因失敗字段統計報告覆蓋率 接口維度覆蓋率 多調用-參數不一致 多調用-uri不匹配 少調用$.xx字段比對差異 失敗分類餅圖 失敗結果餅圖 流量回放統計數據 子調用鏈路覆蓋率 代碼覆蓋率問題背景解法如何解決嵌套錄制導致回放失敗問題一些中間件、第三方框架或業務自己封裝的框架可能會出現兩個嵌套的子調用(平臺切的兩個切面),由于錄制會錄制到兩個子調用,但是回放只會匹配到外層子調用(mock掉,不會調用嵌套在里面的子調用),導致回放失敗。對于嵌套錄制子調用,可以通過只錄制嵌套外層的子調用,不錄制嵌套在里面的子調用,
7、即可解決上面的問題問題背景解法如何解決時間差異帶來的回放失敗問題在一些業務服務邏輯中存在和時間相關的邏輯,由于錄制的時間和回放的時間不一致導致回放失敗。平臺這邊目前有兩種解法,第一種解法通過將時間還原到錄制的時間,但是這種解決不了,毫秒級別導致回放;第二種解法通過自定義子調用(自定義切面),通過mock的方式來解決毫秒級別導致回放失敗,但是這種方式可能存在缺點是業務可能要改造。問題背景解法如何解決系統噪音帶來的回放失敗問題?在業務服務中里面會存在一些requestId、traceId等通用噪音字段,這些噪音字段導致回放失敗。通過平臺支持的全局、應用、接口級別的噪音字段配置,通過這三種方式解決通用字段和業務系統個性化噪音字段,從而提高回放的成功率穩定性沙箱掛載風險點沙箱掛載機器cpu飆高平臺措施生產環境只允許一臺機器沙箱掛載平臺巡檢錄制風險點開啟錄制可能會導致死鎖錄制在一定程度上消耗cpu和可能增加rt平臺措施流量錄制預熱只讀接口只錄制關鍵信息錄制過程進行監控,異常降級功能迭代需求回歸技術改造服務遷移或重構增加數據來源預發不mock回放線下mock回放穩定性POIZONTHANKS