面對(duì)爆炸式增長的數(shù)據(jù),如何建設(shè)高效的數(shù)據(jù)模型和體系,對(duì)這些數(shù)據(jù)進(jìn)行有序和有結(jié)構(gòu)地分類組織和存儲(chǔ),避免重復(fù)建設(shè)和數(shù)據(jù)不一致性,保證數(shù)據(jù)的規(guī)范性,一直是大數(shù)據(jù)系統(tǒng)建設(shè)不斷追求的方向。
OneData即是阿里巴巴內(nèi)部進(jìn)行數(shù)據(jù)整合及管理的方法體系和工具。阿里巴巴的大數(shù)據(jù)工程師在這一體系下,構(gòu)建統(tǒng)一、規(guī)范、可共享的全域數(shù)據(jù)體系,避免數(shù)據(jù)的冗余和重復(fù)建設(shè),規(guī)避數(shù)據(jù)煙囪和不一致性,充分發(fā)揮阿里巴巴在大數(shù)據(jù)海量、多樣性方面的獨(dú)特優(yōu)勢(shì)。借助這一統(tǒng)一化數(shù)據(jù)整合及管理的方法體系,我們構(gòu)建了阿里巴巴的數(shù)據(jù)公共層,并可以幫助相似的大數(shù)據(jù)項(xiàng)目快速落地實(shí)現(xiàn)。下面重點(diǎn)介紹OneData體系和實(shí)施方法論。
1.定位及價(jià)值
阿里巴巴集團(tuán)大數(shù)據(jù)建設(shè)方法論的核心是:從業(yè)務(wù)架構(gòu)設(shè)計(jì)到模型設(shè)計(jì),從數(shù)據(jù)研發(fā)到數(shù)據(jù)服務(wù),做到數(shù)據(jù)可管理、可追溯、可規(guī)避重復(fù)建設(shè)。目前,阿里巴巴集團(tuán)數(shù)據(jù)公共層團(tuán)隊(duì)已把這套方法論沉淀為產(chǎn)品,以幫助數(shù)據(jù)PD、數(shù)據(jù)模型師和ETL工程師建設(shè)阿里的大數(shù)據(jù)。這一體系包含方法論以及相關(guān)產(chǎn)品。
建設(shè)統(tǒng)一的、規(guī)范化的數(shù)據(jù)接入層(ODS)和數(shù)據(jù)中間層(DWD和DWS),通過數(shù)據(jù)服務(wù)和數(shù)據(jù)產(chǎn)品,完成服務(wù)于阿里巴巴的大數(shù)據(jù)系統(tǒng)建設(shè),即數(shù)據(jù)公共層建設(shè)。提供標(biāo)準(zhǔn)化的(Standard)、共享的(Shared)、數(shù)據(jù)服務(wù)(Service)能力,降低數(shù)據(jù)互通成本,釋放計(jì)算、存儲(chǔ)、人力等資源,以消除業(yè)務(wù)和技術(shù)之痛。
2.體系架構(gòu)
體系架構(gòu)如圖。
業(yè)務(wù)板塊:由于阿里巴巴集團(tuán)業(yè)務(wù)生態(tài)龐大,所以根據(jù)業(yè)務(wù)的屬性劃分出幾個(gè)相對(duì)獨(dú)立的業(yè)務(wù)板塊,業(yè)務(wù)板塊之間的指標(biāo)或業(yè)務(wù)重疊性較小。如電商業(yè)務(wù)板塊涵蓋淘系、B2B系和AliExpress系等。
規(guī)范定義:阿里數(shù)據(jù)業(yè)務(wù)龐大,結(jié)合行業(yè)的數(shù)據(jù)倉庫建設(shè)經(jīng)驗(yàn)和阿里數(shù)據(jù)自身特點(diǎn),設(shè)計(jì)出的一套數(shù)據(jù)規(guī)范命名體系,規(guī)范定義將會(huì)被用在模型設(shè)計(jì)中。后面章節(jié)將會(huì)詳細(xì)說明。
模型設(shè)計(jì):以維度建模理論為基礎(chǔ),基于維度建模總線架構(gòu),構(gòu)建一致性的維度和事實(shí)(進(jìn)行規(guī)范定義)。同時(shí),在落地表模型時(shí),基于阿里自身業(yè)務(wù)特點(diǎn),設(shè)計(jì)出一套表規(guī)范命名體系。
3.模型設(shè)計(jì)
模型設(shè)計(jì)指導(dǎo)理論:阿里巴巴集團(tuán)數(shù)據(jù)公共層設(shè)計(jì)理念遵循維度建模思想,可參考Star Schema-The Complete Reference和The Data Warehouse Toolkit-The Definitive Guide to Dimensional Modeling。數(shù)據(jù)模型的維度設(shè)計(jì)主要以維度建模理論為基礎(chǔ),基于維度數(shù)據(jù)模型總線架構(gòu),構(gòu)建一致性的維度和事實(shí)。
模型層次:阿里巴巴的數(shù)據(jù)團(tuán)隊(duì)把表數(shù)據(jù)模型分為三層:操作數(shù)據(jù)層(ODS)、公共維度模型層(CDM)和應(yīng)用數(shù)據(jù)層(ADS),其中公共維度模型層包括明細(xì)數(shù)據(jù)層(DWD)和匯總數(shù)據(jù)層(DWS)。
操作數(shù)據(jù)層(ODS):把操作系統(tǒng)數(shù)據(jù)幾乎無處理地存放在數(shù)據(jù)倉庫系統(tǒng)中。
同步:結(jié)構(gòu)化數(shù)據(jù)增量或全量同步到MaxCompute。
結(jié)構(gòu)化:非結(jié)構(gòu)化(日志)結(jié)構(gòu)化處理并存儲(chǔ)到MaxCompute。
累積歷史、清洗:根據(jù)數(shù)據(jù)業(yè)務(wù)需求及稽核和審計(jì)要求保存歷史數(shù)據(jù)、清洗數(shù)據(jù)。
公共維度模型層(CDM):存放明細(xì)事實(shí)數(shù)據(jù)、維表數(shù)據(jù)及公共指標(biāo)匯總數(shù)據(jù),其中明細(xì)事實(shí)數(shù)據(jù)、維表數(shù)據(jù)一般根據(jù)ODS層數(shù)據(jù)加工生成;公共指標(biāo)匯總數(shù)據(jù)一般根據(jù)維表數(shù)據(jù)和明細(xì)事實(shí)數(shù)據(jù)加工生成。
CDM層又細(xì)分為DWD層和DWS層,分別是明細(xì)數(shù)據(jù)層和匯總數(shù)據(jù)層,采用維度模型方法作為理論基礎(chǔ),更多地采用一些維度退化手法,將維度退化至事實(shí)表中,減少事實(shí)表和維表的關(guān)聯(lián),提高明細(xì)數(shù)據(jù)表的易用性;同時(shí)在匯總數(shù)據(jù)層,加強(qiáng)指標(biāo)的維度退化,采取更多的寬表化手段構(gòu)建公共指標(biāo)數(shù)據(jù)層,提升公共指標(biāo)的復(fù)用性,減少重復(fù)加工。其主要功能如下。
組合相關(guān)和相似數(shù)據(jù):采用明細(xì)寬表,復(fù)用關(guān)聯(lián)計(jì)算,減少數(shù)據(jù)掃描。
公共指標(biāo)統(tǒng)一加工:基于OneData體系構(gòu)建命名規(guī)范、口徑一致和算法統(tǒng)一的統(tǒng)計(jì)指標(biāo),為上層數(shù)據(jù)產(chǎn)品、應(yīng)用和服務(wù)提供公共指標(biāo);建立邏輯匯總寬表。
建立一致性維度:建立一致的數(shù)據(jù)分析維表,降低數(shù)據(jù)計(jì)算口徑、算法不統(tǒng)一的風(fēng)險(xiǎn)。
應(yīng)用數(shù)據(jù)層(ADS):存放數(shù)據(jù)產(chǎn)品個(gè)性化的統(tǒng)計(jì)指標(biāo)數(shù)據(jù),根據(jù)CDM層與ODS層加工生成。
個(gè)性化指標(biāo)加工:不公用性、復(fù)雜性(指數(shù)型、比值型、排名型指標(biāo))。
基于應(yīng)用的數(shù)據(jù)組裝:大寬表集市、橫表轉(zhuǎn)縱表、趨勢(shì)指標(biāo)串。
阿里巴巴通過構(gòu)建全域的公共層數(shù)據(jù),極大地控制了數(shù)據(jù)規(guī)模的增長趨勢(shì),同時(shí)在整體的數(shù)據(jù)研發(fā)效率、成本節(jié)約、性能改進(jìn)方面都有不錯(cuò)的效果。
數(shù)據(jù)調(diào)用服務(wù)優(yōu)先使用公共維度模型層(CDM)數(shù)據(jù),當(dāng)公共層沒有數(shù)據(jù)時(shí),需評(píng)估是否需要?jiǎng)?chuàng)建公共層數(shù)據(jù),當(dāng)不需要建設(shè)公用的公共層時(shí),方可直接使用操作數(shù)據(jù)層(ODS)數(shù)據(jù)。應(yīng)用數(shù)據(jù)層(ADS)作為產(chǎn)品特有的個(gè)性化數(shù)據(jù)一般不對(duì)外提供數(shù)據(jù)服務(wù),但是ADS作為被服務(wù)方也需要遵守這個(gè)約定。
基本原則:
高內(nèi)聚和低耦合——一個(gè)邏輯或者物理模型由哪些記錄和字段組成,應(yīng)該遵循最基本的軟件設(shè)計(jì)方法論的高內(nèi)聚和低耦合原則。主要從數(shù)據(jù)業(yè)務(wù)特性和訪問特性兩個(gè)角度來考慮:將業(yè)務(wù)相近或者相關(guān)、粒度相同的數(shù)據(jù)設(shè)計(jì)為一個(gè)邏輯或者物理模型;將高概率同時(shí)訪問的數(shù)據(jù)放一起,將低概率同時(shí)訪問的數(shù)據(jù)分開存儲(chǔ);
核心模型與擴(kuò)展模型分離——建立核心模型與擴(kuò)展模型體系,核心模型包括的字段支持常用的核心業(yè)務(wù),擴(kuò)展模型包括的字段支持個(gè)性化或少量應(yīng)用的需要,不能讓擴(kuò)展模型的字段過度侵入核心模型,以免破壞核心模型的架構(gòu)簡潔性與可維護(hù)性。
公共處理邏輯下沉及單一——越是底層公用的處理邏輯越應(yīng)該在數(shù)據(jù)調(diào)度依賴的底層進(jìn)行封裝與實(shí)現(xiàn),不要讓公用的處理邏輯暴露給應(yīng)用層實(shí)現(xiàn),不要讓公共邏輯多處同時(shí)存在。
成本與性能平衡——適當(dāng)?shù)臄?shù)據(jù)冗余可換取查詢和刷新性能,不宜過度冗余與數(shù)據(jù)復(fù)制。
數(shù)據(jù)可回滾——處理邏輯不變,在不同時(shí)間多次運(yùn)行數(shù)據(jù)結(jié)果確定不變。
一致性——具有相同含義的字段在不同表中的命名必須相同,必須使用規(guī)范定義中的名稱。
命名清晰、可理解——表命名需清晰、一致,表名需易于消費(fèi)者理解和使用。
如何從具體的需求或項(xiàng)目轉(zhuǎn)換為可實(shí)施的解決方案,如何進(jìn)行需求分析、架構(gòu)設(shè)計(jì)、詳細(xì)模型設(shè)計(jì)等,則是模型實(shí)施過程中討論的內(nèi)容。