網易嚴選DMP標簽系統建設實踐
如果說互聯網的上半場是粗狂運營,因為有流量紅利不需要考慮細節。那么在下半場,精細化運營將是長久的主題,有數據分析能力才能讓用戶得到更好的體驗。當下比較典型的分析方式是構建用戶標簽系統,從而精準地生成用戶畫像,提升用戶體驗。今天分享的主題是網易嚴選DMP標簽系統建設實踐,主要圍繞下面五點展開:
- 平臺總覽
- 標簽生產 :標簽圈選&生產鏈路
- 標簽存儲:存儲方式&存儲架構演進
- 高性能查詢
- 未來規劃
01 平臺總覽
DMP作為網易嚴選的數據中臺,向下連接數據,向上賦能業務,承擔著非常重要的基石角色。
DMP的數據來源主要包括三大部分:
- 自營平臺的app、小程序、pc端等各端的業務日志
- 網易集團內部共建的一些基礎數據
- 京東、淘寶、抖音等第三方渠道店鋪的數據
通過收集、清洗,將以上數據形成數據資產沉淀下來。DMP在數據資產基礎上形成了一套自己的標簽產出、人群圈選和用戶畫像分析體系,從而為業務提供支撐,包括:智能化的選品、精準觸達以及用戶洞察等。總的來說,DMP系統就是構建以數據為核心的標簽體系和畫像體系,從而輔助業務做一系列精細化的運營。
?
了解DMP系統,先從以下幾個概念開始。
- 標簽:對于實體(用戶、設備、手機號等)特征的描述,是一種面向業務的數據組織形式,比如使用:年齡段、地址、偏好類目等對用戶實體進行刻畫。
- 人群圈選:通過條件組合從全體用戶中圈選出一部分用戶,具體就是指定一組用戶標簽和其對應的標簽值,得到符合條件的用戶人群。
- 畫像分析:對于人群圈選結果,查看該人群的行為情況、標簽分布。例如查看【城市為杭州,且性別為女性】的用戶在嚴選APP上的行為路徑、消費模型等。

嚴選標簽系統對外主要提供兩大核心能力:
(1)標簽查詢:查詢特定實體指定標簽的能力,常用于基本信息的展示。
(2)人群圈選:分為實時和離線圈選。圈選結果主要用于:
- 分組判斷:判讀用戶是否在指定的一個或多個分組,資源投放、觸點營銷等場景使用較多。
- 結果集拉取:拉取指定的人群數據到業務方系統中,進行定制化開發。
- 畫像分析:分析特定人群的行為數據,消費模型等,進行更精細的運營。
整體的業務流程如下:
?
- 首先定義標簽和人群圈選的規則;
- 定義出描述業務的DSL之后,便可以將任務提交到Spark進行計算;
- 計算完成之后,將計算結果存儲到HIVE和DORIS;
- 之后業務方便可以根據實際業務需求從HIVE或DORIS中查詢使用數據。
?
DMP平臺整體分為計算存儲層、調度層、服務層、和元數據管理四大模塊。?
所有的標簽元信息存儲在源數據表中;調度層對業務的整個流程進行任務調度:數據處理、聚合轉化為基礎標簽,基礎標簽和源表中的數據通過DSL規則轉化為可用于數據查詢的SQL語義,由調度層將任務調度到計算存儲層的Spark進行計算,并將計算結果存儲到Hive和Doris中。服務層由標簽服務、實體分組服務、基礎標簽數據服務、畫像分析服務四部分組成。
?
標簽的生命周期包含5個階段:?
(1)標簽需求:在此階段,運營提出標簽的需求和價值預期,產品評估需求合理性以及緊迫性。
(2)排期生產:此階段需要數據開發梳理數據,從ods到dwd到dm層整個鏈路,根據數據建立模型,同時數據開發需要做好質量監控。
(3)人群圈選:標簽生產出來之后進行應用,圈選出標簽對應的人群。
(4)精準營銷:對3中圈選出來的人群進行精準化營銷。
(5)效果評估:最后產品、數據開發和運營對標簽使用率、使用效果進行效果評估來決定后續對標簽進行改進或降級。
總的來說,就是以業務增長為目標,圍繞標簽的生命周期,投入合理的資源,最大化運營效果。
02 標簽生產
接下來介紹標簽生產的整個過程。
?
標簽的數據分層:?
- 最下層是ods層,包括用戶登錄日志、埋點記錄日志、交易數據以及各種數據庫的binlog數據。
- 對ods層處理后的數據到達dwd明細層,包括用戶登錄表、用戶活動表、訂單信息表等。
- dwd層數據聚合后到dm層,標簽全部基于dm層數據實現。
目前我們從原始數據庫到ods層數據產出已經完全自動化,從ods層到dwd層實現了部分自動化,從dwd到dm層有一部分自動化操作,但自動化程度還不高,這部分的自動化操作是我們接下來的工作重點。
?
標簽根據時效性分為:離線標簽、近實時標簽和實時標簽。
根據聚合粒度分為:聚合標簽和明細標簽。
通過類別維度可將標簽分為:賬號屬性標簽、消費行為標簽、活躍行為標簽、用戶偏好標簽、資產信息標簽等。
?
直接將dm層的數據不太方便拿來用,原因在于:
基礎數據比較原始,抽象層次有所欠缺、使用相對繁瑣。通過對基礎數據進行與、或、非的組合,形成業務標簽供業務方使用,可以降低運營的理解成本,降低使用難度。
?
標簽組合之后需要對標簽進行具體業務場景應用,如人群圈選。配置如上圖左側所示,支持離線人群包和實時行為(需要分開配置)。
配置完后,生成上圖右側所示的DSL規則,以json格式表達,對前端比較友好,也可以轉成存儲引擎的查詢語句。


