隨著公司業務的逐步擴展,公司數據量隨之增大,老板、運營、產品等需要看很多數據報表,有T+1每天早上看,有實時的在報表平臺上每天看,所以需要有效管理自己的數據,來滿足多樣化的數據需求,所以如何建立起高效的數據體系,就是非常重要的問題。
一、背景
有些公司部門的數據組織非常凌亂,離線幾乎所有報表都是從底層數據直接計算得來,實時的則是一個報表一個任務,同事之間需求幾乎都是各做各的,幾乎沒有什么關聯,就導致了前一個人做的指標只有后一個需要,而后一個人又要重新計算一遍,嚴重降低工作效率。而需求方那邊需要趕時間,催的緊,而且有些需求中指標相同的,發現兩個人前后計算出來差異很大。
在數據規范方面,每個人都需要緊盯自己手里的事情,耗時耗力,若是有人請假或者離職,基本上他手上工作再怎么交接也是有很多遺漏。所以就需要建立一個統一的數據應用平臺,將離線和實時倉庫規范化,主要為了降低數據使用成本、規范組織數據和快速完成需求的目的。
接下來幾篇文章將介紹這幾年我在工作主要做的大數據體架構系,從離線數倉到實時數倉的架構設計,本節文章主要介紹工作期間設計數據平臺整體架構。
二、數據平臺整體架構
如圖所示,整體架構中一共分為5個部分,分別是數據同步部分,離線數倉、實時數據倉庫、元數據管理、數據監控,只有五部分完善化,才能做到數據高效同步、數據易于使用、數據問題及時發現,達到需求快速迭代和提高用戶提要的目的,接下來將簡要介紹模塊內容。
1、數據同步平臺
由于每天需要同步大量的數據,新數據源需要建立大量的數據表,也要滿足同步數據時能保證最大程度保持與數據源一致的情況,所以一個穩定、高效、減少維護成本與配置成本的數據同步工具顯得十分重要。所以在離線數據同步方面,主要設計原則圍繞簡單配置減少人工配置成本、自動修改目標結構減少期維護成本、分布式數據拉取降低數據同步時間、易于擴展增加未知數據源、自動數據預警第一時間發現問題等方面進行數據同步工具設計。
采集端的架構主要由離線和實時部分組成,離線部分主要針對數據庫進行同步,如mysql、mongo、ES、網盤數據、外部集群數據等高效數據采集。實時部分主要對埋點數據、數據庫日志等數據進行實時接入,來滿足上層數據模型以及需求需要。
在對比調研sqoop和Datax后,我們最終決定自己研發一套高靈活的數據同步工具。在配置過程中,只需指定需要的庫和表既可自動生成后續使用的目標表。同時在工程運行過程中,可自行探查數據源數據是否發生過變動,若發生變動則修改對應邊結構,發出預警。
目前該工具在團隊中已經廣泛使用,較之前數據同步開發時間減少90%以上,減少人工維護次數5000+次,發現業務庫數據問題400+次,支持mysql,mongo、es,網盤數據,集群數據拉取等.
實時數據同步方面,主要針對于埋點數據和數據庫日志數據,在數據流入的同時,會進行相應的實時數據清洗、去重、統一、離線落庫、分發,將數據進行統一整合,下游使用數據只要訂閱相應的數據即可使用實時數據。
2、離線數據倉庫
離線數據倉庫是數據平臺核心工具之一,主要為T+1數據報表做數據準備。離線數據倉庫在設計方面一共分為4個層次,分別是ods、dwd、dws、dw四個層次,其中ods和原始數據相同的數據結構,dwd層主要采用維度建模或DV模型的通用數據倉庫模型。
將公司的各條業務線用統一的數據模型進行數據組織,有效的屏蔽底層數據的變化對上層應用的影響是數據倉庫最核心部分,dws主要是通用寬表層,采用寬表的形式對數據進行組織,雖然違反了數據設計范式,增加了數據冗余,但提高查詢性能使用方便,也能更好的描述整個業務流程,同時方便dw層使用。
3、實時數據倉庫
實時數據倉庫也是數據平臺中最核心部分之一,主要為實時報表提供數據支撐。在設計方面數據組織采用和離線相似的數據組織結構,ods、dwd、dws、dw。實時數據倉庫亮點在于設計了一套自己的sql解析與執行引擎,將實時的數據開發變成sql化的開發,脫離了以往一個實時需求一套代碼的困境,也降低了使用者的門檻。
目前實時數據倉庫擁有sql解析與執行能力,同時也擁有跨不同數據源查詢與存儲能力,底層采用TIDB、redis、ES、HBASE等不同介質存儲數據。而數據存儲的原則則是不同的數據存儲在自己合適的數據庫中,如事實表存儲在tidb中,維表在redis、日志在ES等。在整體的自研的SQL引擎的加持下,用sql進行數據開發,提高了整個團隊的實時開發效率。
4、元數據管理
元數據是一個數倉體系中比較重要的部分,元數據被稱為數據的數據,我們使用元數據主要描述了哪些數據在數據倉庫中、數據倉庫數據組織形式,數據產生時間,ETL執行時間、數據命名、血緣等數據情況。可用元數據體系來約束指標命名、數倉邏輯架構、指導數據開發、指標問題監控、資源問題整合等工作。
有了元數據管理以后,數倉數據更加規范化,如字段名、表名等有了約束,可以做到一致性,ETL編寫更加規范、資源使用更加合理、調度時間更加合理、數據來源更加清晰,指標監控易于監控,數據主題邏輯更加清晰。
5、數據監控
目前為了保證數倉數據準確性,在缺乏合理的數據治理前提下,建設了數據監控體系,主要是為了保障整個數據系統的準確定、一致性、完整性和及時性。整個數據監控體系主要涵蓋2個方面——技術指標監控和業務指標監控,其中技術指標監控包含了平臺資源監控和ETL監控,如hdfs內存、存儲、小文件,任務監控,如執行時長、執行正確或錯誤。業務監控,如業務指標異常、業務庫數據量異常等任務監控。
以下是數據監控模塊主要設計,兼容了離線和實時兩部分,目前該套監控體系運行2年多,數據存儲由原來3個數據源擴展為7個數據源,只進行了最初一次迭代。同時發現了1000+次業務和技術問題,也為業務系統提供業務監控功能。