博客 / 詳情

返回

百度搜索結果波動的極致治理

作者 | ZZ

導讀

本文講述百度搜索系統面臨搜索結果一致性的挑戰,如何準確衡量並消除不一致因素成為關鍵問題。本文介紹了百度搜索系統針對結果波動問題的創新解決方案,通過設計數據打平技術,將問題量化至服務與特徵層面,並利用fake流量與動態debug機制進行大量實驗與數據收集。同時,採用多實驗統籌與自動巡檢機制提高實驗效率與分析自動化,最終成功捕獲所有對結果波動有實質貢獻的特徵,為系統優化提供了精確指導,顯著降低了結果波動。

01 結果一致性刻畫

百度搜索系統是一個複雜的異地多活分佈式系統,旨在高效滿足用户的搜索請求(query)的同時,確保結果的一致性,並極力消除不穩定因素對搜索結果一致性的負面影響,以保障用户體驗。

影響搜索結果一致性的因素有很多,包括用户的因素、時間的因素、系統的缺陷或故障,等等。這些因素中,有些是合理的,比如:系統更新過程中,同一用户在不同時間得到不同的結果。也存在不合理的因素,比如:服務實例的偶發故障。在刻畫搜索結果一致性時,我們的目標是排除合理因素的干擾,僅反映不合理因素帶來的不一致性。為此,我們設計了一種方法,排除用户因素和時間因素這兩個最大的合理因素,使指標主要反映不合理因素。

1.1 量化

我們實時地從所有進入搜索系統的query中,按很小的概率隨機抽取一小部分query集合,稱為“用户diff率小流量”。對於小流量中的每個query,我們用一種方法產生兩個完全相同的queryA和queryB,即“query對”,使它們同時進入系統處理,分別得到結果resultA和resultB。resultA和resultB的url序列會在頂層服務進行比對。如果兩份序列不一致,那麼我們就稱為該query是個“有diff的query”。

在一段時間內,用户diff率小流量包含的query總數為N,其中有diff的query數量為M,那麼定義這段時間內的“diff率”為M / N。

通過這種方式,我們可以生成diff率的監控曲線圖,稱為diff率曲線。如下圖所示。

圖片

1.2 問題表現

理想情況下,如果系統可靠穩定,diff率應該非常接近於0。而實際情況是,diff率曲線表現為一個顯著大於0的值,有時,會突然暴漲並在隨後的某個時刻突然下跌,或者長時間保持在一個比較大的值,根因難以定位。主要歸因於搜索系統的龐大規模、query處理流程的複雜性以及中間數據形態的多樣性。

1.3 通常做法

常規方法應對diff率問題雖然直觀,但是不足之處也有很多。基於線下測試,雖然簡單易行,但是因環境差異,結論難以直接應用於生產環境。全量tracing和logging機制雖然強大,但是在生產環境中因性能和存儲限制,難以獲取足夠的調試級別數據(debug數據)來分析diff率根因。基於關鍵位置特徵dump的方案,通過統計特徵自身不一致率來識別潛在問題,但它屬於相關性分析,難以確立因果關係,並且因抽樣分析導致可能遺漏真正原因。

02 我們的方案

從以上的各種困境可以看出,沒有一個小而美的方法能直接找到根因。為了應對這些挑戰,我們提出並實施了一套創新的解決方案。要點如下。

1.通過在生產環境進行特徵打平實驗,來證明特徵對大盤diff率的貢獻度,從而避免任何“推斷”導致的結論偏差。

2.通過多種手段極致優化單次實驗的執行效率和根因分析能力。

3.自頂向下白盒化搜索系統,使大盤diff率完備地拆解到各個局部系統的各特徵,並基於流量的空間複用機制並行化全部打平實驗。

4.建設自動巡檢機制產出系統各局部的各特徵對大盤diff率的貢獻度,形成人工0參與的自動化飛輪機制,使diff率貢獻者完全暴露,對優化工作帶來直接的指導。

