關(guān)鍵時(shí)刻,第一時(shí)間送達(dá)!
今天分享的內(nèi)容主要分為四個(gè)部分,首先會(huì)介紹下嚴(yán)選實(shí)時(shí)數(shù)倉(cāng)的背景、產(chǎn)生的一些問(wèn)題。然后是針對(duì)這些背景和問(wèn)題對(duì)實(shí)時(shí)數(shù)倉(cāng)的整體設(shè)計(jì)和具體的實(shí)施方案,接著會(huì)介紹下在實(shí)時(shí)數(shù)倉(cāng)的數(shù)據(jù)質(zhì)量方面的工作,最后講一下實(shí)時(shí)數(shù)倉(cāng)在嚴(yán)選中的應(yīng)用場(chǎng)景。 1、背景 嚴(yán)選實(shí)時(shí)數(shù)倉(cāng)項(xiàng)目是從17年下半年開(kāi)始做的,背景總結(jié)為三個(gè)方面: 第一個(gè)是長(zhǎng)鏈路且快速變化的業(yè)務(wù),嚴(yán)選作為一個(gè)ODM電商,整個(gè)業(yè)務(wù)鏈度從商品采購(gòu)、生產(chǎn)、倉(cāng)庫(kù)、到銷(xiāo)售這個(gè)階段可以在主站APP上購(gòu)買(mǎi)或者分廠(chǎng)購(gòu)買(mǎi),然后通過(guò)商戶(hù)配送到達(dá)消費(fèi)者。鏈度是非常長(zhǎng)的,這也決定數(shù)據(jù)的數(shù)據(jù)域非常廣;嚴(yán)選作為一個(gè)成長(zhǎng)的電商,會(huì)有很多新的業(yè)務(wù)出現(xiàn)。 第二個(gè)是越來(lái)越多的實(shí)時(shí)數(shù)據(jù)需求,目前需要更多的實(shí)時(shí)數(shù)據(jù)來(lái)做業(yè)務(wù)決策,需要依據(jù)銷(xiāo)售情況做一個(gè)資源位的調(diào)整;同時(shí)有些活動(dòng)也需要實(shí)時(shí)數(shù)據(jù)來(lái)增強(qiáng)與用戶(hù)的互動(dòng)。如果數(shù)據(jù)有實(shí)時(shí)和離線(xiàn)兩種方案,優(yōu)先考慮實(shí)時(shí)的,如果實(shí)時(shí)實(shí)現(xiàn)不了再考慮離線(xiàn)的方式。 第三個(gè)就是越來(lái)越高的數(shù)據(jù)質(zhì)量要求,因?yàn)閿?shù)據(jù)會(huì)直接影響業(yè)務(wù)決策,影響線(xiàn)上運(yùn)營(yíng)活動(dòng)效果,因此對(duì)數(shù)據(jù)質(zhì)量的要求越來(lái)越高。 針對(duì)這樣的項(xiàng)目背景提出了三個(gè)設(shè)計(jì)目標(biāo),第一個(gè)是靈活可擴(kuò)展,第二個(gè)是開(kāi)發(fā)效率高,第三個(gè)是數(shù)據(jù)質(zhì)量要求高。 2、整體設(shè)計(jì)和實(shí)現(xiàn) 基于這樣的設(shè)計(jì)目標(biāo),介紹一下整體的設(shè)計(jì)和實(shí)現(xiàn)方案: 實(shí)時(shí)數(shù)倉(cāng)整體框架依據(jù)數(shù)據(jù)的流向分為不同的層次,接入層會(huì)依據(jù)各種數(shù)據(jù)接入工具收集各個(gè)業(yè)務(wù)系統(tǒng)的數(shù)據(jù),如買(mǎi)點(diǎn)的業(yè)務(wù)數(shù)據(jù)或者業(yè)務(wù)后臺(tái)的并購(gòu)放到消息隊(duì)列里面。消息隊(duì)列的數(shù)據(jù)既是離線(xiàn)數(shù)倉(cāng)的原始數(shù)據(jù),也是實(shí)時(shí)計(jì)算的原始數(shù)據(jù),這樣可以保證實(shí)時(shí)和離線(xiàn)的原始數(shù)據(jù)是統(tǒng)一的。有了源數(shù)據(jù),在計(jì)算層經(jīng)過(guò)FLink+實(shí)時(shí)計(jì)算引擎做一些加工處理,然后落地到存儲(chǔ)層中不同存儲(chǔ)介質(zhì)當(dāng)中。不同的存儲(chǔ)介質(zhì)是依據(jù)不同的應(yīng)用場(chǎng)景來(lái)選擇??蚣苤羞€有FLink和Kafka的交互,在數(shù)據(jù)上進(jìn)行一個(gè)分層設(shè)計(jì),計(jì)算引擎從Kafka中撈取數(shù)據(jù)做一些加工然后放回Kafka。在存儲(chǔ)層加工好的數(shù)據(jù)會(huì)通過(guò)服務(wù)層的兩個(gè)服務(wù):統(tǒng)一查詢(xún)、指標(biāo)管理,統(tǒng)一查詢(xún)是通過(guò)業(yè)務(wù)方調(diào)取數(shù)據(jù)接口的一個(gè)服務(wù),指標(biāo)管理是對(duì)數(shù)據(jù)指標(biāo)的定義和管理工作。通過(guò)服務(wù)層應(yīng)用到不同的數(shù)據(jù)應(yīng)用,數(shù)據(jù)應(yīng)用可能是我們的正式產(chǎn)品或者直接的業(yè)務(wù)系統(tǒng)。后面會(huì)從數(shù)據(jù)的分層設(shè)計(jì)和具體的實(shí)現(xiàn)兩個(gè)方面介紹。 上面是對(duì)數(shù)據(jù)的整體設(shè)計(jì),主要參考了離線(xiàn)數(shù)倉(cāng)的設(shè)計(jì)方案,也參考了業(yè)界同行的一些做法。將數(shù)據(jù)分為四個(gè)層次: 首先是ODS層,即操作數(shù)據(jù)層,通過(guò)數(shù)據(jù)采集工具收集各個(gè)業(yè)務(wù)源數(shù)據(jù);DWD層,明細(xì)數(shù)據(jù)層是按主題域來(lái)劃分,通過(guò)維度建模方式來(lái)組織各個(gè)業(yè)務(wù)過(guò)程的明細(xì)數(shù)據(jù)。中間會(huì)有一個(gè)DIM層,維度數(shù)據(jù)層主要做一些查詢(xún)和關(guān)聯(lián)的操作。最上層是DM層,通過(guò)DWD層數(shù)據(jù)做一些指標(biāo)加工,主要面向一些分析和應(yīng)用匯總的指標(biāo)或者是做多維分析的明細(xì)數(shù)據(jù)。 舉例說(shuō)明一下數(shù)據(jù)設(shè)計(jì)流向過(guò)程,假如要對(duì)嚴(yán)選主類(lèi)目上當(dāng)天銷(xiāo)售和流量的統(tǒng)計(jì),統(tǒng)計(jì)每個(gè)類(lèi)目的銷(xiāo)售量和流量從ODS層來(lái)源兩部分,一部分來(lái)自訪(fǎng)問(wèn),這是來(lái)源于埋點(diǎn)數(shù)據(jù),這種數(shù)據(jù)通常比較規(guī)范,通過(guò)一些簡(jiǎn)單加工,在DWD層形成一張商品訪(fǎng)問(wèn)明細(xì)表;交易數(shù)據(jù)來(lái)自交易明細(xì)表,在ODS層來(lái)源于訂單表和訂單購(gòu)物車(chē)表。將兩個(gè)表匯聚在DWD層形成一個(gè)交易域的交易明細(xì)表,因?yàn)榻y(tǒng)計(jì)需要統(tǒng)計(jì)到類(lèi)目維度,所以從DWD層向DM加工需要從商品維度表做一個(gè)關(guān)聯(lián),這樣就可以在DM層做一些匯總統(tǒng)計(jì),就可以形成DM所需要的指標(biāo)數(shù)據(jù)。這里的數(shù)據(jù)分為兩類(lèi),一種是實(shí)時(shí)的,一種是準(zhǔn)實(shí)時(shí);如果維度比較復(fù)雜,如準(zhǔn)實(shí)時(shí)彈幕做一些配置來(lái)做到同步,如果有一些關(guān)聯(lián)關(guān)系比較簡(jiǎn)單的就做成實(shí)時(shí)維表。這樣的好處是能實(shí)時(shí)統(tǒng)計(jì),能比較直觀(guān)觀(guān)察。 實(shí)時(shí)數(shù)倉(cāng)設(shè)計(jì)分為5個(gè)主題域,分別是商品、流量、交易、營(yíng)銷(xiāo)、倉(cāng)配。在這五個(gè)主題域下沉淀了25個(gè)模型,整個(gè)實(shí)時(shí)數(shù)倉(cāng)在線(xiàn)任務(wù)數(shù)達(dá)到135?;谶@樣的設(shè)計(jì)方案能整體實(shí)現(xiàn)設(shè)計(jì)目標(biāo)。 首先通過(guò)主體域的模型復(fù)用能夠提高開(kāi)發(fā)效率,最常用的就是交易域的實(shí)時(shí)數(shù)據(jù)。交易域的交易明細(xì)模型能夠產(chǎn)生多個(gè)集市層模型,交易明細(xì)的字段清洗比較規(guī)范,一般兩天就能開(kāi)發(fā)一個(gè)模型,如果模型簡(jiǎn)單一天就能搞定。第二個(gè)就是比較靈活,在DWD層封裝一些業(yè)務(wù)邏輯,快速應(yīng)對(duì)一些業(yè)務(wù)調(diào)整。舉例說(shuō)明下,嚴(yán)選上線(xiàn)一個(gè)眾籌業(yè)務(wù),先前對(duì)交易定義都是以支付來(lái)算,但是眾籌交易和支付相隔時(shí)間較長(zhǎng),對(duì)于離線(xiàn)只需要活動(dòng)結(jié)束再進(jìn)行統(tǒng)計(jì),但是實(shí)時(shí)只關(guān)注于當(dāng)天數(shù)據(jù),這個(gè)時(shí)候統(tǒng)計(jì)就沒(méi)有意義。因此需要將眾籌數(shù)據(jù)剔除,實(shí)現(xiàn)時(shí)只需要在交易明細(xì)里面進(jìn)行過(guò)濾,這樣集市層所有指標(biāo)數(shù)據(jù)都統(tǒng)一更改掉。第三個(gè)就是統(tǒng)一,數(shù)據(jù)都是按照業(yè)務(wù)域劃分,管理和維護(hù)都比較方便,對(duì)于開(kāi)發(fā)資源分配也比較便利。 然后介紹下技術(shù)實(shí)現(xiàn)方面的考量,主要分為計(jì)算和存儲(chǔ)。對(duì)于計(jì)算方面,有很多實(shí)時(shí)計(jì)算引擎,有Flink、Storm、Spark Streaming,F(xiàn)link相對(duì)于Storm的優(yōu)勢(shì)就是支持SQL,相對(duì)于Spark Streaming又有一個(gè)相對(duì)好的性能表現(xiàn)。同時(shí)Flink在支持好的應(yīng)用和性能方面還有比較好的語(yǔ)義支持和比較好的容錯(cuò)機(jī)制,因此構(gòu)建實(shí)時(shí)數(shù)倉(cāng)Flink是一個(gè)比較好的實(shí)時(shí)計(jì)算引擎選擇。 對(duì)于存儲(chǔ)層會(huì)依據(jù)不同的數(shù)據(jù)層的特點(diǎn)選擇不同的存儲(chǔ)介質(zhì),ODS層和DWD層都是存儲(chǔ)的一些實(shí)時(shí)數(shù)據(jù),選擇的是Kafka進(jìn)行存儲(chǔ),在DWD層會(huì)關(guān)聯(lián)一些歷史明細(xì)數(shù)據(jù),會(huì)將其放到Redis里面。在DIM層主要做一些高并發(fā)維度的查詢(xún)關(guān)聯(lián),一般將其存放在HBase里面,對(duì)于DIM層比價(jià)復(fù)雜,需要綜合考慮對(duì)于數(shù)據(jù)落地的要求以及具體的查詢(xún)引擎來(lái)選擇不同的存儲(chǔ)方式。對(duì)于常見(jiàn)的指標(biāo)匯總模型直接放在MySQL里面,維度比較多的、寫(xiě)入更新比較大的模型會(huì)放在HBase里面,還有明細(xì)數(shù)據(jù)需要做一些多維分析或者關(guān)聯(lián)會(huì)將其存儲(chǔ)在Greenplum里面,還有一種是維度比較多、需要做排序、查詢(xún)要求比較高的,如活動(dòng)期間用戶(hù)的銷(xiāo)售列表等大列表直接存儲(chǔ)在Redis里面。 性能優(yōu)化方面,在計(jì)算中采用很多維度關(guān)聯(lián),如果每一次維度關(guān)聯(lián)都從HBase中調(diào)用性能受限,因此將維度數(shù)據(jù)在本地task進(jìn)行一次緩存。聚合去重用一些精度去重算法,如Hyperloglog,既能保證在一個(gè)可接受的數(shù)據(jù)統(tǒng)計(jì)誤差,又能比較好的優(yōu)化存儲(chǔ)。存儲(chǔ)方面主要針對(duì)MySQL和Greenplum兩種場(chǎng)景,在大數(shù)據(jù)場(chǎng)景下MySQL寫(xiě)入壓力比較高,在寫(xiě)入之前做一個(gè)窗口預(yù)聚合,實(shí)現(xiàn)延遲和負(fù)載均衡,較少M(fèi)ySQL的寫(xiě)入壓力。對(duì)于明細(xì)數(shù)據(jù)寫(xiě)入Greenplum,明細(xì)數(shù)據(jù)不適合高并發(fā)寫(xiě)入,因此會(huì)對(duì)要寫(xiě)入的表依據(jù)主鍵做哈希,定位要錄入的segment,直接到Slave節(jié)點(diǎn),批量寫(xiě)入數(shù)據(jù),這樣也能有效提高寫(xiě)入的存儲(chǔ)量。 3、數(shù)據(jù)質(zhì)量 數(shù)據(jù)質(zhì)量分為兩個(gè)方面來(lái)介紹,數(shù)據(jù)一致性和數(shù)據(jù)監(jiān)控。 數(shù)據(jù)一致性主要針對(duì)實(shí)時(shí)與離線(xiàn)的數(shù)據(jù)一致性,同一個(gè)指標(biāo)實(shí)時(shí)與離線(xiàn)都會(huì)產(chǎn)出。這兩者一致性分為四個(gè)方面: 第一,建模方法與分層基本統(tǒng)一,建模基于維度建模,分層也是業(yè)內(nèi)通用方法; 第二,業(yè)務(wù)上主題域和模型設(shè)計(jì)同步; 第三,數(shù)據(jù)接入與源數(shù)據(jù)統(tǒng)一; 最后,數(shù)據(jù)產(chǎn)出方面,指標(biāo)定義和接口都是統(tǒng)一輸出。 DWD層做到主題域與模型同步,按照業(yè)務(wù)過(guò)程來(lái)設(shè)計(jì)模型,這種方法對(duì)于實(shí)時(shí)和離線(xiàn)都是統(tǒng)一的。以交易域?yàn)槔?,在?shí)時(shí)和離線(xiàn)都有訂單、訂單明細(xì)、組合裝的交易明細(xì),還有加購(gòu)數(shù)據(jù)模型,由于開(kāi)發(fā)成本原因?qū)崟r(shí)模型大都是離線(xiàn)模型的子集。在DM層會(huì)統(tǒng)一定義指標(biāo)和模型定義的方法,規(guī)范對(duì)于實(shí)時(shí)和離線(xiàn)都是適用的,定義模型會(huì)指定相應(yīng)的指標(biāo)和維度,指標(biāo)通常是派生指標(biāo),通過(guò)原子指標(biāo)+時(shí)間維度+修飾詞完成派生指標(biāo)的定義,再經(jīng)過(guò)定義維度形成模型。 有了模型定義規(guī)范具體落地,如果要定義當(dāng)日主站PC端銷(xiāo)售,首先定義原子指標(biāo)流水,時(shí)間維度今天,端是PC,然后定義派生指標(biāo),有了派生指標(biāo)接著定義模型,定義為每天商品銷(xiāo)售實(shí)時(shí)情況,做一個(gè)實(shí)時(shí)與離線(xiàn)的標(biāo)記,選擇其存儲(chǔ),維度選擇一個(gè)是時(shí)間維度、一個(gè)是商品維度,然后加入先前的派生指標(biāo),最后生成模型。不同模型知識(shí)實(shí)時(shí)和離線(xiàn)標(biāo)記,調(diào)用都是基于同一套接口來(lái)調(diào)用。 數(shù)據(jù)監(jiān)控涉及兩個(gè)方面,一個(gè)是數(shù)據(jù)平臺(tái)監(jiān)控。主要是對(duì)任務(wù)失敗情況監(jiān)控、異常日志監(jiān)控、任務(wù)失敗是RPS異常監(jiān)控。還有任務(wù)本身運(yùn)行正常,但是數(shù)據(jù)已經(jīng)處理不過(guò)來(lái),由于Flink機(jī)制,數(shù)據(jù)擠壓到消費(fèi)管理,通過(guò)對(duì)Kafka數(shù)據(jù)延遲監(jiān)控能夠及時(shí)發(fā)現(xiàn)問(wèn)題。將問(wèn)題通過(guò)監(jiān)控發(fā)現(xiàn),利用值班流程規(guī)范將問(wèn)題及時(shí)發(fā)現(xiàn)和處理,及時(shí)通報(bào)和定期進(jìn)行修復(fù),來(lái)提高整個(gè)數(shù)據(jù)質(zhì)量。 為了配合數(shù)據(jù)監(jiān)控,正在做實(shí)時(shí)數(shù)據(jù)血緣。主要是梳理實(shí)時(shí)數(shù)倉(cāng)中數(shù)據(jù)依賴(lài)關(guān)系,以及實(shí)時(shí)任務(wù)的依賴(lài)關(guān)系,從底層ODS到DIM再到DM,以及DM層被哪些模型用到,將整個(gè)鏈度串聯(lián)起來(lái)。這樣的好處是: (1)數(shù)據(jù)/任務(wù)主動(dòng)調(diào)整可以周知關(guān)聯(lián)的下游; (2)任務(wù)異常及時(shí)判斷影響范圍,通知產(chǎn)品和業(yè)務(wù)方; (3)指標(biāo)異常時(shí)借助血緣定位問(wèn)題。 4、應(yīng)用場(chǎng)景 實(shí)時(shí)數(shù)倉(cāng)應(yīng)用場(chǎng)景分為三類(lèi):數(shù)據(jù)產(chǎn)品、線(xiàn)上運(yùn)營(yíng)活動(dòng)、業(yè)務(wù)后臺(tái)。在線(xiàn)模型數(shù)有84個(gè),歷史總模型數(shù)為110+,大部分?jǐn)?shù)據(jù)延遲都在10s以?xún)?nèi),對(duì)于數(shù)據(jù)大屏這種對(duì)延遲要求比較高數(shù)據(jù)延遲在毫秒級(jí)。 數(shù)據(jù)大屏是最常用的實(shí)時(shí)數(shù)據(jù)應(yīng)用場(chǎng)景,有針對(duì)客服業(yè)務(wù)大屏,如大麥-商品數(shù)據(jù)運(yùn)營(yíng)平臺(tái)、神相-流量分析平臺(tái)、刑天-推廣渠道管理系統(tǒng)。第二個(gè)是線(xiàn)上運(yùn)營(yíng)活動(dòng),如熱銷(xiāo)商品榜單、活動(dòng)用戶(hù)消費(fèi)排行、資源位排序轉(zhuǎn)化策略,業(yè)務(wù)后臺(tái)倉(cāng)配產(chǎn)能監(jiān)控、物流時(shí)效監(jiān)控、庫(kù)存預(yù)警、商品變更通知。 5、展望 未來(lái)展望從三個(gè)方面: 第一,性能方面。模型用MySQL效率不高,后期遷移到ES上;維度表落地到Redis上進(jìn)一步提高吞吐量。 第二,開(kāi)發(fā)效率。開(kāi)發(fā)是SQL和API兩種并存,開(kāi)發(fā)效率不高,后期往SQL遷移,由于SQL本身局限,進(jìn)行UDF擴(kuò)展。 第三,數(shù)據(jù)質(zhì)量。目前主要是側(cè)面輔助決策,希望對(duì)舒適數(shù)據(jù)準(zhǔn)確性校驗(yàn)實(shí)現(xiàn)比較通用的規(guī)范,開(kāi)發(fā)一些工具完成這些工作。 PPT獲取方式 |
|