導讀:美團外賣資料倉儲主要是收集各種使用者終端業務、行為資料,通過統一口徑加工處理,通過多種資料服務支撐主題報表、資料分析等多種方式的應用。資料組作為資料基礎部門,支援使用者端、商家端、銷售、廣告、演演算法等各個團隊的資料需求。本文主要介紹美團外賣離線數倉的歷史發展歷程,在發展過程中碰到的痛點問題,以及針對痛點做的一系列優化解決方案。01業務介紹
首先介紹下美團外賣的業務場景, 核心交易鏈路為:使用者可以通過美團的各種使用者終端(包括美團外賣的APP或者美團 APP、QQ/微信等)下單,然後商家接單、騎手配送,三個階段完成一筆交易。這一系列交易過程,由包括使用者端、商家端、配送平臺、資料組、廣告組等各個系統協同完成。
這裡主要介紹外賣資料組在整個業務中角色。外賣資料組主要是:
1. 整體架構介紹
美團外賣整體分為四層:資料來源層、資料加工層、資料服務層、資料應用層。
資料來源層:包含接入的原始資料,包括使用者端紀錄檔、伺服器端紀錄檔、業務庫、集團資料、外部資料等。
資料加工層:使用 Spark、Hive 構建離線數倉、使用 Storm、 Flink 實時數倉。在數倉之上針對服務物件建設各種資料市集,比如:
資料服務層:主要包括儲存媒介的使用和資料服務的方式。
資料應用層:主要包括主題報表、自助取數工具、增值產品、資料分析等支撐業務開展,同時依賴公司平臺提供的一些工具建設整體資料應用。
2. ETL on Spark
我們離線計算從 17 年開始從 Hive 遷移到 Spark, 目前大部分任務已經遷移到 Spark 上執行,任務遷移後,相比之前使用 Hive 整體資源節省超過 20%。相比之下 Spark 的主要優勢是:
這裡簡單介紹寫 Spark Sql 的任務解析流程:使用者端提交任務後,通過 Sql 解析先生成語法樹,然後從 Catalog 獲取後設資料資訊,通過分析得到邏輯執行計劃,進行優化器規則進行邏輯執行的優化,最後轉成物理執行計劃提交到 spark 叢集執行。
02數倉建設
1. 資料倉儲V1.0
2016 年之前。外賣資料組的情況是:團隊不大,資料量不多,但是市場競品較多(餓了麼、百度等),競爭激烈, 因此當時資料組的目標是:快速響應業務需求,同時做到靈活多變,支撐業務業務決策,基於這種業務背景和實現目標,當時數倉架構設計如圖所示主要分了四層,分別是:ODS層/明細層/聚合層/主題層/應用層(具體如圖示)。
隨著資料量、業務複雜度與團隊規模的增長, 為更好完成業務需求資料組團隊按照應用做拆分,比如面向總部的總部團隊、面向城市業務的城市團隊,各個團隊都做一份自己的明細資料、指標和主題寬表資料,指標和主題寬表很多出現重疊的情況,這時候就像是」煙囪式「開發。這在團隊規模較小時,大家相互瞭解對方做的事情,基本不會有問題;但是在團隊規模增長到比較大的時候,多團隊「煙囪式」獨立作戰也暴露出了這種架構的問題,主要是:
2. 資料倉儲V2.0
針對上述問題,資料組做了架構的升級,就是資料倉儲V2.0版本。此次升級優化的目標主要是:
完成這個目標的思路如下三個方面:
① 分工標準:
之前面向不同應用建立不同團隊完全縱向切分,會導致可以公用的部分明細資料重複開發。為改變這種情況將資料團隊改為:資料應用組和資料建模組。各組職責如下:
② 分層標準:
在原有分層的基礎上,再次明確各層的職責,比如:明細層用來還原業務過程,輕度彙總曾用來識別分析物件;同時資料加工時考慮資料的共性、個性、時效性、穩定性四個方面的因素,基於以上原則明確數倉各層達到資料本身和應用需求的解耦的目標。具體各層細節在文章接下來的內容會展開來講。
③ 主題標準:
根據數倉每層的特性使用不同的主題劃分方式,總體原則是:主題內部高內聚、不同主題間低耦合。主要有:明細層按照業務過程劃分主題,彙總層按照「實體+活動」劃分不同分析主題,應用層根據應用需求劃分不同應用主題。
2.1 數倉規範
① 資料倉儲建模規範
根據前述三個方面的思路,將數倉分為以下幾個層次:
其中 ODS/IDL/CDL,以及部分 MDL 集市由資料基建組來做,另外部分資料市集以及 ADL 應用層由資料應用組支撐,分工標準是涉及一些公共的資料市集由資料基建組來完成;資料應用組會圍繞應用建設應用資料市集,如流量集市、城市經營集市。
② 資料來源層
整體建設思路:從資料來源落地到 Hive 表,同時與資料來源保持一致,儘量還原業務。主要由四類資料來源:業務庫資料、流量紀錄檔、集團資料、三方資料。
③ 資料整合層
資料整合層主要是明細資料,與上一層資料來源層是有對應關係的。資料整合表的整體建設思路為:
如圖中範例為提單表建設過程。
④ 資料元件層
資料元件層,主要建設多維明細模型、輕度彙總模型。總體建設思路與建設原則為:
建設思路:
建設原則:
資料元件層生成的指標主要是原子指標,原子指標形成資料元件,方便下游的集市層以及應用層拼接資料表。
多維明細模型:
以商家資訊表建設過程為例:
以上資訊就形成了一個由商家主鍵和商家多維資訊組成的商家實體的多維明細模型。
輕度彙總模型:
以商家交易表假設過程為例:
彙總商家粒度、交易額等原子指標最終建立商家交易表。
⑤ 資料市集層
建設思路:
建立寬表模型和彙總模型。兩者區別為寬表模型是唯一主鍵,基於主鍵拼接各種資訊;彙總模型的主鍵型別為聯合主鍵,根據公共維度關聯生成派生指標,豐富資訊。
⑥ 資料應用層
建設思路:根據應用場景選擇合適的查詢引擎
選型考慮因素:OLAP 引擎選型考慮以下 8 個方面的因素:
技術選型:早期主要使用 Kylin ,近期部分應用開始遷移 Doris。
模型:根據不同 OLAP 引擎使用不同資料模型來支援資料應用。基於 Kylin 引擎會使用星型模型的方式構建資料模型,在 Doris 支援聚合模型,唯一主鍵以及冗餘模型。
2.2 數倉 V2.0 的缺點
前面幾小節對數倉 2.0 做了詳細的介紹,在數倉 2.0 版本的建設過程中我們也遇到了一些問題。前面有提到資料整合層與元件層由資料基建組來統一運維,資料應用層是由資料應用組來運維,這樣導致雖然在整合層和元件做了收斂但是在應用層和集市層卻產生了膨脹,缺乏管理。
面對這個問題,我們在 2019 年對數倉進行了新的迭代,即數倉 V3.0,下面將對此做詳細介紹。
3. 資料倉儲V3.0
總體願景:數倉 3.0 優化思路主要是使用建模工具替代人工開發。
建模工具:分為基礎的建模工具和應用層建模工具。
通過整套工具的使得資料元件越來越完善,應用建模越來越簡單,以上就是數倉 3.0 的整體思路。
03資料治理
1. 資料開發流程
先說下我們資料開發流程,資料開發流程主要分為四個階段:需求分析、技術方案設計、資料開發、報表開發&介面開發,具體內容如下:
在整個資料開發流程中,我們遵循的整體思路是:
即資料符合標準規範,同時將標準規範落地到系統裡,最後系統要和周邊應用打通,形成一體。下面對各個思路做詳細的描述。
① 資料標準化
在資料標準化這塊,資料產品團隊、資料開發團隊、資料分析團隊聯合建立了資料標準化委員會。資料標準委員會制定了《指標標準規範》、《維度標準規範》以及一些新增指標、維度的流程等一系列規範標準,這樣做的好處是:指標維度管理有據可依,指標維度管理有組織保障,保障各業務方指標維度口徑清晰統一。
② 標準系統化
明確了資料標準各項規範,需要將這些標準化規範落地到系統,就是我們的資料治理平臺,我們的資料治理平臺由自建系統 + 集團資料服務構成。這裡面主要有四層:資料生產工具、集團基礎平臺、後設資料層、資料服務層。
圖片右邊展示了我們的後設資料模型,從下而上,我們首先維護詞根組成的詞庫,同時詞根、詞庫組成我們的指標和維度,其中維度分為維表和碼錶,指標在確保唯一性的前提下劃分業務過程,同時區分原子指標、派生指標、計算指標;然後由維度和指標拼接成欄位、欄位組成表,表再和業務主題、業務過程相關聯,識別出實體、行為,區分事實表、維度表同時確定表所在的層級,最後由一張張的表組成我們的資料模型,整個過程就是我們的後設資料模型。
③ 系統一體化
有了前面的資料資訊之後,我們和下游對接就比較方便。使用到資料治理平臺的資料下游有:
通過與各個下游不同形式的對接,資料治理平臺完成了整個下游資料應用的聯通,以及支援資料使用與生產,形成了一體化的系統。
2. 資源優化
資源優化方面,在美團會把核算單元分成若干個租戶 ,然後把資源分配給各個租戶,在同一個租戶裡各個專案組協調分割分配到資源,專案組由任務和資料組成。
我們把租戶與對應主題進行掛靠,這樣就可讓租戶有對應的介面人管理,比如把外賣核算單元分為:數倉租戶、廣告租戶、演演算法租戶以及其他的業務租戶,讓每個租戶對應一個介面人,與介面人對接資源優化方案、規則,最後由介面人推動。
我們的優化規則主要分為三個方向:
有了優化規則,針對規則的運營監控流程為:首先對賬單分析,賬單主要有離線/實時計算資源、儲存資源、ODS 資料收集使用的資源、紀錄檔中心所使用的資源, 分析帳單後定義運營規則並將規則落地到資料運維平臺,由資料運維平臺將任務推播到相關責任人,責任人收到通知後,在資料資產中心做相關處理,同時資料運維平臺會做成本監控,對超出配額&預算異常進行報警。
這樣我們通過建立統一規則並將規則分發到不同租戶落地執行,完成資料資源優化的目標。
3. 資料安全
資料安全方面主要是對資料脫敏,資料保密等級的設定 (C1~C4),資料申請做許可權控制,審計資料使用的方式,我們分三個階段完成資料安全的治理:
04未來規劃
1. 未來規劃思考
最後介紹下,我們對未來的規劃,對未來規劃的思考主要是在業務和技術兩個方面:
這裡面資料價值的具體體現,總結為以下幾點:
2. 未來規劃實施
針對對未來規劃的思考,我們具體實施措施計劃是:與集團基礎平臺工具共用共建,在資料應用方面更好做到資料賦能業務,然後就是具體的資料建設、資料管理。
資料建設:
資料建設主要圍繞以下幾個方面:
資料管理:
通過完善資料標準規範,並將規範落地到工具以及增強資料治理,另外通過演演算法的手段發現資料裡隱藏的問題完成資料資料治理。這主要需要我們組織能力建設、標準規範的統一、完善資料治理平臺與資料運營機制、探索智慧資料治理,最終達到資料管理的規範化、系統化、智慧化的目的。
-------------------------------------------
個性簽名:獨學而無友,則孤陋而寡聞。做一個靈魂有趣的人!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個「推薦」哦,博主在此感謝!
萬水千山總是情,打賞一分行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主,哈哈哈(っ•?ω•?)っ???!