如下圖所示。

圖片

2.1 底層機制

若系統在處理query對(queryA, queryB)時,某局部子系統返回的結果(resultA, resultB)完全相同,則該局部對大盤diff率貢獻度就為0。通過主動調整此局部子系統,使其對相同query對的結果一致(即“打平”),可將該局部對大盤diff率的貢獻歸零。

為了量化某局部對大盤diff率的貢獻,設原始大盤diff率為D。在生產環境中,通過一定方法對該局部在用户diff率小流量中的query對結果進行打平,觀察大盤diff率變化至Dx(保持不變或降低),則該局部對大盤diff率的貢獻顯然為D - Dx。此外,還可以對結果中特定特徵進行打平,進一步評估該特徵對大盤diff率的貢獻。原理如下圖。

圖片

工程實現要點:

1.流量染色:在query中添加染色標記,用於指示在特定處理階段後,需要與打平server進行交互,這包括數據的發佈與打平結果的接收。

2.動態角色分配:打平server根據數據到達的先後順序,動態確定發佈者和訂閲者角色,先到達的數據視為發佈者,後到達的視為訂閲者。

3.數據打平處理:發佈者的數據包與訂閲者的數據包均被髮送至打平server進行保存和決策。對於發佈者,直接返回其數據包;對於訂閲者,根據預定義配置對其數據進行打平操作,這包括整體複製發佈者的數據包或修改訂閲者數據包中的特定特徵,以生成打平後的數據包並返回給訂閲者。

2.2 單次打平實驗

2.2.1 實驗效率

針對系統中服務間交互的數據包格式,設計統一的特徵位置描述規則,簡化打平實驗的配置流程。同時,針對不同的打平場景(例如,在數據形態X的情況下打平Y特徵),抽象出不同類型的打平策略以便直接使用。如下圖所示。

圖片

2.2.2 爆炸半徑 VS. 實驗結論可靠性

為了完全不影響用户體驗,打平實驗雖然在很小比例的流量下進行,我們也嘗試使用fake流量,使爆炸半徑完全降到零且不失實驗準確性。

用户diff率小流量反映真實diff率,而fake流量雖能降低爆炸半徑至零,但與真實流量存在差異,可能導致diff率不一致。為確保實驗可靠性,需在fake流量與真實流量反映的diff率一致的前提下進行實驗。

為此,採取“解耦”做法:維持原用户diff率小流量不變,僅用於產出真實diff率;設立diff率fake基準小流量和diff率fake實驗小流量,前者僅用於產出fake基準diff率,後者既用於產出diff率又用於打平實驗。在不進行實驗時,fake實驗diff率與fake基準diff率天然一致,因此可將fake基準diff率視為fake小流量不進行實驗時的diff率。

使用方法為:在真實diff率與fake基準diff率一致的前提下,利用diff率fake實驗小流量進行打平實驗,此時實驗結論才有效。通過diff率fake基準小流量這個“橋樑”,實現了打平實驗的零爆炸半徑與結論可靠性的兼得。如下圖。

圖片

2.2.3 動態debug

藉助fake流量,我們能夠自由地執行所需操作,確保不會對用户體驗產生負面影響。利用fake流量,我們不僅限於進行打平實驗,還進一步產出調試級別的詳盡現場數據(即debug數據)。這使我們不僅能夠評估各特徵的貢獻度,還能依託debug數據深入剖析並定位問題的根因。順便説明,debug數據的收集採用類似dapper原理。如下圖。

圖片

2.3 多實驗統籌

2.3.1 大盤diff率完備拆解

儘管單次打平實驗成本已顯著降低,但全面評估搜索系統中各局部及特徵對大盤diff率的貢獻仍需大量實驗,成本較高。為在有限時間內高效完成實驗,我們採用自頂向下的策略,逐步深入拆解。

