做者:郭華(付空)前端
數據倉庫也是公司數據發展到必定規模後必然會提供的一種基礎服務,數據倉庫的建設也是「數據智能」中必不可少的一環。本文將從數據倉庫的簡介、經歷了怎樣的發展、如何建設、架構演變、應用案例以及實時數倉與離線數倉的對比六個方面全面分享關於數倉的詳細內容。數據庫
數據倉庫是一個面向主題的(Subject Oriented)、集成的(Integrate)、相對穩定的(Non-Volatile)、反映歷史變化(Time Variant)的數據集合,用於支持管理決策。緩存
數據倉庫是伴隨着企業信息化發展起來的,在企業信息化的過程當中,隨着信息化工具的升級和新工具的應用,數據量變的愈來愈大,數據格式愈來愈多,決策要求愈來愈苛刻,數據倉庫技術也在不停的發展。
數據倉庫的趨勢:性能優化
數據倉庫有兩個環節:數據倉庫的構建與數據倉庫的應用。架構
早期數據倉庫構建主要指的是把企業的業務數據庫如 ERP、CRM、SCM 等數據按照決策分析的要求建模並彙總到數據倉庫引擎中,其應用以報表爲主,目的是支持管理層和業務人員決策(中長期策略型決策)。app
隨着業務和環境的發展,這兩方面都在發生着劇烈變化。運維
總結來看,對數據倉庫的需求能夠抽象成兩方面:實時產生結果、處理和保存大量異構數據。機器學習
注:這裏不討論數據湖技術。
從公司業務出發,是分析的宏觀領域,好比供應商主題、商品主題、客戶主題和倉庫主題工具
數據報表;數據立方體,上卷、下鑽、切片、旋轉等分析功能。性能
以事實表和維度表組成的星型數據模型
注:圖片來自 51 CTO
數據倉庫概念是 Inmon 於 1990 年提出並給出了完整的建設方法。隨着互聯網時代來臨,數據量暴增,開始使用大數據工具來替代經典數倉中的傳統工具。此時僅僅是工具的取代,架構上並無根本的區別,能夠把這個架構叫作離線大數據架構。
後來隨着業務實時性要求的不斷提升,人們開始在離線大數據架構基礎上加了一個加速層,使用流處理技術直接完成那些實時性要求較高的指標計算,這即是 Lambda 架構。
再後來,實時的業務愈來愈多,事件化的數據源也愈來愈多,實時處理從次要部分變成了主要部分,架構也作了相應調整,出現了以實時事件處理爲核心的 Kappa 架構。
數據源經過離線的方式導入到離線數倉中。下游應用根據業務需求選擇直接讀取 DM 或加一層數據服務,好比 MySQL 或 Redis。數據倉庫從模型層面分爲三層:
典型的數倉存儲是 HDFS/Hive,ETL 能夠是 MapReduce 腳本或 HiveSQL。
隨着大數據應用的發展,人們逐漸對系統的實時性提出了要求,爲了計算一些實時指標,就在原來離線數倉的基礎上增長了一個實時計算的鏈路,並對數據源作流式改造(即把數據發送到消息隊列),實時計算去訂閱消息隊列,直接完成指標增量的計算,推送到下游的數據服務中去,由數據服務層完成離線&實時結果的合併。
注:流處理計算的指標批處理依然計算,最終以批處理爲準,即每次批處理計算後會覆蓋流處理的結果。(這僅僅是流處理引擎不完善作的折中)
Lambda 架構問題:
Lambda 架構雖然知足了實時的需求,但帶來了更多的開發與運維工做,其架構背景是流處理引擎還不完善,流處理的結果只做爲臨時的、近似的值提供參考。後來隨着 Flink 等流處理引擎的出現,流處理技術很成熟了,這時爲了解決兩套代碼的問題,LickedIn 的 Jay Kreps 提出了 Kappa 架構。
Kappa 架構的從新處理過程:
從新處理是人們對 Kappa 架構最擔憂的點,但實際上並不複雜:
菜鳥倉配實時數據倉庫本案例參考自菜鳥倉配團隊的分享,涉及全局設計、數據模型、數據保障等幾個方面。
注:特別感謝緣橋同窗的無私分享。
總體設計以下圖,基於業務系統的數據,數據模型採用中間層的設計理念,建設倉配實時數倉;計算引擎,選擇更易用、性能表現更佳的實時計算做爲主要的計算引擎;數據服務,選擇天工數據服務中間件,避免直連數據庫,且基於天工能夠作到主備鏈路靈活配置秒級切換;數據應用,圍繞大促全鏈路,從活動計劃、活動備貨、活動直播、活動售後、活動覆盤五個維度,建設倉配大促數據體系。
不論是從計算成本,仍是從易用性,仍是從複用性,仍是從一致性等等,咱們都必須避免煙囪式的開發模式,而是以中間層的方式建設倉配實時數倉。與離線中間層基本一致,咱們將實時中間層分爲兩層。
實時計算訂閱業務數據消息隊列,而後經過數據清洗、多數據源 join、流式數據與離線維度信息等的組合,將一些相同粒度的業務系統、維表中的維度屬性所有關聯到一塊兒,增長數據易用性和複用性,獲得最終的實時明細數據。這部分數據有兩個分支,一部分直接落地到 ADS,供實時明細查詢使用,一部分再發送到消息隊列中,供下層計算使用;
以數據域+業務域的理念建設公共彙總層,與離線數倉不一樣的是,這裏彙總層分爲輕度彙總層和高度彙總層,並同時產出,輕度彙總層寫入 ADS,用於前端產品複雜的 olap 查詢場景,知足自助分析和產出報表的需求;高度彙總層寫入 Hbase,用於前端比較簡單的 kv 查詢場景,提高查詢性能,好比實時大屏等;
注:
阿里巴巴每一年都有雙十一等大促,大促期間流量與數據量都會暴增。實時系統要保證明時性,相對離線系統對數據量要更敏感,對穩定性要求更高。因此爲了應對這種場景,還須要在這種場景下作兩種準備:
菜鳥雙11「倉儲配送數據實時化」詳情瞭解~
在看過前面的敘述與菜鳥案例以後,咱們看一下實時數倉與離線數倉在幾方面的對比:
▼ Apache Flink 社區推薦 ▼
Apache Flink 及大數據領域頂級盛會 Flink Forward Asia 2019 重磅開啓,目前正在徵集議題,限量早鳥票優惠ing。瞭解 Flink Forward Asia 2019 的更多信息,請查看:
https://developer.aliyun.com/...
首屆 Apache Flink 極客挑戰賽重磅開啓,聚焦機器學習與性能優化兩大熱門領域,40萬獎金等你拿,加入挑戰請點擊: