Categories
程式開發

億級搜索系統的基石,如何保障實時數據質量?


一、背景

優酷視頻搜索是文娛分發場的最核心入口之一,數據源多、業務邏輯複雜,尤其是實時系統的質量保障是一個巨大挑戰。如何保障數據質量,如何衡量數據變化對業務的影響?本文會做詳細解答。

二、現狀分析

搜索數據流程如下圖所示,從內容生產到生成索引經歷了複雜的數據處理流程,中間表多達千餘張,實時數據消費即消失,難以追踪和復現。

億級搜索系統的基石,如何保障實時數據質量? 1

從上圖可以看出,整個系統以實時流模式為數據流通主體,業務層面按實體類型打平,入口統一分層解耦,極大的增加了業務的實時性和穩定性。但是另一方面,這種龐大的流式計算和數據業務系統給質量保障帶來了巨大的挑戰,從0到1建設實時數據的質量保障體系,同時保證數據對搜索引擎業務的平滑過渡是我們面臨的考驗。

三、實時數據質量保障體系方案

質量保障需要透過現像看本質。通過對架構和業務的分析,可以發現整個流式計算的業務系統有幾個關鍵點:流式計算、數據服務、全鏈路、數據業務(包括搜索引擎的索引和摘要)。整體的質量訴求可以歸類為:

  1. 基礎數據內容質量的保障
  2. 流式鏈路的數據正確性和及時性保障
  3. 數據變化對業務效果的非負向的保障

結合線上、線下、全鏈路閉環的理論體系去設計我們的整體質量保障方案,如下圖所示:

億級搜索系統的基石,如何保障實時數據質量? 2

四、線下質量

1. 實時dump

數據測試包含鏈路節點比對、時效性、正確性、一致性、可用性等方面,依託於阿里技術資源設計實時dump的方案如圖:

億級搜索系統的基石,如何保障實時數據質量? 3

2.數據一致性

一致性主要是指每個鏈路節點消費的一致性,重點在於整體鏈路的各個節點的數據處理消費情況保持一致,通過對數據消費的分時分頻率的比對完成一致性驗證。方案如下圖:

億級搜索系統的基石,如何保障實時數據質量? 4

我們採取不同的數據流頻率輸送給實時鏈路進行消費,利用各層的dump機制進行數據dump,然後取不同的抽樣間隔對dump數據計算分析,分為三種不同的數據頻率模式:

  • natural-flow:自然消費的數據流,是源於線上真實的數據消息通道,即自然頻率的數據消費,以該模式進行測試更貼合實際業務情景
  • high-frequency:高頻數據流,採用超出真實峰值或者其他設定值的數據頻次輸送給實時消費鏈路,在壓測或者檢測鏈路穩定性中是一個常用的測試策略;
  • low-frequency:低頻數據流,採用明顯低於真實值或者特定的低頻次數據輸送給實時消費鏈路。如果數據鏈路中有基於數據量的批量處理策略會暴露的比較明顯,比如批量處理的閾值是100,那麼在業務低峰時很有可能達不到策略閾值,這批數據就會遲遲不更新,這個批量處理策略可能不是合理。同時低頻次的消費對於實時鏈路處理的一些資源、鏈接的最低可用度這些層面的檢查也是有意義的。

3.數據正確性

億級搜索系統的基石,如何保障實時數據質量? 5

數據正確性是對於數據內容的具體值的檢查,總體原則是:

  • 首先,高優保障影響用戶體驗的數據;
  • 其次,保障業務層直接使用的核心業務相關的數據內容;
  • 再次,中間層的核心業務相關數據由於不對外露出,會轉換成業務引擎需要的最終層的業務數據。所以中間層我們採用通用的規則和業務規則來做基礎數據質量保障,同時對上下游數據內容變化進行diff對比,保障整個流程處理的準確性。

4.數據可用性

數據可用性指的是數據鏈路生產的最終數據是能夠安全合理使用的,包括存儲、查詢的讀寫效率、數據安全讀寫、對不同的使用方提供的數據使用保持一致性等。

億級搜索系統的基石,如何保障實時數據質量? 6

可用性保障主要關注數據的存儲、查詢、數據協議(數據結構)三個大的維度,衡量的標準重點關註三個方面:

  • 易讀寫:數據的結構化存儲和寫入必須是高效合理的;
  • 服務一致:數據在結構化存儲後,對外提供的服務有很多種,比如PB協議、API、SDK等,需要根據業務去考量。比如SDK、PB等對外提供使用的方式會涉及協議版本,不同的版本可能數據結構不一致導致對外使用的數據不一致性;
  • 安全可靠:重點關注存儲穩定、可靠、高效,兼顧效率和穩定性,同時更要關注安全性,防範隨意改寫數據、惡意dump等嚴重影響線上數據使用安全的風險。