首先,對query處理過程進行白盒化分析,將系統分層拆解,並逐層進行打平實驗,以聚焦主要矛盾。具體步驟包括:

1.對首層全部局部進行整包打平,識別貢獻度最大的局部;

2.對貢獻度最大的局部進一步拆分至第二層,重複整包打平,尋找貢獻度最大的二級局部;

3.依次類推,逐層深入,直至各局部貢獻度降至指定閾值以下。

然後,針對找到的局部,我們進一步識別顯著貢獻度的特徵。

示意圖如下

圖片

2.3.2 流量空間複用

從系統容量安全考慮,當實驗數量增多時,我們不以scale out的方式增加實驗流量,而是使總實驗流量比例保持不變的情況下,以scale in的方式向內拆解流量,形成諸多流量桶。每個桶建立獨立diff率指標曲線,並可獨立進行打平實驗。結合service mesh實現流量流量選桶及實驗類型配置。流量總桶數N靜態配置,流量屬於哪個桶通過queryID對N取模確定。打標記的流量在搜索系統對應位置進行發佈、訂閲動作,並傳達到打平server實現特徵打平。如圖所示。

圖片

2.4 自動巡檢飛輪

在打平實驗決策及配置確定後,從實驗執行到diff率監控反饋的自動化流程已實現。為進一步提升自動化水平,我們引入了“自動巡檢”機制,旨在實現打平實驗的閉環自動決策與結論產出。如下圖

圖片

該機制包括打平實驗自動決策(圖左)與diff率貢獻度報表自動生成(圖右)兩部分。自動決策部分通過dump request和response包到打平server,執行打平動作並存儲數據包。隨後,特徵自身一致性計算和篩選server定期從存儲系統中獲取數據包,計算各特徵自身不一致率,篩選出候選特徵並生成打平實驗配置,推送到mesh控制面以執行實驗。報表自動生成部分則通過新建報表生成server,定期從監控系統中提取各桶diff率數據,計算對應特徵貢獻度,並生成貢獻度報表。

此套系統顯著提高了分析效率與準確性,實現了全程自動化與智能化,達到了人工零參與。

03 效果

本文提出的創新方案取得了顯著成效,成功捕獲了所有對大盤diff率有實質貢獻的特徵,並深入分析了其根本原因,為系統優化提供了精確指導。通過這套方案,大盤diff率得到了有效治理,系統中微小差異得到了顯現,同時揭示出了常規分析中難以發現的、對結果波動有微妙影響的因素。此外,該自動化機制提供持續監控和即時反饋,確保異常特徵能被及時發現並處理。

04 總結

本文闡述了百度搜索系統針對diff率問題的創新解決方案,通過設計數據打平技術,將問題量化至服務與特徵層面,實現精確貢獻度的衡量。構建打平server支持數據訂閲與發佈,實現低代碼實驗配置,並利用fake流量與動態debug機制,在不影響用户體驗的情況下進行大量實驗與數據收集。採用多實驗統籌與自動巡檢機制,提高實驗效率與分析自動化。最終,捕獲所有對diff率有實質貢獻的特徵,分析根本原因,指導系統優化,顯著降低結果的波動,節省人力與時間成本。

值得注意的是,結果波動是分佈式系統中普遍存在的問題。本文以百度搜索系統為例,不僅展示了我們在提升用户搜索體驗方面的不懈努力與創新成果,更期望能為廣大分佈式系統領域的從業者提供有益的啓示與實用的減負效果,共同推動技術的進步與發展。

————END————

推薦閲讀

PaddleX圖像分割賦能醫療領域篩查檢測,打造智能醫療診斷系統

百度智能雲x️石家莊交管局,大模型打造全時在線數字交警

百度Android IM SDK組件能力建設及應用

百度智能雲向量數據庫創新和應用實踐分享

百度MEG數據開發治理平台-TDS

user avatar zq812193195 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.