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