5.時效性

由於實時鏈路的流式特性和多實體多次更新的特性,在測試時效性時核心問題有兩點:

  • 如何去跟踪確定一條唯一的消息在整個鏈路的消費情況;
  • 如何低成本獲取每個節點過程的數據鏈路時間。

我們抽像出一個trace+wraper的流式trace模型如下圖:

億級搜索系統的基石,如何保障實時數據質量? 7

獲取鏈路過程的每個節點的時間,包括傳輸時間和處理時間。對於track-wraper需要約定統一的track規範和格式,並且保證這部分的信息對業務數據沒有影響,沒有增加大的性能開銷。如下圖,我們最終的信息中經過trace&track-wraper帶出來的trak-info,採用json格式方便track-info的擴展性。

億級搜索系統的基石,如何保障實時數據質量? 8

這樣就很容易去獲取到任意信息,計算每個節點的時間。

億級搜索系統的基石,如何保障實時數據質量? 9

我們也可以通過抽樣計算一些統計指標衡量時效:

億級搜索系統的基石,如何保障實時數據質量? 10

對於時效性有明顯異常的數據可以篩選出來,進行持續優化。

6.性能測試

實時數據鏈路本質是一套全鏈路數據計算服務,所以我們也需要測試它的性能情況。

第一步,我們先具體化全鏈路的待測系統服務。

億級搜索系統的基石,如何保障實時數據質量? 11

包括兩部分的性能,Bigku的反查服務,即HSF服務,再就是blink的計算鏈路節點。

第二步,準備數據和工具。

壓測需要的業務數據就是消息。數據準備有兩種方式,一種是盡可能模擬真實的消息數據,我們只要獲取消息內容進行程序自動模擬即可;另外一種會採用更真實的業務數據dump引流,進行流量回放。

由於數據鏈路的特性,對壓測鏈路施壓就是轉成發送消息數據,那麼如何控制數據發送呢?有兩種方式:

  • 第一種我們開發一個發送消息的服務接口,轉變成常規的接口服務壓測,然後可以採用阿里的任何壓測工具,整個測試就變成常規的性能測試;
  • 第二種我們可以利用blink消息回追的機制,重複消費歷史消息進行壓測,不過這種方法有弊端,無法控制消息的頻率。

7.壓測和指標收集

根據業務情況來收集指標,指標包括服務本身的指標和資源指標,可以參考我們的部分性能測試報告示例(數據有截斷):

億級搜索系統的基石,如何保障實時數據質量? 12

億級搜索系統的基石,如何保障實時數據質量? 13

五、線上質量

1.服務穩定性保障

穩定性包括兩個層面,一是實時計算任務鏈路的每個節點的穩定性,二是內置服務的穩定性。

2.實時計算

由於實時計算採用全blink的計算方式,我們可以利用blink系統本身的特性來做任務的監控。每個節點的任務都需要配置穩定性指標的監控,包括rps、delay、failover等。效果示例如下:

億級搜索系統的基石,如何保障實時數據質量? 14

3.實體服務

實體服務是HSF服務,採用阿里統一的監控平台來完成整體服務能力的監控,示例如圖:

億級搜索系統的基石,如何保障實時數據質量? 15

整體指標包含以下內容:

億級搜索系統的基石,如何保障實時數據質量? 16

4.數據消費保障

在數據消費層面,重點關注每個鏈路層級的消費能力和異常情況。基於積累的track-report能力進行數據統計,結合平台完備的基礎能力來完成消費保障。分為兩層:

核心層:消息出口的實體消息統計監控,包括整體數量和消息內容分類統計監控。如圖示例:

億級搜索系統的基石,如何保障實時數據質量? 17

億級搜索系統的基石,如何保障實時數據質量? 18

中間層:包括每個實體消息處理的accept,處理邏輯層的success、fail、skip指標,便於我們實時知曉每個鏈路層收到的消息、成功處理、錯誤和合理異常等消費能力情況。如圖示例:

億級搜索系統的基石,如何保障實時數據質量? 19

5.數據內容保障

數據內容層,建設綜合數據更新、數據內容檢查、業務效果三位一體的精準數據檢查,達到數據生產、消費、可用性的閉環檢測,如圖所示:

