业务赋能利器之外卖特征档案
應(yīng)用背景及現(xiàn)狀
美團(tuán)外賣業(yè)務(wù)自2013年9月啟動(dòng)至今已運(yùn)營(yíng)三年時(shí)間。截至2016年12月,美團(tuán)點(diǎn)評(píng)整個(gè)外賣平臺(tái)的日訂單超過(guò)900萬(wàn)。從發(fā)展速度和體量上看,外賣業(yè)務(wù)仍處在迅猛發(fā)展的上升期。與早期飛速增長(zhǎng)的狀態(tài)相比,隨著規(guī)模的不斷擴(kuò)大,業(yè)務(wù)的發(fā)展需要更健康、高效,這就對(duì)業(yè)務(wù)對(duì)象、業(yè)務(wù)環(huán)節(jié)的整體業(yè)務(wù)運(yùn)營(yíng)管理提出更高的要求。
特征檔案平臺(tái)向各業(yè)務(wù)提供了用戶/商戶篩選和檔案管理服務(wù),同時(shí)提供了數(shù)據(jù)查詢、存儲(chǔ)、生成、導(dǎo)出等數(shù)據(jù)管理功能,能夠提高運(yùn)營(yíng)工作效率。當(dāng)前用戶特征檔案平臺(tái)覆蓋全部的外賣用戶,有特征標(biāo)簽近200個(gè),商戶特征檔案平臺(tái)覆蓋全部的外賣商戶,有特征標(biāo)簽400多個(gè)。
特征檔案的用戶希望通過(guò)平臺(tái)及時(shí)獲取到滿足篩選條件的結(jié)果集,并保存固定的篩選邏輯,實(shí)現(xiàn)定制化篩選。抽象出來(lái),主要有以下幾個(gè)核心訴求: * 便捷的篩選方式。通過(guò)點(diǎn)擊頁(yè)面可視化的標(biāo)簽,進(jìn)行便捷查詢。 * 即時(shí)自助查詢。不同的使用者可隨時(shí)執(zhí)行各種各樣的標(biāo)簽查詢。 * 查詢結(jié)果全量獲取。對(duì)滿足查詢條件的結(jié)果全集進(jìn)行全量獲取。
面對(duì)上面的需求,開(kāi)發(fā)人員需要解決以下幾個(gè)核心問(wèn)題: * 將海量數(shù)據(jù)處理加工成標(biāo)簽,并實(shí)現(xiàn)完善的標(biāo)簽體系。 * 使用合適的存儲(chǔ)查詢引擎實(shí)現(xiàn)即時(shí)查詢海量數(shù)據(jù)。 * 使用合適的存儲(chǔ)查詢引擎實(shí)現(xiàn)查詢結(jié)果的全量獲取,并提供接口服務(wù)。
特征檔案的標(biāo)簽生產(chǎn),在外賣數(shù)據(jù)倉(cāng)庫(kù)中完成。針對(duì)主題加工出需要的標(biāo)簽,圍繞用戶以及商戶建立完善的標(biāo)簽體系,支撐上層應(yīng)用。我們使用了ES(Elastic Search)存儲(chǔ)單天的特征數(shù)據(jù),極大的改善了系統(tǒng)的查詢性能,實(shí)現(xiàn)了即時(shí)查詢海量數(shù)據(jù)。對(duì)于特征檔案查詢結(jié)果的存儲(chǔ)與查詢,我們可以借助于HBase的非結(jié)構(gòu)化存儲(chǔ)和強(qiáng)大的存儲(chǔ)能力,將數(shù)據(jù)服務(wù)進(jìn)行包裝,提供統(tǒng)一的服務(wù)客戶端進(jìn)行數(shù)據(jù)交互,業(yè)務(wù)系統(tǒng)根據(jù)需求調(diào)用相應(yīng)的服務(wù),解耦與業(yè)務(wù)系統(tǒng)的邏輯。
目前特征檔案平臺(tái)主要提供以下服務(wù): * 通過(guò)特征標(biāo)簽篩選目標(biāo)用戶/商戶,提供任意標(biāo)簽組合邏輯的即時(shí)查詢服務(wù); * 將篩選條件保存成為檔案,支持檔案的保存、修改、刪除等操作; * 通過(guò)檔案生成當(dāng)前滿足條件的數(shù)據(jù)實(shí)例,支持實(shí)例的查看、導(dǎo)出、離線上傳等操作; * 提供服務(wù)化接口,支持通過(guò)Thrift接口調(diào)用的方式查詢用戶/商戶特征,或通過(guò)檔案、實(shí)例獲取用戶/商戶集合。
系統(tǒng)介紹
系統(tǒng)架構(gòu)
特征檔案服務(wù)的系統(tǒng)架構(gòu)如下圖所示。主要分為三個(gè)部分:數(shù)據(jù)加工層(數(shù)據(jù)倉(cāng)庫(kù))、數(shù)據(jù)服務(wù)層(waimai_data_feature_service服務(wù))、數(shù)據(jù)應(yīng)用層。
在數(shù)據(jù)加工層中,特征檔案的數(shù)據(jù)源主要為離線數(shù)據(jù)。離線數(shù)據(jù)源存儲(chǔ)在Hive中,主要收集了外賣數(shù)據(jù)倉(cāng)庫(kù)中的用戶、商戶相關(guān)的業(yè)務(wù)數(shù)據(jù)、外賣流量數(shù)據(jù)。離線數(shù)據(jù)在數(shù)據(jù)開(kāi)放平臺(tái)進(jìn)行加工處理,將標(biāo)簽結(jié)果數(shù)據(jù)寫入線上ES集群中。在離線數(shù)據(jù)寫入線上ES集群的過(guò)程中,進(jìn)行了數(shù)據(jù)去重處理(唯一性檢驗(yàn)),保證了線上篩選結(jié)果的唯一性。
在數(shù)據(jù)倉(cāng)庫(kù)之上,我們建立了數(shù)據(jù)服務(wù)層,并針對(duì)不同的應(yīng)用選擇了差異化的數(shù)據(jù)存儲(chǔ)和查詢引擎。數(shù)據(jù)服務(wù)層中,使用ES作為特征存儲(chǔ)和查詢引擎,使用HBase存儲(chǔ)用戶/商戶實(shí)例(這里的實(shí)例是指為業(yè)務(wù)方通過(guò)特征檔案服務(wù)勾選出篩選條件并生成的數(shù)據(jù)結(jié)果集)。使用了MySQL數(shù)據(jù)庫(kù)存儲(chǔ)特征檔案平臺(tái)相關(guān)的檔案、實(shí)例、標(biāo)簽管理、平臺(tái)操作日志等信息。
waimai_data_feature_service是數(shù)據(jù)服務(wù)層的核心,使用了公司提供的分布式服務(wù)通信框架及服務(wù)治理系統(tǒng)框架,對(duì)外提供Thrift接口。它提供的主要服務(wù)包括:特征篩選的預(yù)覽查詢,檔案創(chuàng)建及管理,實(shí)例生成及管理,實(shí)例導(dǎo)出,離線上傳實(shí)例,標(biāo)簽管理。
最上層是數(shù)據(jù)產(chǎn)品和應(yīng)用,基于外賣數(shù)據(jù)平臺(tái)的特征檔案平臺(tái)提供了可視化的功能,并針對(duì)不同的業(yè)務(wù)需求方提供不同的數(shù)據(jù)應(yīng)用服務(wù),主要分為兩大類: * 精準(zhǔn)營(yíng)銷:提供用戶和商戶的營(yíng)銷策略支持。 * 運(yùn)營(yíng)管理:提供商戶的管理支持。
服務(wù)架構(gòu)
waimai_data_feature_service服務(wù)架構(gòu)如下圖所示,整體上分為六個(gè)部分:服務(wù)配置、MySQL服務(wù)、HBase服務(wù)、ES服務(wù)、AOP(Aspect Oriented Programming)、標(biāo)簽管理。
服務(wù)配置:服務(wù)使用了美團(tuán)統(tǒng)一配置中心(MCC)實(shí)現(xiàn)了服務(wù)配置管理。
MySQL服務(wù):為特征檔案平臺(tái)相關(guān)的檔案、實(shí)例、標(biāo)簽管理、平臺(tái)操作日志等信息提供存儲(chǔ)和查詢服務(wù)。
HBase服務(wù):使用HBase實(shí)現(xiàn)實(shí)例的存儲(chǔ)和查詢。
ES服務(wù):提供兩種ES查詢方式。FromToQuery即傳統(tǒng)的分頁(yè)查詢,適合小數(shù)據(jù)量的淺分頁(yè)查詢,它的典型使用場(chǎng)景是特征檔案平臺(tái)中通過(guò)勾選某些篩選條件來(lái)預(yù)覽數(shù)據(jù)結(jié)果(預(yù)覽查詢)。ScrollQuery即深分頁(yè)查詢,用于一次性查詢大量的數(shù)據(jù)甚至是全部數(shù)據(jù),它的典型使用場(chǎng)景是通過(guò)篩選條件獲取到全部數(shù)據(jù)結(jié)果集(實(shí)例生成)。
AOP服務(wù):提供了兩種切面,日志上報(bào)和服務(wù)開(kāi)關(guān)。日志上報(bào)即日志收集(埋點(diǎn)),適用于方法級(jí)別。服務(wù)開(kāi)關(guān)實(shí)現(xiàn)了對(duì)不同服務(wù)的開(kāi)關(guān)管理。
標(biāo)簽管理:標(biāo)簽管理模塊將標(biāo)簽分成了多種類型,不同的類型實(shí)現(xiàn)了不同的標(biāo)簽管理方法(這里的標(biāo)簽管理方法是指標(biāo)簽實(shí)現(xiàn)頁(yè)面展示邏輯的方法,標(biāo)簽的篩選邏輯轉(zhuǎn)換成可供ES查詢的過(guò)濾器方法,通過(guò)關(guān)聯(lián)標(biāo)簽維表將標(biāo)簽的查詢結(jié)果轉(zhuǎn)換成適合的結(jié)果形式方法)。FeatureShow提供了特征檔案平臺(tái)中的特征標(biāo)簽展示服務(wù),GenESFilter實(shí)現(xiàn)了將標(biāo)簽查詢語(yǔ)言解析成ESFilter的功能,ParseQueryResult則實(shí)現(xiàn)了將ES查詢結(jié)果解析成最終可展示的友好的結(jié)果形式。
特征標(biāo)簽
標(biāo)簽體系,標(biāo)簽的生產(chǎn)、存儲(chǔ)與查詢,是我們?cè)谙到y(tǒng)開(kāi)發(fā)過(guò)程中最核心的技術(shù)問(wèn)題,也直接影響著整個(gè)特征檔案平臺(tái)的性能和用戶體驗(yàn)。在本文前面提到的幾個(gè)核心問(wèn)題,就是我們需要解決的: * 海量數(shù)據(jù)處理加工成標(biāo)簽,并實(shí)現(xiàn)完善的標(biāo)簽體系; * 使用合適的存儲(chǔ)查詢引擎實(shí)現(xiàn)即時(shí)查詢海量數(shù)據(jù); * 使用合適的存儲(chǔ)查詢引擎實(shí)現(xiàn)查詢結(jié)果的全量獲取,并提供接口服務(wù)。
標(biāo)簽體系
特征檔案平臺(tái)的標(biāo)簽體系如下圖所示。標(biāo)簽分為兩大類:商戶特征標(biāo)簽和用戶特征標(biāo)簽。每一大類標(biāo)簽中,我們又繼續(xù)劃分了維度。商戶特征包含已合作外賣商戶和未合作外賣商戶兩個(gè)維度。用戶特征包含外賣用戶和外賣設(shè)備兩個(gè)維度。
在維度劃分的基礎(chǔ)上,繼續(xù)按照標(biāo)簽的屬性進(jìn)行分組。商戶特征屬性包含:基本屬性、經(jīng)營(yíng)能力等。用戶特征屬性包含:用戶自然屬性、用戶交易屬性等。在各個(gè)屬性內(nèi)部是具體的特征標(biāo)簽,特征標(biāo)簽是一個(gè)或多個(gè)具有相似業(yè)務(wù)含義的初級(jí)標(biāo)簽的聚合形式。初級(jí)標(biāo)簽是指在數(shù)據(jù)倉(cāng)庫(kù)中最先生產(chǎn)出來(lái)的細(xì)粒度的標(biāo)簽。標(biāo)簽的全部行為由標(biāo)簽管理方法決定,標(biāo)簽的行為包含:標(biāo)簽的展示樣式(新增、更改、刪除等)、標(biāo)簽的使用邏輯等。
標(biāo)簽體系為特征檔案平臺(tái)提供了可靠、穩(wěn)定、規(guī)范的標(biāo)簽管理服務(wù),通過(guò)標(biāo)簽體系我們可以規(guī)范數(shù)據(jù)開(kāi)發(fā)流程、簡(jiǎn)化和統(tǒng)一標(biāo)簽的生產(chǎn)方式。我們使用ES搜索引擎來(lái)實(shí)現(xiàn)面向應(yīng)用的標(biāo)簽數(shù)據(jù)存儲(chǔ),ES自身有很強(qiáng)大的實(shí)時(shí)搜索和分析性能。標(biāo)簽管理服務(wù)便于開(kāi)發(fā)人員靈活的配置平臺(tái)中的可用標(biāo)簽,未來(lái)可以支持定制化的標(biāo)簽管理,也可以結(jié)合其他服務(wù)深入分析挖掘特征檔案平臺(tái)的標(biāo)簽。
標(biāo)簽生產(chǎn)
特征檔案標(biāo)簽的生產(chǎn)在外賣數(shù)據(jù)倉(cāng)庫(kù)中完成,標(biāo)簽生產(chǎn)數(shù)據(jù)流如下圖所示。數(shù)據(jù)流主要包括三大部分,數(shù)據(jù)源、Hive數(shù)據(jù)倉(cāng)庫(kù)、數(shù)據(jù)應(yīng)用。其中Hive倉(cāng)庫(kù)中又分為四個(gè)部分,ODS表群、基礎(chǔ)表群(FACT表、DIM表、維度快照表)、集市層表群(AGGR表)、應(yīng)用層表群(TOPIC表)。數(shù)據(jù)應(yīng)用層分為兩個(gè)部分,應(yīng)用緩沖層和應(yīng)用層。標(biāo)簽生產(chǎn)過(guò)程分六步:源數(shù)據(jù)獲取(Extract)、ODS層表群向基礎(chǔ)層表群轉(zhuǎn)換(Transform)、基礎(chǔ)層向集市層的數(shù)據(jù)匯總、集市層向主題層的數(shù)據(jù)集成、主題層向應(yīng)用層的緩沖、最終形成應(yīng)用數(shù)據(jù)。
數(shù)據(jù)源當(dāng)前主要包含外賣各個(gè)業(yè)務(wù)線的業(yè)務(wù)庫(kù)和外賣日志。我們將這一部分?jǐn)?shù)據(jù)同步到Hive數(shù)據(jù)倉(cāng)庫(kù)中,形成ODS層表群(和源系統(tǒng)同構(gòu)的表群)。從ODS層向基礎(chǔ)層表群轉(zhuǎn)換,得到我們的基礎(chǔ)數(shù)據(jù)層,其中包含事實(shí)表、維度表、快照表。基礎(chǔ)數(shù)據(jù)層中的表是我們生產(chǎn)標(biāo)簽數(shù)據(jù)的核心基礎(chǔ)表,也是我們形成初級(jí)數(shù)據(jù)聚合表的直接數(shù)據(jù)源。基礎(chǔ)數(shù)據(jù)層包含的數(shù)據(jù)例如訂單事實(shí)、商戶事實(shí)、行為事實(shí)等。
聚合層是我們形成初級(jí)數(shù)據(jù)聚合的地方,也是初級(jí)標(biāo)簽生成的地方。在聚合層,我們將初級(jí)標(biāo)簽劃分成了不同的屬性,依據(jù)標(biāo)簽屬性分組,不同的分組對(duì)應(yīng)不同的聚合表。
初級(jí)標(biāo)簽生成后,我們將初級(jí)標(biāo)簽集成到主題層。主題層是我們數(shù)據(jù)倉(cāng)庫(kù)產(chǎn)出的可面向應(yīng)用的最終結(jié)果表群。
數(shù)據(jù)應(yīng)用部分我們首先進(jìn)行了一層緩沖,即主題層過(guò)度到最終線上應(yīng)用數(shù)據(jù)的應(yīng)用緩沖層。在這一層,我們將初級(jí)標(biāo)簽聚合成終極標(biāo)簽,存儲(chǔ)結(jié)構(gòu)選用了Hive的Map結(jié)構(gòu)存儲(chǔ)。這樣的好處是將一個(gè)或多個(gè)具有相似業(yè)務(wù)含義的初級(jí)標(biāo)簽統(tǒng)一管理,并在標(biāo)簽體系中具有相同的標(biāo)簽行為。應(yīng)用緩沖層僅存儲(chǔ)了最新一天的數(shù)據(jù)。
最后的應(yīng)用層,我們將緩沖好的數(shù)據(jù)寫入線上的ES集群中,每天都會(huì)進(jìn)行重建索引的流程。
標(biāo)簽存儲(chǔ)與查詢
我們?cè)贖ive中完成特征數(shù)據(jù)的加工與存儲(chǔ),整體特征檔案系統(tǒng)幾乎涵蓋了外賣業(yè)務(wù)的所有指標(biāo)。我們首先將指標(biāo)按照主題歸類,針對(duì)主題加工出需要的標(biāo)簽,然后建立層次準(zhǔn)確清晰的數(shù)據(jù)底層模型,將不同主題的數(shù)據(jù)進(jìn)行集成,圍繞用戶以及商家建立完善的標(biāo)簽體系,支撐上層應(yīng)用。
在數(shù)據(jù)倉(cāng)庫(kù)之上的數(shù)據(jù)服務(wù)層,并針對(duì)不同的應(yīng)用選擇了差異化的數(shù)據(jù)存儲(chǔ)和查詢引擎。數(shù)據(jù)服務(wù)層中,我們決定使用ES作為特征存儲(chǔ)和查詢引擎,主要有以下理由: * ES整個(gè)系統(tǒng)設(shè)計(jì)和架構(gòu)非常簡(jiǎn)潔,運(yùn)維方案簡(jiǎn)單,也有專門的工具支持; * ES具有強(qiáng)大的實(shí)時(shí)搜索和分析性能,針對(duì)大規(guī)模數(shù)據(jù)提供了優(yōu)秀的查詢性能(秒級(jí)查詢); * ES便捷的數(shù)據(jù)交互方式(Restful API)配合上完善的標(biāo)簽管理體系,使特征檔案的標(biāo)簽擴(kuò)展性很強(qiáng)(通過(guò)JSON格式可以靈活變更標(biāo)簽的存儲(chǔ)邏輯)。
標(biāo)簽查詢語(yǔ)言
特征檔案平臺(tái)支持的查詢語(yǔ)言是在標(biāo)簽上定義的一階謂詞邏輯標(biāo)簽查詢語(yǔ)言。傳統(tǒng)意義上的標(biāo)簽通常僅具有“是否”邏輯,如:“成熟用戶、北京市”。特征檔案中的標(biāo)簽突破了傳統(tǒng)意義上標(biāo)簽的定義,自身支持多種查詢邏輯:大于、小于、是、否。在標(biāo)簽自身的查詢邏輯基礎(chǔ)上,標(biāo)簽與標(biāo)簽之間也支持與、或、非及組合邏輯。
舉例來(lái)說(shuō),特征檔案支持如下的查詢語(yǔ)言:
“(物理城市名稱:淮北)與((是否有營(yíng)業(yè)執(zhí)照:是)或(是否有餐飲許可證:是))與(交易額:大于80))”。
當(dāng)前的標(biāo)簽查詢語(yǔ)言,極大的豐富了標(biāo)簽之間的查詢可能組合。以用戶成熟度標(biāo)簽舉例說(shuō)明,包含三種傳統(tǒng)標(biāo)簽:初級(jí)用戶、成長(zhǎng)用戶、成熟用戶。特征檔案平臺(tái)支持對(duì)這三種傳統(tǒng)標(biāo)簽進(jìn)行直接篩選查詢,也支持通過(guò)對(duì)歷史訂單數(shù)的范圍自定義完成用戶成熟度標(biāo)簽的自定義篩選查詢。
總結(jié)與展望
特征檔案平臺(tái)主要的使用場(chǎng)景是營(yíng)銷、運(yùn)營(yíng)管理等領(lǐng)域。隨著美團(tuán)外賣業(yè)務(wù)的發(fā)展,特征檔案平臺(tái)持續(xù)的遇到新的問(wèn)題和挑戰(zhàn)。總結(jié)開(kāi)發(fā)經(jīng)驗(yàn),我們歸納出以下數(shù)據(jù)系統(tǒng)設(shè)計(jì)的要點(diǎn): * 數(shù)據(jù)倉(cāng)庫(kù) 特征檔案系統(tǒng)涵蓋的指標(biāo)范圍廣,為了整合系列指標(biāo),我們首先將指標(biāo)按照主題歸類,針對(duì)主題加工出需要的標(biāo)簽,然后建立層次化的數(shù)據(jù)底層模型,將不同主題的數(shù)據(jù)進(jìn)行集成,圍繞用戶以及商家建立標(biāo)簽體系,支撐上層應(yīng)用。 * 數(shù)據(jù)存儲(chǔ) 針對(duì)不同場(chǎng)景,需要合理地選擇存儲(chǔ)組件。對(duì)于特征檔案實(shí)例的存儲(chǔ),由于數(shù)據(jù)量巨大,同時(shí)需要通過(guò)追溯歷史來(lái)進(jìn)行營(yíng)銷效果分析等深入的數(shù)據(jù)分析工作,我們借助于HBase的非結(jié)構(gòu)化存儲(chǔ)和強(qiáng)大的存儲(chǔ)能力。對(duì)于特征檔案的生成和查詢,我們使用ES來(lái)存儲(chǔ),借助于ES的索引機(jī)制,我們可以快速的查詢和提取符合條件的用戶或者商戶。對(duì)于系統(tǒng)的管理以及效果報(bào)表的展示數(shù)據(jù)等結(jié)構(gòu)化的數(shù)據(jù),我們選擇了結(jié)構(gòu)化的MySQL。 * 數(shù)據(jù)服務(wù) 在數(shù)據(jù)服務(wù)上,借助于分層和SOA的思想,我們針對(duì)不同的存儲(chǔ)來(lái)源提供不同的服務(wù)組件,實(shí)現(xiàn)數(shù)據(jù)查詢和數(shù)據(jù)提取。同時(shí),我們將數(shù)據(jù)服務(wù)進(jìn)行包裝,提供統(tǒng)一的服務(wù)客戶端進(jìn)行數(shù)據(jù)交互,業(yè)務(wù)系統(tǒng)根據(jù)需求調(diào)用相應(yīng)的服務(wù),解耦與業(yè)務(wù)系統(tǒng)的邏輯。
未來(lái),外賣特征檔案平臺(tái)將持續(xù)為外賣運(yùn)營(yíng)系統(tǒng)提供數(shù)據(jù)支持,將從以下幾個(gè)方面進(jìn)行優(yōu)化: * 接入第三方標(biāo)簽 未來(lái)應(yīng)用將依托于公司內(nèi)外部數(shù)據(jù),獲取更加準(zhǔn)確的特征標(biāo)簽。 * 支持個(gè)性化的定制標(biāo)簽使用 當(dāng)前系統(tǒng)的標(biāo)簽還僅僅局限于事先預(yù)計(jì)算的用戶特征,未來(lái)將支持用戶自定義標(biāo)簽,然后從數(shù)據(jù)集中篩選出用戶,更加靈活、自由的提取滿足特征的群體。 * 數(shù)據(jù)挖掘 未來(lái)將會(huì)對(duì)常用的特征檔案進(jìn)行深入挖掘,分析該群體的行為特征,更加準(zhǔn)確定位,滿足用戶需求。
總結(jié)
以上是生活随笔為你收集整理的业务赋能利器之外卖特征档案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 蚂蚁三面题目(java开发岗):Java
- 下一篇: 人工智能大地图之分布式人工智能篇