標簽有一部分實現了自動化。在人群圈選部分自動化程度比較高。比如分組刷新,每天定時刷新;高級計算,如分組與分組間的交/并/差集;數據清理,及時清理過期失效的實體集。
03 標簽存儲
下面介紹一下我們在標簽存儲方面的實踐。
嚴選DMP標簽系統需要承載比較大的C端流量,對實時性要求也比較高。
我們對存儲的要求包括:
- 支持高性能查詢,以應對大規模C端流量
- 支持SQL,便于應對數據分析場景
- 支持數據更新機制
- 可存儲大數據量
- 支持擴展函數,以便處理自定義數據結構
- 和大數據生態結合緊密
目前還沒有一款存儲能夠完全滿足要求。
我們第一版的存儲架構如下圖所示:

離線數據大部分存儲在hive中,小部分存儲在hbase(主要用于基礎標簽的查詢)。實時數據一部分存儲在hbase中用于基礎標簽的查詢,部分雙寫到KUDU和ES中,用于實時分組圈選和數據查詢。離線圈選的數據通過impala計算出來緩存在redis中。
這一版本的缺點包括:
- 存儲引擎過多。
- 雙寫有數據質量隱患,可能一方成功一方失敗,導致數據不一致。
- 項目復雜,可維護性較差。
為了減少引擎和存儲的使用量,提高項目可維護性,在版本一的基礎上改進實現了版本二。

存儲架構版本二引入了ApacheDoris,離線數據主要存儲在HIVE中,同時將基礎標簽導入到Doris,實時數據也存儲在doris,基于Spark做HIVE加Doris的聯合查詢,并將計算出來的結果存儲在redis中。經過此版改進后,實時離線引擎存儲得到了統一,性能損失在可容忍范圍內(Hbase的查詢性能比doris好一些,能控制在10ms以內,doris目前是1.0版本,p99,查詢性能能控制在20ms以內,p999,能控制在50ms以內);項目簡化,降低了運維成本。
在大數據領域,各種存儲計算引擎有各自的適用場景,如下表所示:
?
04 高性能查詢

分組存在性判斷:判斷用戶是否在指定的一個分組或者多個分組。包括兩大部分:第一部分為靜態人群包,提前進行預計算,存入redis中(key為實體的id,value為結果集id),采用lua腳本進行批量判斷,提升性能;第二部分為實時行為人群,需要從上下文、API和ApacheDoris中提取數據進行規則判斷。性能提升方案包括,異步化查詢、快速短路、查詢語句優化、控制join表數量等。
?
還有一個場景是人群分析:人群分析需要將人群包數據同多個表進行聯合查詢,分析行為路徑。目前doris還不支持路徑分析函數,因此我們開發了dorisUDF來支持此業務。doris的計算模型對自定義函數的開發還是很友好的,能夠比較好地滿足我們的性能需要。
?
ApacheDoris在網易嚴選中已應用于點查、批量查詢、路徑分析、人群圈選等場景。在實踐中具備以下優勢:
(1)在點查和少量表的聯合查詢性能QPS超過萬級,RT99<50MS。
(2)水平擴展能力很強,運維成本相對比較低。
(3)離線數據和實時數據相統一,降低標簽模型復雜度。
不足之處在于大量小數據量的導入任務資源占用較多,性能還需要優化。
05 未來規劃
?
(1)提升存儲&計算性能?
HIVE和Spark逐漸全部轉向ApacheDoris。
(2)優化標簽體系
- 建立豐富準確的標簽評價體系
- 提升標簽質量和產出速度
- 提升標簽覆蓋率
(3)更精準的運營?
- 建立豐富的用戶分析模型
- 從使用頻次和用戶價值兩個方面提升用戶洞察模型評價體系
- 建立通用化畫像分析能力,輔助運營智能化決策
今天的分享就到這里,謝謝大家。































