大規模信息流推薦系統 研發效能提升之優秀實踐
信息流產品為了給大家提供千人千面的內容推薦,后端構建了一個龐大、復雜的推薦系統,整個系統包括上百個模塊,上百個策略算法以及模型,并且這個系統以極高速的效率迭代,日均上線近百個需求; 這樣龐大的系 統如何做到這樣高速穩定的迭代呢? 這里離不開 PM、RD、QA等各角色共同構建的智能交付系統 。
本文主要介紹了百度大規模信息流推薦系統研發、交付效能提升的相關實踐。涵蓋研發、測試、發布、上線部署各個階段,通過智能化手段,結合數據和算法,實現效能提升、以及流程智能流轉,最終實現全流程的無人值守。
一、背景介紹
信息流產品為了給大家提供千人千面的內容推薦,后端構建了一套龐大、復雜的大規模推薦系統,整個系統包括上百個模塊,上百個策略算法以及模型,并且整個系統以極高速的效率不停迭代相關的策略以及架構,日均上線百次;這樣龐大的系統如何做到這樣高速且穩定的迭代呢?這里離不開PM、RD、QA等各角色共同構建的智能交付系統。
△圖表 1:簡化推薦系統
智能交付系統覆蓋從研發、測試、發布到上線的各個環節,首先要設計一套高效運轉的交付模式,并針對當前交付模式各個環節的問題逐個擊破:
△圖表 2:交付模式示意圖
1. 研發及自測階段: 以微服務化、業務框架&執行引擎為開發者賦能,降低研發成本,提升研發效率,并探索以自主測試為驅動的新研發模式,通過QA提供的優質交付服務、RD自身質量意識和代碼可測性的提升,進而實現研發測試一體化(測試能力左移為研發提供服務、可測性改造等;研發右移提供更多的基礎架構能力、質量意識提升等)來試點整體效能提升;
2. 測試階段: 將每個測試行為拆分為測試輸入、測試執行、測試分析、測試定位4個子環節,在建立完備的測試體系之后,通過數據和算法,以智能的手段對各個子環節賦能,提升整體的測試效率和召回能力,并釋放排查、定位、結果校驗分析各處的人力;
3. 發布階段: 從測試評估角度評估需求是否可以發布上線,滿足上線條件的需求智能流轉至上線部署階段,實現流程的無人值守;
4. 上線部署階段: 從編譯優化&部署包裁剪、智能監控、并發動態調整,服務重啟優化4個方面,聯合OP、EE、RD共同提升上線效率;
5. 底層: 依賴于強大的中臺能力,包括配置數據管理、構建中臺、策略中臺等等中臺支撐流水線高效運轉。
△ 圖表 3:智能交付系統示意圖
二、核心問題&解決方案
2.1 研發&自測階段--該階段主要解決研發效率和自測效率問題
2.1.1 業務框架&執行引擎構建
1. 背景
目前,融合層的眾多策略&業務邏輯,都比較分散。主要體現在以下幾個方面:
-
代碼架構: 策略邏輯不內聚,數據依賴分散,缺乏通用性;
-
研發效率: 開發一個調權功能,需要修改n個文件函數,并且每個地方的依賴數據和使用方式可能不盡相同,在開發前需要先熟悉各個位置的代碼,開發過程中很容易漏掉某個地方沒開發到,研發調試、測試周期被迫延長。
基于上述背景,預期實現一個算子執行框架,其主要目標如下:
-
規范算子接口和數據依賴,提升策略代碼通用性和迭代效率;
-
框架對外接口盡可能簡單,內部執行實現盡可能輕量。
2. 實現
框架在實現上拆分成了兩部分: 核心執行+執行策略。 如下圖:
△圖表 4:業務框架&執行引擎設計圖
(1) 核心執行
主要功能: 根據給定『執行模式』運行算子。核心細節上包括如下:
-
并發多路&短路執行功能,輸入處理數據組織方式支持:流式&隨機訪問容器;
-
算子支持帶狀態&無狀態模式,實現算子執行的信息采集和反饋。
(2) 執行策略
主要功能:根據核心執行采集的信息,生成『執行模式』。具體實現邏輯是:采集核心執行每個算子的運行信息,輸入執行分析策略模塊,生成下一次核心執行的執行模式,核心細節包括如下:
-
獨立線程定期分析運行情況,生成運行模式;
-
運行模式更新和使用采用0-1buf減少讀取&寫入的競爭;
-
執行分析策略模塊,采用插件化設計(類似路由iptable),生成運行模式的時候,順序遍歷每一個策略,支持自定義開發不同的執行分析策略模塊。
2.1.2 新研發模式試點
1. 背景
所謂自主測試就是RD在研發過程中自行利用優質的測試相關服務進行質量保障,再結合完備有效的自動化能力直接給出可交付結論的研發行為; 整體通過建設極致流水線和測試服務能力,引入研發深度參與測試,并結合智能化測試落地,提升整體交付效能。
2. 實現
-
流程變化: 原有提交代碼后QA根據本次變更補充相應case,以覆蓋變更場景,左移至RD開發環節;
-
RD工作: RD在開發需求、策略代碼的同時,在QA提供的測試服務能力基礎上,通過配置case或者編寫自定義校驗函數的完成case書寫工作,整體case編寫成本30min之內;
-
QA工作: QA通過建設可配置化模塊接入,配置化case添加的自動化測試框架,提供低成本使用的測試服務能力,降低RD case書寫成本;并且測試服務能力覆蓋包括基礎校驗、策略校驗等90+%核心功能點,流水線覆蓋功能、性能、穩定性等P0測試場景,以保障此部分的需求無風險上線。
△ 圖表 5:新研發模式試點
2.2 準入&測試階段--該階段主要解決測試效率問題
我們建設了集成『自動化測試』、『性能測試』、『穩定性測試』等各項工程能力的完備流水線作為準入系統。建立了完備的工程能力之后,我們還是遇到了這樣的問題:
-
自動化測試能力更多的是 作 為功能回歸能力,如何能夠快速覆蓋新增功能,提升自主測試呢?
-
性能diff測試產出報告包括上百個指標項,如何分析,如何判斷是因為系統原因引起的波動,還是代碼變更引起的上漲,降低分析成本呢?
-
包含如此多項能力的準入系統,如何能夠更高效運轉,提供給RD和QA絲滑般的流水線體驗呢?
所以,在智能交付時期,基于前期建設的完備測試能力的基礎上,以中臺和數據支撐,策略算法賦能,為整個準入系統提質增效,并通過分析、定位、評估智能化,流程智能流轉,釋放投入人力。
△ 圖表 6:智能化無人值守流水線示意圖
2.2.1 測試輸入:智能case生成
1. 背景
自動化測試能力更多的是做為功能回歸能力,如何能夠快速覆蓋新增功能,將部分非自主測試項目功能高質高量覆蓋,提升自主測試呢?
2. 實現
通過對增量代碼的白盒分析結果,結合業務策略,進行測試用例生成,以盡可能覆蓋本次新增功能。
△ 圖表 7:智能case生成方案
2.2.2測試執行:智能構建
1. 背景
來自靈魂的拷問,是否針對每個需求,準入階段所有的任務都需要跑一遍,如果只改了日志類函數等場景,有必要跑那么重的構建?答案肯定是不需要的,但是怎么判斷哪些任務是需要跑,哪些任務是可以跳過的呢?
2. 實現
基于智能構建中臺能力,結合業務特性,以及白盒分析、歷史任務結果等特征,以策略智能決策任務是否需要運行,打破流水線任務機械重復執行的現狀,讓數據和算法策略代替人來對于流水線任務裁剪進行決策,進而提升流水線運行效能。
△圖表 8:智能構建系統
2.2.3 測試分析:性能白盒分析
1. 背景
為了防止速度衰退,性能diff測試已經是測試能力必不可少的一環,工程能力已經完備,但是對于性能測試結果的分析仍然是這其中的耗時耗力的工作:
-
性能測試報告包括上百個指標項,要如何分析呢?
-
系統級長尾耗時波動問題困擾已久,單一階段耗時的99.9分位值很難判斷是否異常,怎么有效的攔截長尾惡化呢?
-
模塊級耗時指標異常,如何判斷是因為系統原因引起的波動,還是代碼變更引起的上漲,降低分析成本呢?
2. 實現
(1)基于dapper的長尾惡化攔截: 基于RD的全局性能分析系統(dapper system),我們已經具備了系統性能的可觀測性,將dapper與線下性能測試結合作為數據依據,再加上業務策略算法做決策,我們就具備了長尾惡化攔截的能力。
△ 圖表 9:性能測試白盒分析-長尾攔截
(2)基于白盒代碼分析波動消除: 基于dapper耗時日志分析結果,結合函數調用鏈分析,預估耗時影響,以及增量代碼所影響的耗時階段,對異常波動進行消除矯正
△ 圖表 10:性能測試白盒分析-波動消除
2.2.4 無人值守:流程智能流轉
1. 背景
前面介紹的主要集中在研發自測->準入測試各個階段的效率的提升,效率提升之后,流水線還是需要依賴于人力以及經驗進行判斷以及流程上的流轉,那么這部分的人力,我們是否可以通過數據以及算法來代替人來做決策,讓流水線在各個階段之間更加的絲滑的流轉呢?
2. 實現
從需求環節開始,在每個節點,通過質量度模型&風險評估指導流程流轉;在階段的起點,挖掘本次變更引入的風險,以及風險發生的概率,相應的影響,結合風險矩陣進行風險的評估,并在各個階段終點,綜合階段的數據以及特征,評估風險降級等情況,指導是否可以轉入下一階段,最終給出需求上線的綜合風險,實現流程上的無人值守。
2.3 發布&上線部署階段--該階段主要提升部署效率
1. 背景
上線部署階段的效率決定了整個產品能夠達到的發布頻率的上限,可以降低需求待上線的等待耗時,所以2020年Q3 聯合RD、OP、EE針對上線部署環節效率提升做了專項優化。
2. 實現
主要從流程規范、平臺優化、工程能力3個維度,部署包裁剪、并發動態調整、重啟耗時優化、監控能力智能化等幾個方面入手,針對打包、部署、后置檢查、人工檢查各個階段做相應的效能優化。
△ 圖表 11:上線部署耗時優化方案以及效果
三、總結&效 果
通過研發業務框架&執行引擎、研發測試一體化、智能流水線、流程智能流轉,上線效率提升等等一系列的建設,推薦技術方向效能明顯提升:50%+的需求實現天級研發測試交付,且線上質量平穩,穩中有升。
-
模式創新: 實現研發測試一體化,RD在研發過程中利用優質的測試相關服務進行質量保障的自主測試模式,自主測試率大幅提升,從而提升需求交付效率;
-
天級交付&吞吐上升: 交付需求400+/周,其中50%+的需求能夠天級研發測試交付;
-
人效提升: 通過流水線穩定性提升、自動標注、智能客服等,大大的釋放了QA在流水線運維投入的人力;通過測試評估以及流程智能流轉,實現部分項目無需QA投入,無人值守,QA人效得到提升;
-
質量平穩: 迭代效率大幅提升的情況下,質量保持平穩,且穩中有升,線上問題數平穩下降。