網(wǎng)易嚴(yán)選DMP標(biāo)簽系統(tǒng)建設(shè)實(shí)踐
如果說互聯(lián)網(wǎng)的上半場是粗狂運(yùn)營,因?yàn)橛辛髁考t利不需要考慮細(xì)節(jié)。那么在下半場,精細(xì)化運(yùn)營將是長久的主題,有數(shù)據(jù)分析能力才能讓用戶得到更好的體驗(yàn)。當(dāng)下比較典型的分析方式是構(gòu)建用戶標(biāo)簽系統(tǒng),從而精準(zhǔn)地生成用戶畫像,提升用戶體驗(yàn)。今天分享的主題是網(wǎng)易嚴(yán)選DMP標(biāo)簽系統(tǒng)建設(shè)實(shí)踐,主要圍繞下面五點(diǎn)展開:
- 平臺(tái)總覽
- 標(biāo)簽生產(chǎn) :標(biāo)簽圈選&生產(chǎn)鏈路
- 標(biāo)簽存儲(chǔ):存儲(chǔ)方式&存儲(chǔ)架構(gòu)演進(jìn)
- 高性能查詢
- 未來規(guī)劃
01 平臺(tái)總覽
DMP作為網(wǎng)易嚴(yán)選的數(shù)據(jù)中臺(tái),向下連接數(shù)據(jù),向上賦能業(yè)務(wù),承擔(dān)著非常重要的基石角色。
DMP的數(shù)據(jù)來源主要包括三大部分:
- 自營平臺(tái)的app、小程序、pc端等各端的業(yè)務(wù)日志
- 網(wǎng)易集團(tuán)內(nèi)部共建的一些基礎(chǔ)數(shù)據(jù)
- 京東、淘寶、抖音等第三方渠道店鋪的數(shù)據(jù)
通過收集、清洗,將以上數(shù)據(jù)形成數(shù)據(jù)資產(chǎn)沉淀下來。DMP在數(shù)據(jù)資產(chǎn)基礎(chǔ)上形成了一套自己的標(biāo)簽產(chǎn)出、人群圈選和用戶畫像分析體系,從而為業(yè)務(wù)提供支撐,包括:智能化的選品、精準(zhǔn)觸達(dá)以及用戶洞察等。總的來說,DMP系統(tǒng)就是構(gòu)建以數(shù)據(jù)為核心的標(biāo)簽體系和畫像體系,從而輔助業(yè)務(wù)做一系列精細(xì)化的運(yùn)營。
?
了解DMP系統(tǒng),先從以下幾個(gè)概念開始。
- 標(biāo)簽:對于實(shí)體(用戶、設(shè)備、手機(jī)號等)特征的描述,是一種面向業(yè)務(wù)的數(shù)據(jù)組織形式,比如使用:年齡段、地址、偏好類目等對用戶實(shí)體進(jìn)行刻畫。
- 人群圈選:通過條件組合從全體用戶中圈選出一部分用戶,具體就是指定一組用戶標(biāo)簽和其對應(yīng)的標(biāo)簽值,得到符合條件的用戶人群。
- 畫像分析:對于人群圈選結(jié)果,查看該人群的行為情況、標(biāo)簽分布。例如查看【城市為杭州,且性別為女性】的用戶在嚴(yán)選APP上的行為路徑、消費(fèi)模型等。
嚴(yán)選標(biāo)簽系統(tǒng)對外主要提供兩大核心能力:
(1)標(biāo)簽查詢:查詢特定實(shí)體指定標(biāo)簽的能力,常用于基本信息的展示。
(2)人群圈選:分為實(shí)時(shí)和離線圈選。圈選結(jié)果主要用于:
- 分組判斷:判讀用戶是否在指定的一個(gè)或多個(gè)分組,資源投放、觸點(diǎn)營銷等場景使用較多。
- 結(jié)果集拉取:拉取指定的人群數(shù)據(jù)到業(yè)務(wù)方系統(tǒng)中,進(jìn)行定制化開發(fā)。
- 畫像分析:分析特定人群的行為數(shù)據(jù),消費(fèi)模型等,進(jìn)行更精細(xì)的運(yùn)營。
整體的業(yè)務(wù)流程如下:
?
- 首先定義標(biāo)簽和人群圈選的規(guī)則;
- 定義出描述業(yè)務(wù)的DSL之后,便可以將任務(wù)提交到Spark進(jìn)行計(jì)算;
- 計(jì)算完成之后,將計(jì)算結(jié)果存儲(chǔ)到HIVE和DORIS;
- 之后業(yè)務(wù)方便可以根據(jù)實(shí)際業(yè)務(wù)需求從HIVE或DORIS中查詢使用數(shù)據(jù)。
?
DMP平臺(tái)整體分為計(jì)算存儲(chǔ)層、調(diào)度層、服務(wù)層、和元數(shù)據(jù)管理四大模塊。?
所有的標(biāo)簽元信息存儲(chǔ)在源數(shù)據(jù)表中;調(diào)度層對業(yè)務(wù)的整個(gè)流程進(jìn)行任務(wù)調(diào)度:數(shù)據(jù)處理、聚合轉(zhuǎn)化為基礎(chǔ)標(biāo)簽,基礎(chǔ)標(biāo)簽和源表中的數(shù)據(jù)通過DSL規(guī)則轉(zhuǎn)化為可用于數(shù)據(jù)查詢的SQL語義,由調(diào)度層將任務(wù)調(diào)度到計(jì)算存儲(chǔ)層的Spark進(jìn)行計(jì)算,并將計(jì)算結(jié)果存儲(chǔ)到Hive和Doris中。服務(wù)層由標(biāo)簽服務(wù)、實(shí)體分組服務(wù)、基礎(chǔ)標(biāo)簽數(shù)據(jù)服務(wù)、畫像分析服務(wù)四部分組成。
?
標(biāo)簽的生命周期包含5個(gè)階段:?
(1)標(biāo)簽需求:在此階段,運(yùn)營提出標(biāo)簽的需求和價(jià)值預(yù)期,產(chǎn)品評估需求合理性以及緊迫性。
(2)排期生產(chǎn):此階段需要數(shù)據(jù)開發(fā)梳理數(shù)據(jù),從ods到dwd到dm層整個(gè)鏈路,根據(jù)數(shù)據(jù)建立模型,同時(shí)數(shù)據(jù)開發(fā)需要做好質(zhì)量監(jiān)控。
(3)人群圈選:標(biāo)簽生產(chǎn)出來之后進(jìn)行應(yīng)用,圈選出標(biāo)簽對應(yīng)的人群。
(4)精準(zhǔn)營銷:對3中圈選出來的人群進(jìn)行精準(zhǔn)化營銷。
(5)效果評估:最后產(chǎn)品、數(shù)據(jù)開發(fā)和運(yùn)營對標(biāo)簽使用率、使用效果進(jìn)行效果評估來決定后續(xù)對標(biāo)簽進(jìn)行改進(jìn)或降級。
總的來說,就是以業(yè)務(wù)增長為目標(biāo),圍繞標(biāo)簽的生命周期,投入合理的資源,最大化運(yùn)營效果。
02 標(biāo)簽生產(chǎn)
接下來介紹標(biāo)簽生產(chǎn)的整個(gè)過程。
?
標(biāo)簽的數(shù)據(jù)分層:?
- 最下層是ods層,包括用戶登錄日志、埋點(diǎn)記錄日志、交易數(shù)據(jù)以及各種數(shù)據(jù)庫的binlog數(shù)據(jù)。
- 對ods層處理后的數(shù)據(jù)到達(dá)dwd明細(xì)層,包括用戶登錄表、用戶活動(dòng)表、訂單信息表等。
- dwd層數(shù)據(jù)聚合后到dm層,標(biāo)簽全部基于dm層數(shù)據(jù)實(shí)現(xiàn)。
目前我們從原始數(shù)據(jù)庫到ods層數(shù)據(jù)產(chǎn)出已經(jīng)完全自動(dòng)化,從ods層到dwd層實(shí)現(xiàn)了部分自動(dòng)化,從dwd到dm層有一部分自動(dòng)化操作,但自動(dòng)化程度還不高,這部分的自動(dòng)化操作是我們接下來的工作重點(diǎn)。
?
標(biāo)簽根據(jù)時(shí)效性分為:離線標(biāo)簽、近實(shí)時(shí)標(biāo)簽和實(shí)時(shí)標(biāo)簽。
根據(jù)聚合粒度分為:聚合標(biāo)簽和明細(xì)標(biāo)簽。
通過類別維度可將標(biāo)簽分為:賬號屬性標(biāo)簽、消費(fèi)行為標(biāo)簽、活躍行為標(biāo)簽、用戶偏好標(biāo)簽、資產(chǎn)信息標(biāo)簽等。
?
直接將dm層的數(shù)據(jù)不太方便拿來用,原因在于:
基礎(chǔ)數(shù)據(jù)比較原始,抽象層次有所欠缺、使用相對繁瑣。通過對基礎(chǔ)數(shù)據(jù)進(jìn)行與、或、非的組合,形成業(yè)務(wù)標(biāo)簽供業(yè)務(wù)方使用,可以降低運(yùn)營的理解成本,降低使用難度。
?
標(biāo)簽組合之后需要對標(biāo)簽進(jìn)行具體業(yè)務(wù)場景應(yīng)用,如人群圈選。配置如上圖左側(cè)所示,支持離線人群包和實(shí)時(shí)行為(需要分開配置)。
配置完后,生成上圖右側(cè)所示的DSL規(guī)則,以json格式表達(dá),對前端比較友好,也可以轉(zhuǎn)成存儲(chǔ)引擎的查詢語句。
標(biāo)簽有一部分實(shí)現(xiàn)了自動(dòng)化。在人群圈選部分自動(dòng)化程度比較高。比如分組刷新,每天定時(shí)刷新;高級計(jì)算,如分組與分組間的交/并/差集;數(shù)據(jù)清理,及時(shí)清理過期失效的實(shí)體集。
03 標(biāo)簽存儲(chǔ)
下面介紹一下我們在標(biāo)簽存儲(chǔ)方面的實(shí)踐。
嚴(yán)選DMP標(biāo)簽系統(tǒng)需要承載比較大的C端流量,對實(shí)時(shí)性要求也比較高。
我們對存儲(chǔ)的要求包括:
- 支持高性能查詢,以應(yīng)對大規(guī)模C端流量
- 支持SQL,便于應(yīng)對數(shù)據(jù)分析場景
- 支持?jǐn)?shù)據(jù)更新機(jī)制
- 可存儲(chǔ)大數(shù)據(jù)量
- 支持?jǐn)U展函數(shù),以便處理自定義數(shù)據(jù)結(jié)構(gòu)
- 和大數(shù)據(jù)生態(tài)結(jié)合緊密
目前還沒有一款存儲(chǔ)能夠完全滿足要求。
我們第一版的存儲(chǔ)架構(gòu)如下圖所示:
離線數(shù)據(jù)大部分存儲(chǔ)在hive中,小部分存儲(chǔ)在hbase(主要用于基礎(chǔ)標(biāo)簽的查詢)。實(shí)時(shí)數(shù)據(jù)一部分存儲(chǔ)在hbase中用于基礎(chǔ)標(biāo)簽的查詢,部分雙寫到KUDU和ES中,用于實(shí)時(shí)分組圈選和數(shù)據(jù)查詢。離線圈選的數(shù)據(jù)通過impala計(jì)算出來緩存在redis中。
這一版本的缺點(diǎn)包括:
- 存儲(chǔ)引擎過多。
- 雙寫有數(shù)據(jù)質(zhì)量隱患,可能一方成功一方失敗,導(dǎo)致數(shù)據(jù)不一致。
- 項(xiàng)目復(fù)雜,可維護(hù)性較差。
為了減少引擎和存儲(chǔ)的使用量,提高項(xiàng)目可維護(hù)性,在版本一的基礎(chǔ)上改進(jìn)實(shí)現(xiàn)了版本二。
存儲(chǔ)架構(gòu)版本二引入了ApacheDoris,離線數(shù)據(jù)主要存儲(chǔ)在HIVE中,同時(shí)將基礎(chǔ)標(biāo)簽導(dǎo)入到Doris,實(shí)時(shí)數(shù)據(jù)也存儲(chǔ)在doris,基于Spark做HIVE加Doris的聯(lián)合查詢,并將計(jì)算出來的結(jié)果存儲(chǔ)在redis中。經(jīng)過此版改進(jìn)后,實(shí)時(shí)離線引擎存儲(chǔ)得到了統(tǒng)一,性能損失在可容忍范圍內(nèi)(Hbase的查詢性能比doris好一些,能控制在10ms以內(nèi),doris目前是1.0版本,p99,查詢性能能控制在20ms以內(nèi),p999,能控制在50ms以內(nèi));項(xiàng)目簡化,降低了運(yùn)維成本。
在大數(shù)據(jù)領(lǐng)域,各種存儲(chǔ)計(jì)算引擎有各自的適用場景,如下表所示:
?
04 高性能查詢
分組存在性判斷:判斷用戶是否在指定的一個(gè)分組或者多個(gè)分組。包括兩大部分:第一部分為靜態(tài)人群包,提前進(jìn)行預(yù)計(jì)算,存入redis中(key為實(shí)體的id,value為結(jié)果集id),采用lua腳本進(jìn)行批量判斷,提升性能;第二部分為實(shí)時(shí)行為人群,需要從上下文、API和ApacheDoris中提取數(shù)據(jù)進(jìn)行規(guī)則判斷。性能提升方案包括,異步化查詢、快速短路、查詢語句優(yōu)化、控制join表數(shù)量等。
?
還有一個(gè)場景是人群分析:人群分析需要將人群包數(shù)據(jù)同多個(gè)表進(jìn)行聯(lián)合查詢,分析行為路徑。目前doris還不支持路徑分析函數(shù),因此我們開發(fā)了dorisUDF來支持此業(yè)務(wù)。doris的計(jì)算模型對自定義函數(shù)的開發(fā)還是很友好的,能夠比較好地滿足我們的性能需要。
?
ApacheDoris在網(wǎng)易嚴(yán)選中已應(yīng)用于點(diǎn)查、批量查詢、路徑分析、人群圈選等場景。在實(shí)踐中具備以下優(yōu)勢:
(1)在點(diǎn)查和少量表的聯(lián)合查詢性能QPS超過萬級,RT99<50MS。
(2)水平擴(kuò)展能力很強(qiáng),運(yùn)維成本相對比較低。
(3)離線數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)相統(tǒng)一,降低標(biāo)簽?zāi)P蛷?fù)雜度。
不足之處在于大量小數(shù)據(jù)量的導(dǎo)入任務(wù)資源占用較多,性能還需要優(yōu)化。
05 未來規(guī)劃
?
(1)提升存儲(chǔ)&計(jì)算性能?
HIVE和Spark逐漸全部轉(zhuǎn)向ApacheDoris。
(2)優(yōu)化標(biāo)簽體系
- 建立豐富準(zhǔn)確的標(biāo)簽評價(jià)體系
- 提升標(biāo)簽質(zhì)量和產(chǎn)出速度
- 提升標(biāo)簽覆蓋率
(3)更精準(zhǔn)的運(yùn)營?
- 建立豐富的用戶分析模型
- 從使用頻次和用戶價(jià)值兩個(gè)方面提升用戶洞察模型評價(jià)體系
- 建立通用化畫像分析能力,輔助運(yùn)營智能化決策
今天的分享就到這里,謝謝大家。