作者:勇皓 根根 王欣等
1 前言
美團(tuán)到店綜合業(yè)務(wù)(以下簡(jiǎn)稱(chēng)到綜)是美團(tuán)到店業(yè)務(wù)的重要板塊之一,涵蓋洗浴、KTV、美業(yè)、醫(yī)美、親子、結(jié)婚、運(yùn)動(dòng)健身、玩樂(lè)、教育培訓(xùn)、家居、寵物、酒吧、生活服務(wù)等數(shù)十個(gè)重點(diǎn)細(xì)分行業(yè),滿足數(shù)以億計(jì)用戶多樣化的本地生活需求。
推薦系統(tǒng)在其中是實(shí)現(xiàn)供給和需求高效匹配的重要環(huán)節(jié),是傳遞數(shù)據(jù)價(jià)值的出口,而推薦系統(tǒng)的質(zhì)量決定了匹配效果的折損。如下圖 1 所示,數(shù)據(jù)經(jīng)過(guò)數(shù)倉(cāng)處理、算法加工,再通過(guò)數(shù)據(jù)服務(wù)到各個(gè)業(yè)務(wù)系統(tǒng),最后通過(guò)客戶端埋點(diǎn)又重新流轉(zhuǎn)回?cái)?shù)倉(cāng),形成了數(shù)據(jù)的“飛輪效應(yīng)”,而質(zhì)量恰恰是這條鏈路中齒輪嚙合的關(guān)鍵點(diǎn),是提升效率和保障效果的重要前提。
質(zhì)量保障要圍繞著度量開(kāi)展,才能“看得見(jiàn)”、“理得清”、“改得準(zhǔn)”。但是傳統(tǒng)的后臺(tái)服務(wù)質(zhì)量指標(biāo)并不能很好地描述當(dāng)前“數(shù)據(jù)飛輪”的質(zhì)量。我們希望通過(guò)綜合業(yè)務(wù)推薦系統(tǒng)的質(zhì)量模型建設(shè),為類(lèi)似多業(yè)務(wù)線、效果導(dǎo)向的系統(tǒng)質(zhì)量度量提供一種新的思考角度和實(shí)踐參考。
圖1 推薦系統(tǒng)的“數(shù)據(jù)飛輪”
2 現(xiàn)狀分析
推薦系統(tǒng)是效果類(lèi)系統(tǒng),質(zhì)量特點(diǎn)與功能類(lèi)系統(tǒng)有所不同。功能類(lèi)系統(tǒng)一般降級(jí)后會(huì)較為顯性地影響用戶體驗(yàn),但推薦結(jié)果返回 A 或者 A',用戶很難有明顯感知。但實(shí)際上,如果匹配效果變差,就會(huì)直接影響到用戶的隱性體驗(yàn),需要被識(shí)別。功能類(lèi)系統(tǒng)一般以可用性為核心來(lái)構(gòu)建質(zhì)量指標(biāo)體系,在綜合業(yè)務(wù)推薦系統(tǒng)的業(yè)務(wù)實(shí)踐中,我們發(fā)現(xiàn)可用性等指標(biāo)存在以下的局限性:
- 可用性對(duì)部分缺陷不敏感:可用性是中斷頻率和持續(xù)時(shí)間的函數(shù),體現(xiàn)的是系統(tǒng)持續(xù)提供服務(wù)的能力。只要系統(tǒng)的缺陷不影響對(duì)外提供服務(wù),就不影響可用性,但有些實(shí)際上影響了用戶體驗(yàn)。這里的缺陷可能是意料中的(如主動(dòng)降級(jí)),也可能是意料外的(模型更新延遲),都應(yīng)該被納入質(zhì)量的度量中。
- 可用性難以覆蓋數(shù)據(jù)的全鏈路:推薦系統(tǒng)的鏈路涵蓋了數(shù)據(jù)生產(chǎn)、加工、應(yīng)用、分析等環(huán)節(jié)。一是可用性并不涉及數(shù)據(jù)表的質(zhì)量,二是在可用性能度量的地方無(wú)法反應(yīng)數(shù)據(jù)質(zhì)量的全貌。數(shù)據(jù)質(zhì)量需要考慮完整性、準(zhǔn)確性、時(shí)效性、安全性等特征,超出了可用性的范疇。國(guó)際知名學(xué)者吳恩達(dá)曾說(shuō)過(guò),人工智能的價(jià)值 80% 取決于數(shù)據(jù),推薦系統(tǒng)交付推薦效果(點(diǎn)擊轉(zhuǎn)化率、交易轉(zhuǎn)化率、用戶停留時(shí)長(zhǎng)等)的質(zhì)量,也主要取決于數(shù)據(jù)的質(zhì)量。
- 可用性難以反映業(yè)務(wù)差異性:美團(tuán)到綜覆蓋上百個(gè)行業(yè)、幾十個(gè)頻道頁(yè),推薦系統(tǒng)出于效率和成本考慮,業(yè)務(wù)間無(wú)法完全進(jìn)行隔離,可用性的串并聯(lián)計(jì)算方式難以區(qū)分業(yè)務(wù)進(jìn)行單獨(dú)評(píng)價(jià)。到綜不同業(yè)務(wù)差異很大,訪問(wèn)頻次、流量高峰期、業(yè)務(wù)策略各不相同,從而質(zhì)量的特點(diǎn)和問(wèn)題分布也不同。目前可用性的指標(biāo)缺乏業(yè)務(wù)維度信息,不利于指導(dǎo)精細(xì)化的質(zhì)量運(yùn)營(yíng)。
在質(zhì)量建設(shè)中,過(guò)去以故障等級(jí)作為目標(biāo),驗(yàn)證周期長(zhǎng),具備偶然性,且目標(biāo)和動(dòng)作邏輯推導(dǎo)關(guān)系不強(qiáng)。另外,故障本身偏事后,這種問(wèn)題驅(qū)動(dòng)的思路不利于持續(xù)運(yùn)營(yíng)??偟膩?lái)說(shuō),以可用性為目標(biāo),在實(shí)際落地計(jì)算時(shí)存在種種問(wèn)題,所以我們考慮進(jìn)行推薦系統(tǒng)的質(zhì)量模型建設(shè),以可用性為基礎(chǔ),然后調(diào)整計(jì)算方式,進(jìn)而指導(dǎo)精細(xì)化的質(zhì)量運(yùn)營(yíng)。
3 建設(shè)思路
3.1 業(yè)務(wù)語(yǔ)境下的質(zhì)量
建設(shè)質(zhì)量模型,先回到對(duì)質(zhì)量本質(zhì)的理解。根據(jù)國(guó)際標(biāo)準(zhǔn)化組織(ISO)的定義,質(zhì)量是反映實(shí)體滿足明確或隱含“需要”能力的特征總和。另一個(gè)常用的質(zhì)量概念是穩(wěn)定性,穩(wěn)定性的核心是讓系統(tǒng)長(zhǎng)時(shí)間地運(yùn)行在“預(yù)期”狀態(tài)。無(wú)論是質(zhì)量還是穩(wěn)定性,都要搞清楚系統(tǒng)需要滿足誰(shuí)的需要和預(yù)期。在推薦的場(chǎng)景下,這個(gè)對(duì)象是產(chǎn)品和算法。業(yè)務(wù)產(chǎn)品通過(guò)理解用戶場(chǎng)景,抽象用戶需求,向推薦團(tuán)隊(duì)提出產(chǎn)品需求,體現(xiàn)為對(duì)外的產(chǎn)品迭代;同時(shí)推薦系統(tǒng)團(tuán)隊(duì)內(nèi)部相互協(xié)作,學(xué)習(xí)最佳優(yōu)化模型策略,體現(xiàn)為數(shù)據(jù)團(tuán)隊(duì)內(nèi)部的算法迭代。
如下圖 2 所示,在可用性的計(jì)算公式中,強(qiáng)調(diào)了長(zhǎng)時(shí)間,而“需要” 和“預(yù)期” 只體現(xiàn)在對(duì)外提供服務(wù)上。這里具有一定的合理性,一是可用性作為業(yè)界通用的指標(biāo),定義必然是泛化的,那么質(zhì)量的共性和底線就是對(duì)外提供服務(wù);二是大多數(shù)后臺(tái)系統(tǒng)交付功能,對(duì)外提供服務(wù)大多在“有”和“無(wú)”之間,也有一定的空間給到服務(wù)降級(jí)。但是對(duì)于以效果為核心目標(biāo)的推薦系統(tǒng),在功能“有”和“無(wú)”之間,存有很長(zhǎng)的效果“好”和“壞”的光譜。我們對(duì)推薦系統(tǒng)質(zhì)量的思考迭代,核心改變就是從對(duì)外提供服務(wù)的“有”“無(wú)”,變更到對(duì)外提供服務(wù)的“好”“壞”,這也是改造可用性計(jì)算方式的出發(fā)點(diǎn)。
圖2 對(duì)缺陷的認(rèn)知影響質(zhì)量度量
3.2 缺陷的考量和選擇
不滿足“需要”或者“預(yù)期”則會(huì)產(chǎn)生缺陷,缺陷是質(zhì)量折損的原因。ISO/IEC 25010 Software Quality Model (2011) 軟件質(zhì)量模型定義了軟件缺陷,可以看作是缺陷的全集,它包含了功能適用性、性能效率、兼容性、可用性、可靠性、安全性、可維護(hù)性、可移植性 8 個(gè)特征及 31 個(gè)子特征。這里面有一些質(zhì)量特征后臺(tái)服務(wù)不涉及(用戶界面美學(xué)、易學(xué)性等),有一些在當(dāng)下認(rèn)知中不構(gòu)成 C 端質(zhì)量的突出要素(模塊性、共存性、不可抵賴性、可重復(fù)使用性等)。結(jié)合推薦系統(tǒng)的業(yè)務(wù)特色和高頻質(zhì)量問(wèn)題,現(xiàn)階段我們重點(diǎn)考慮如下圖 3 所示的質(zhì)量特征作為缺陷來(lái)源。
圖3 推薦系統(tǒng)的質(zhì)量特征
我們發(fā)現(xiàn)傳統(tǒng)可用性的度量,大多集中在可靠性、功能完整性、正確性方面,但是對(duì)于大部分的功能準(zhǔn)確性、適當(dāng)性以及安全性都缺乏度量,這些都與推薦的質(zhì)量和效果緊密相關(guān)。準(zhǔn)確性、適當(dāng)性對(duì)效果的影響比較直觀,其他則較間接。比如安全性,以安全性中的爬蟲(chóng)訪問(wèn)為例,爬蟲(chóng)由于訪問(wèn)行為不符合真實(shí)人類(lèi)的行為習(xí)慣,會(huì)影響 UVCTR 等核心指標(biāo)的回收,從而造成效果誤判;同時(shí)如果不能識(shí)別和剔除爬蟲(chóng)數(shù)據(jù),噪聲會(huì)進(jìn)一步影響模型訓(xùn)練的準(zhǔn)確性。數(shù)據(jù)質(zhì)量問(wèn)題是數(shù)據(jù)“飛輪效應(yīng)”中的“毒丸”,會(huì)產(chǎn)生正反饋不斷放大缺陷。我們將在第四章計(jì)算規(guī)則中,量化上述的缺陷,拓展可用性的外延。
3.3 度量和計(jì)算的選型
可用性可以分為度量方式和計(jì)算方式:度量即我們常說(shuō)的 N 個(gè) 9,計(jì)算則用平均故障間隔時(shí)間和平均恢復(fù)時(shí)間的函數(shù)來(lái)衡量。在度量方式上,業(yè)界常用的質(zhì)量度量方式如下圖 4 所示:
圖4 度量方式
度量方式選幾分制,不是現(xiàn)階段質(zhì)量分的重點(diǎn),可用性本身采用的 N 個(gè) 9 也足夠簡(jiǎn)單可比較,我們重點(diǎn)考慮計(jì)算方式。由于到綜業(yè)務(wù)線眾多,推薦系統(tǒng)作為平臺(tái)型產(chǎn)品,系統(tǒng)與業(yè)務(wù)是 N:N 的關(guān)系,當(dāng)下系統(tǒng)的可用性難以去計(jì)算每個(gè)行業(yè)、項(xiàng)目和業(yè)務(wù)的可用性。一個(gè)流量位置,它可以歸屬于休閑玩樂(lè)這個(gè)業(yè)務(wù),可以歸屬于劇本殺這個(gè)項(xiàng)目,可以歸屬于核心展示主路徑的一環(huán),也可以歸屬于內(nèi)容推薦的一種,這種靈活的歸屬性,用請(qǐng)求來(lái)聚合計(jì)算是最合適的。如下圖 5 所示,如果可用性是請(qǐng)求的函數(shù),它既可以包括上一節(jié)中我們關(guān)心的質(zhì)量特征,也可以在多個(gè)維度統(tǒng)計(jì)有業(yè)務(wù)意義的質(zhì)量情況。
圖5 從請(qǐng)求的角度度量質(zhì)量
4 計(jì)算方式
根據(jù)上一章節(jié)的建設(shè)思路,從故障到缺陷,從推薦結(jié)果的“有”、“無(wú)”到推薦效果的“好”、“壞”,從整體到各個(gè)業(yè)務(wù),我們描述了一個(gè)好的質(zhì)量分應(yīng)該有的特征。這一章節(jié)我們著重在指標(biāo)的計(jì)算邏輯上,選取關(guān)鍵缺陷,定義“成功的請(qǐng)求響應(yīng)”,并增加質(zhì)量分的業(yè)務(wù)聚合維度。
4.1 計(jì)算公式
結(jié)合 3.2 章節(jié)中描述的質(zhì)量特征,從成功請(qǐng)求占比的角度評(píng)估系統(tǒng)質(zhì)量,在實(shí)際落地計(jì)算時(shí)可以分成以下四個(gè)層面的缺陷:
- 系統(tǒng)層面:該請(qǐng)求觸發(fā)了系統(tǒng)異常,則為缺陷響應(yīng)。常見(jiàn)的如召回超時(shí)、召回失敗、召回空結(jié)果等。
- 數(shù)據(jù)層面:該請(qǐng)求用到的數(shù)據(jù)出現(xiàn)異常,則為缺陷響應(yīng)。常見(jiàn)的如供給數(shù)量異常、標(biāo)簽分布異常等,數(shù)據(jù)對(duì)用戶請(qǐng)求的實(shí)際影響,依賴數(shù)據(jù)血緣關(guān)系的建立和影響面評(píng)估。
- 算法層面:該請(qǐng)求在召回和排序過(guò)程中,使用的特征、模型、策略異常,則為缺陷響應(yīng)。常見(jiàn)的如模型更新延遲、特征缺失等,影響推薦的效果表達(dá)。
- 業(yè)務(wù)層面:該請(qǐng)求觸發(fā)了業(yè)務(wù)適當(dāng)性或安全合規(guī)要求,則結(jié)果中包含以上結(jié)果的請(qǐng)求均為缺陷響應(yīng)。常見(jiàn)的如運(yùn)營(yíng)反饋有供給質(zhì)量、內(nèi)容安全等嚴(yán)重的 Bad Case。
一條請(qǐng)求,在生命周期的任意環(huán)節(jié)經(jīng)歷了缺陷,則在結(jié)果上定義為缺陷響應(yīng),具體的缺陷環(huán)節(jié)是分析下鉆的維度。我們從 3.2 章節(jié)的質(zhì)量特征和上述缺陷的四個(gè)層面選取典型問(wèn)題(業(yè)務(wù)痛點(diǎn)、高頻質(zhì)量問(wèn)題)進(jìn)行計(jì)算,以下圖 6 為例:
圖6 質(zhì)量分計(jì)算方法
4.2 業(yè)務(wù)泛化
到綜推薦系統(tǒng)的業(yè)務(wù)特色是多業(yè)務(wù)線,行業(yè)差異大,推薦物料位置多,這折射到質(zhì)量度量上,我們需要各個(gè)層次的聚合分析,進(jìn)而指導(dǎo)精細(xì)化的運(yùn)營(yíng),如下圖 7 所示:
圖7 各業(yè)務(wù)層次的聚合分析
到綜有很多中低頻業(yè)務(wù),此時(shí)比值的波動(dòng)受請(qǐng)求絕對(duì)值影響較大。針對(duì)這些場(chǎng)景,可以聚合部分小流量位,只在行業(yè)或者項(xiàng)目層面進(jìn)行分鐘級(jí)的監(jiān)控。
4.3 指標(biāo)體系
如下圖 8 所示,我們將推薦系統(tǒng)響應(yīng)的一條請(qǐng)求作為一次產(chǎn)品交付行為看待,這些請(qǐng)求中無(wú)缺陷的比例,就是推薦系統(tǒng)的質(zhì)量分,是頂層的質(zhì)量輸出指標(biāo)??梢愿鶕?jù)請(qǐng)求的生命周期,建立一級(jí)輸入指標(biāo),衡量核心流程的質(zhì)量現(xiàn)狀,如召回缺陷率、排序缺陷率等。還可以再將一級(jí)指標(biāo)進(jìn)一步拆解,得到二級(jí)輸入指標(biāo),比如召回缺陷率比較高時(shí),可以再去衡量召回空值率、召回超時(shí)率等。用戶的請(qǐng)求還可以根據(jù)業(yè)務(wù)進(jìn)行垂直、橫向、時(shí)間維度聚合,得到有業(yè)務(wù)屬性的質(zhì)量分,這樣會(huì)更有針對(duì)性,更加聚焦。
圖8 質(zhì)量指標(biāo)體系
這套改進(jìn)后的質(zhì)量分,以請(qǐng)求為基本單位,相較于最初的可用性計(jì)算方式,在一定范圍內(nèi)解決了它的局限性:對(duì)缺陷敏感,可以包括數(shù)據(jù)鏈路帶來(lái)的影響,方便進(jìn)行多業(yè)務(wù)維度的聚合分析。
4.4 血緣拓展
質(zhì)量分以請(qǐng)求的粒度統(tǒng)計(jì),在數(shù)據(jù)應(yīng)用服務(wù)中,請(qǐng)求只是數(shù)據(jù)對(duì)外輸出的形式之一。在完成基礎(chǔ)的質(zhì)量分后,請(qǐng)求的生命周期應(yīng)該延展到數(shù)據(jù)全鏈路,這樣對(duì)質(zhì)量的度量才完整。這時(shí)就依賴數(shù)據(jù)的血緣關(guān)系,將數(shù)據(jù)表 - 業(yè)務(wù)系統(tǒng) - C 端流量關(guān)聯(lián)起來(lái),構(gòu)建全景的質(zhì)量畫(huà)像,如下圖 9 所示:
圖9 推薦系統(tǒng)的數(shù)據(jù)血緣
血緣關(guān)系是人類(lèi)社會(huì)由婚姻和生育產(chǎn)生的人際關(guān)系,如父母和子女的關(guān)系、兄弟和姐妹的關(guān)系,以及由此派生出的其他親屬關(guān)系,數(shù)據(jù)也可以通過(guò)融合、轉(zhuǎn)換產(chǎn)生數(shù)據(jù)的血緣關(guān)系。數(shù)據(jù)的血緣關(guān)系分?jǐn)?shù)據(jù)庫(kù)、數(shù)據(jù)表、字段不同級(jí)別,一般用于數(shù)據(jù)資產(chǎn)(引用熱度計(jì)算、理解數(shù)據(jù)上下文)、數(shù)據(jù)開(kāi)發(fā)(影響分析、歸因分析)、數(shù)據(jù)治理(鏈路狀態(tài)追蹤、數(shù)倉(cāng)治理)、數(shù)據(jù)安全(安全合規(guī)檢查、標(biāo)簽傳播)四個(gè)方面。在目前推薦系統(tǒng)質(zhì)量分的思路下,主要用影響分析去拓展質(zhì)量分,將所有途徑故障節(jié)點(diǎn)的請(qǐng)求都打上標(biāo)記,扣除相應(yīng)分?jǐn)?shù)。
在推薦系統(tǒng)的業(yè)務(wù)語(yǔ)義下,我們定義了六種業(yè)務(wù)元數(shù)據(jù):快照、方案、組件、索引、模型、特征,基于元數(shù)據(jù)我們構(gòu)建血緣,可以分為任務(wù)接入、血緣解析、數(shù)據(jù)導(dǎo)出。任務(wù)接入分為采集模塊和入庫(kù)模塊,當(dāng)任務(wù)接入完成后,將通過(guò)圖數(shù)據(jù)庫(kù)存儲(chǔ)節(jié)點(diǎn)及節(jié)點(diǎn)的關(guān)系,利用圖算法建立血緣。建立血緣之后,節(jié)點(diǎn)本身的異常支持系統(tǒng)發(fā)現(xiàn)和人工標(biāo)記,影響分析則可以自動(dòng)完成。當(dāng)節(jié)點(diǎn)出現(xiàn)異常則進(jìn)行消息通知,異常信息會(huì)沿著血緣傳播,繼而影響下游環(huán)節(jié)的質(zhì)量分計(jì)算。
當(dāng)異常波及到用戶端,我們嘗試用業(yè)務(wù)語(yǔ)言重新描述損失。根據(jù)到綜收入模型,可以計(jì)算出各個(gè)業(yè)務(wù)線每個(gè)意向 UV 的價(jià)值(用戶訪問(wèn)商戶詳情頁(yè)、團(tuán)單詳情頁(yè)稱(chēng)之為意向訪問(wèn)),再利用該流量位周同比的訪問(wèn)情況,自動(dòng)推導(dǎo)業(yè)務(wù)損失。
5 指標(biāo)運(yùn)營(yíng)
5.1 系統(tǒng)實(shí)現(xiàn)
質(zhì)量分的系統(tǒng)實(shí)現(xiàn)方式依賴于埋點(diǎn)和診斷。推薦全鏈路包含參數(shù)輸入、召回前置處理、召回、召回后置處理、粗排、精排、重排等多個(gè)環(huán)節(jié),每個(gè)環(huán)節(jié)都有可能出故障,因此數(shù)據(jù)采集需要覆蓋運(yùn)行時(shí)異常、各環(huán)節(jié)的關(guān)鍵輸入輸出信息等。如下圖 10 所示,我們通過(guò) Kafka 異步收集埋點(diǎn)數(shù)據(jù),然后分場(chǎng)景進(jìn)行數(shù)據(jù)處理:生產(chǎn)環(huán)境下,近實(shí)時(shí) ES 構(gòu)建索引,提供近 4 天快速查詢服務(wù),4 天前的日志入 Hive 歸檔,另外通過(guò) Flink 引擎解析埋點(diǎn)數(shù)據(jù),經(jīng)過(guò)必要的診斷后,實(shí)時(shí)計(jì)算分?jǐn)?shù)并推送告警信息;測(cè)試環(huán)境下,日志實(shí)時(shí)分揀至 MySQL,方便測(cè)試排查。最后,結(jié)構(gòu)化展示推薦不同階段的質(zhì)量情況,提高了結(jié)果的可讀性。
圖10 質(zhì)量分的系統(tǒng)實(shí)現(xiàn)
分?jǐn)?shù)體系的完善需要逐步推進(jìn),對(duì)于推薦系統(tǒng),沒(méi)有推薦結(jié)果是最嚴(yán)重的質(zhì)量問(wèn)題。我們首先采集和計(jì)算的是推薦空結(jié)果,對(duì)應(yīng)一級(jí)指標(biāo)里的結(jié)果缺陷率、召回缺陷率和二級(jí)指標(biāo)里的結(jié)果空值率、召回空值率等。同時(shí)由于到綜的業(yè)務(wù)特性,行業(yè)眾多、供給時(shí)空分布不均,大量可交叉的篩選條件也會(huì)有空結(jié)果,影響質(zhì)量分的計(jì)算。
如何剔除符合業(yè)務(wù)預(yù)期的空結(jié)果,消除質(zhì)量分噪聲,在實(shí)現(xiàn)埋點(diǎn)的基礎(chǔ)上,診斷就變得非常重要。以空結(jié)果為例,我們主要從參數(shù)診斷、數(shù)據(jù)診斷、鏈路診斷三個(gè)環(huán)節(jié)去識(shí)別。其中數(shù)據(jù)診斷指的是當(dāng)線上篩選條件出現(xiàn)空結(jié)果時(shí),回源二次校驗(yàn)底層數(shù)據(jù),查詢底表數(shù)據(jù)是否為空。如果底表確實(shí)沒(méi)有相關(guān)供給,則沉淀免告警規(guī)則,設(shè)置免告警有效期,在一段時(shí)間內(nèi),當(dāng)前城市當(dāng)前行業(yè)確實(shí)缺少相關(guān)供給,該空結(jié)果不納入質(zhì)量分計(jì)算。
如果底表存在供給,則說(shuō)明是數(shù)據(jù)加工或者服務(wù)過(guò)程中出現(xiàn)了異常,導(dǎo)致無(wú)法召回,則再經(jīng)過(guò)鏈路診斷確定出錯(cuò)環(huán)節(jié),納入相應(yīng)質(zhì)量分計(jì)算。如何建立規(guī)則匹配機(jī)制(即規(guī)則引擎)是診斷引擎的關(guān)鍵。當(dāng)下的規(guī)則引擎選擇非常多,例如 EasyRule、Drools、Zools、Aviator 等。根據(jù)上文分析,診斷引擎需要能夠?qū)φ?qǐng)求參數(shù)、推薦鏈路以及底層數(shù)據(jù)進(jìn)行規(guī)則診斷。對(duì)于請(qǐng)求參數(shù)、推薦鏈路的診斷均可通過(guò)內(nèi)存參數(shù)進(jìn)行診斷,而數(shù)據(jù)診斷則需要從第三方存儲(chǔ)中獲得信息,因此必然有一部分需要定制開(kāi)發(fā)。考慮人員工具使用成熟度以及便利性來(lái)說(shuō),Aviator 表示式引擎較為合適。為契合需要診斷的內(nèi)容,設(shè)計(jì)的表達(dá)式診斷原語(yǔ)如下:
//參數(shù)診斷-原語(yǔ)表達(dá)
//是否符合一定參數(shù)的診斷原語(yǔ)
global:check=aviator[cityId !=nil && include(string.split('1,2,3,4,5,6,7,8,9,10,16,17',','),str(cityId))]
//鏈路診斷-原語(yǔ)表達(dá)
//1、召回異常診斷原語(yǔ)
global:recallException=param[${recall#exception#}],
global:check=aviator[recallException!=nil && recallException !='' ]
//2、召回空無(wú)異常的診斷原語(yǔ)
global:recallEmpty=param[${recall#after#}],
global:check=aviator[recallEmpty!=nil && recallEmpty !='' ]
//3、召回不為空,過(guò)濾規(guī)則執(zhí)行后為空的診斷原語(yǔ)
global:recallEmptyCode=param[${recall#after#}],
global:predictFiltersEmptyCode=param[${predict#after#filters#}],
global:check=aviator[(recallEmptyCode ==nil || recallEmptyCode =='') && predictFiltersEmptyCode !=nil]
//4、執(zhí)行某一具體過(guò)濾規(guī)則后,導(dǎo)致無(wú)結(jié)果的匹配
global:filterEmptyCode=param[${PredictStage#filter#after#_compSkRef#}],
global:check=aviator[filterEmptyCode !=nil && filterEmptyCode =='deleteItemByConditionalFilter' ]
//數(shù)據(jù)診斷-原語(yǔ)表達(dá)(判斷底層是否有數(shù)據(jù),若沒(méi)有則為true,否則為false)
global:keys=keySpread[@prefix 138_ymtags_][@crossOrder city_${cityId}_platform_${platformNo}_surgery_prj_${genericLvlIds}],
global:cnt=cellar@cellar[@count ${keys}],
global:check=aviator[cnt !=nil && cnt !='' && long(cnt) <= 0 ]
5.2 告警跟進(jìn)
質(zhì)量分可以用于實(shí)時(shí)監(jiān)控和運(yùn)營(yíng)復(fù)盤(pán),需要團(tuán)隊(duì)成員及時(shí)跟進(jìn)異動(dòng)。一般公司通用的告警系統(tǒng),都是基于服務(wù)名稱(chēng)粒度配置告警接收人。推薦系統(tǒng)這類(lèi)平臺(tái)型的服務(wù),通過(guò)統(tǒng)一的接口提供服務(wù),但是模型策略卻是由不同的同學(xué)維護(hù),業(yè)務(wù)間存在一定的行業(yè)知識(shí)和理解門(mén)檻。默認(rèn)廣播式的告警,容易引起告警風(fēng)暴,每個(gè)人無(wú)法專(zhuān)注于自己模塊的問(wèn)題,有時(shí)也會(huì)遺漏告警。出于跟進(jìn)率的考量(如下圖 11 所示),我們基于現(xiàn)有告警二次開(kāi)發(fā)了跟進(jìn)功能,將特定流量位的告警路由到專(zhuān)屬負(fù)責(zé)人,并記錄跟進(jìn)狀態(tài)流轉(zhuǎn),便于及時(shí)周知及事后復(fù)盤(pán)。在運(yùn)營(yíng)方面,我們通過(guò)數(shù)據(jù)報(bào)表搭建質(zhì)量分看板,定期回顧不同業(yè)務(wù)的質(zhì)量波動(dòng)情況。
圖11 告警跟進(jìn)流程
5.3 治理效果
質(zhì)量分的落地以結(jié)果空值率為抓手,按流程拆解采集召回空值率、模型預(yù)測(cè)空值率、重排算子空值率,并按業(yè)務(wù)聚合成平臺(tái)、業(yè)務(wù)、形態(tài)、項(xiàng)目、流量位多個(gè)維度。治理動(dòng)作和成果分為以下幾個(gè)方面:
- 通過(guò)埋點(diǎn)和診斷,判斷當(dāng)前的空結(jié)果是供給問(wèn)題還是質(zhì)量問(wèn)題,排除 98% 的空結(jié)果不納入質(zhì)量分計(jì)算,避免誤告警,日均空結(jié)果告警數(shù)從 40 個(gè)降低到 5 個(gè)。
- 基于分析鏈路過(guò)程中各環(huán)節(jié)的空值率,采取治理措施,包括數(shù)據(jù)規(guī)范(數(shù)據(jù)分層標(biāo)準(zhǔn)化、標(biāo)簽打標(biāo)規(guī)范)、服務(wù)架構(gòu)(業(yè)務(wù)隔離、底層數(shù)據(jù)雙介質(zhì)、降級(jí))、變更規(guī)范(配置上線流水線檢查、流量回放),將空結(jié)果系統(tǒng)發(fā)現(xiàn)率保持在 60% 以上。
- 定制化開(kāi)發(fā)告警路由,避免告警廣播,支持標(biāo)記跟進(jìn)狀態(tài),空結(jié)果告警跟進(jìn)率由無(wú)法統(tǒng)計(jì),到核心流量位 100% 跟進(jìn)。
經(jīng)過(guò)空結(jié)果的治理和識(shí)別,目前核心流量位空值率為 0.01%,即保證核心流量位 99.99% 的請(qǐng)求有結(jié)果,在建設(shè)質(zhì)量分的同時(shí),保證系統(tǒng)發(fā)現(xiàn)率和告警跟進(jìn)率。
5.4 資產(chǎn)沉淀
推薦系統(tǒng)傳遞的是數(shù)據(jù)的價(jià)值,只有數(shù)據(jù)被資產(chǎn)化,這種價(jià)值才是可持續(xù)可增值的。建設(shè)推薦系統(tǒng)質(zhì)量模型的過(guò)程,其實(shí)也在做數(shù)據(jù)資產(chǎn)化沉淀。數(shù)據(jù)在采集后變成資產(chǎn),一般要滿足以下四個(gè)條件:可流動(dòng)、可計(jì)量、可管控、可增值,這些在第四章計(jì)算方式中都有所涉及。指標(biāo)運(yùn)營(yíng)的過(guò)程,同時(shí)也是沉淀質(zhì)量知識(shí)資產(chǎn)的過(guò)程。軟件缺陷模型究竟如何影響最終的產(chǎn)品交付質(zhì)量,他們之間是否有相關(guān)性、因果性,這種影響是顯式地參與分?jǐn)?shù)計(jì)算,還是間接影響的。在質(zhì)量分運(yùn)營(yíng)過(guò)程中,我們可以逐漸填補(bǔ)腦海中的質(zhì)量地圖,形成指標(biāo)間、缺陷間、指標(biāo)和缺陷間的拓?fù)潢P(guān)系,這是一個(gè)將質(zhì)量資產(chǎn)化的過(guò)程。比如通過(guò)推薦系統(tǒng)的業(yè)務(wù)實(shí)踐,我們發(fā)現(xiàn) 80% 的線上故障是由于發(fā)布引起的,發(fā)布故障中的 80% 又是由于數(shù)據(jù)發(fā)布引起的,這可以指導(dǎo)我們通過(guò)治理數(shù)據(jù)發(fā)布減少線上故障。
6 未來(lái)規(guī)劃
我們以可用性為基礎(chǔ),調(diào)整計(jì)算方式,建立了多層次的推薦系統(tǒng)質(zhì)量分,并拓展到各種推薦物料、各個(gè)業(yè)務(wù)模塊,核心是我們完成了從對(duì)外提供服務(wù)的“有無(wú)”到對(duì)外提供服務(wù)的“好壞”的認(rèn)知迭代,這也是質(zhì)量精細(xì)化運(yùn)營(yíng)的基礎(chǔ)。后續(xù)的規(guī)劃,一方面是繼續(xù)充實(shí)質(zhì)量模型的計(jì)算和鏈路覆蓋;另一方面,我們會(huì)基于質(zhì)量模型做更多的質(zhì)量治理工作,后續(xù)將重點(diǎn)思考與迭代的一些方向包括:
- 通過(guò)完善埋點(diǎn)和診斷,逐步落地質(zhì)量分體系中的各層指標(biāo),豐富質(zhì)量分的內(nèi)涵,容納更多的質(zhì)量問(wèn)題。
- 通過(guò)建設(shè)多層次的推薦柔性降級(jí),迭代對(duì)于質(zhì)量分的理解,量化不同降級(jí)對(duì)于系統(tǒng)的影響。
- 優(yōu)化數(shù)據(jù)血緣的準(zhǔn)確性、覆蓋率和時(shí)效性,更加正確快速評(píng)估某一個(gè)環(huán)節(jié)質(zhì)量問(wèn)題的影響面。
7 本文作者
勇皓、根根、王欣、賀賀、俐聰?shù)?,均?lái)自美團(tuán)到店平臺(tái)技術(shù)部/到綜業(yè)務(wù)數(shù)據(jù)團(tuán)隊(duì)。