億級搜索系統的基石,如何保障實時數據質量? 20

從圖中可以看出,我們數據內容保障分為三部分:

  1. sampler:抽樣器,通過blink實時消費消息在鏈路中抽取待測數據,通常是只抽取數據ID;抽樣策略分間隔和隨機兩種。間隔策略就是取固定時間間隔的特定數據進行檢查;隨機則根據一定的隨機算法策略來抽樣數據進行檢查。
  2. data-monitor:是做數據內容檢查,包括更新時效性和數據特徵屬性檢查。
  3. effect-monitor:數據正常更新之後,對在線業務實時產生的效果影響進行檢查,檢查的核心點包括搜索的兩大基本效果——召回和排序,以及用戶體驗相關的數據屬性的檢查。

部分數據實時效果示例圖:

億級搜索系統的基石,如何保障實時數據質量? 21

6.實時干預與自動修復

實時干預通道,如下圖:

億級搜索系統的基石,如何保障實時數據質量? 22

實時干預系統會根據不同的干預需求,對消息內容和乾預機制進行消息組裝和通道分發。

  1. 當主通道業務鏈路正常時,若需要強制更新一個ID維度的數據,只需要輸入ID走正常主鏈路更新即可。
  2. 當需要強制干預某些具體的數據內容到指定的消息通道時,則可進行數據內容級別的更詳細的精準干預。
  3. 緊急強制干預,是指當主鏈路中間層處理有較大延遲或者完全阻塞時,會造成下游業務層數據無法正常獲取輸入。通過主邏輯全copy的機制建立了一個VIP的消息通道,通過VIP通道去直接干預出口消息,保證業務數據正常能進行優先更新。

六、質量效能

效能層面主要指:研發能快速自測上線,線上問題能高效排查定位這兩個維度,以期達到保證快速迭代、節省人力投入的目標。所以我們提供了實時debug和實時全鏈路trace透視兩大提效體系。

1.實時debug

實時debug是基於實時消息通道能力和debug機制建立的一套服務,在研發自測、問題復現等場景有很大用途,可以通過debug模式詳細了解鏈路的業務層處理細節,業務層只需要按數據需求自主定制debug內容,無需其他接入成本,具備很強的通用性和擴展性。

億級搜索系統的基石,如何保障實時數據質量? 23

平台效果圖:

億級搜索系統的基石,如何保障實時數據質量? 24

填入節目ID,發送消息就會自動進入實時debug模式。

同時還配備了指定消息內容的專家模式,方便研發進行單獨的消息內容制定化測試和乾預。

億級搜索系統的基石,如何保障實時數據質量? 25

2.全鏈路trace

我們提煉了一個全鏈路實時trace的通用模型,同時做更精細定制化的trace機制。結合實時業務鏈路邏輯視圖,來看下trace的系統實現:

億級搜索系統的基石,如何保障實時數據質量? 26

鏈路層視角,目前整體分為4個業務塊,數據流按順序進行展示:

億級搜索系統的基石,如何保障實時數據質量? 27

1)bigku_service 展示了當時消息的鏡像數據。

億級搜索系統的基石,如何保障實時數據質量? 28

2)mid_show_f 為算法層面的基礎特徵,即一級特徵,包含了業務信息和系統信息(工程關注的指標數據,主要用來指導優化)。

億級搜索系統的基石,如何保障實時數據質量? 29

3)sum_video_f 和 ogc屬於搜索鏈路上的數據,一般在節目裡面會有一些較為複雜的截斷邏輯,通過字典表的形式提供數據層的透視視角,可以看到鏈路的全部信息。

七、產品體驗實時自動化保障

我們在實時數據內容質量方面做了融合效果監控的質量方案,建立了實時發現問題、實時定位、實時修復的閉環鏈路效果保障體系,起到了很好的效果。體系方案如下圖:

億級搜索系統的基石,如何保障實時數據質量? 30

後記

數據是算法的生命之源,保障好數據質量,提高優質內容的分發效率,既能留住用戶,也能讓用戶在疫情這段特殊的日子裡看到高質量的視頻內容。數據質量道阻且長,未來會深入每個節點和邏輯,探索海量數據和用戶體感的關係,能對算法業務發展有幫助作用,也能為廣大用戶感受到文娛帶來的精神滋養。

本文轉載自公眾號阿里技術(ID:ali_tech)。

原文鏈接

https://mp.weixin.qq.com/s/74ZzOHbef2XCRe_2bSHRgw