- 產品
- 產品解決方案
- 行業解決方案
- 案例
- 數據資產入表
- 賦能中心
- 伙伴
- 關于
時間:2023-07-14來源:守宮瀏覽數:525次
導讀 場景。本文將分享嗶哩嗶哩數據服務中臺的建設實踐。
全文目錄:1. 數據服務中臺建設背景2. 數據服務中臺框架3. 數據服務中臺實踐方案4. 數據服務中臺成果&規劃
01、數據服務中臺建設背景
1.?數據獲取過程中的痛點
在分享數據服務中臺建設之前,想從兩個案例開始,從中可以感受傳統數據獲取過程中的一些痛點。

案例二:數據需求方B,需要獲取up主的收入數據,用于線上系統的展示。同樣,也是需要提需求給數據產品,數據產品也是需要與其一起定義指標口徑,確定好口徑之后把需求提給數倉同學。數倉同學拿到需求及口徑定義之后進行手工建模;建模完成后,與對應的業務系統開發進行溝通,因為對于數據量大小、性能要求、取數方式等不同,數據的出倉選型方案大不相同,所以需要與數據系統開發進行多次有效的溝通才能夠確定存儲選型。數據出倉完成后,系統開發需要手工編寫API,經過聯調測試發布到線上。
從這兩個案例中,可以總結出兩個問題:
一、成本高,主要體現消費鏈路長、溝通成本高,不同需求可能會并造成模型重復建設;
二、治理難,數據鏈路及血緣不清晰,上游數據發生了變更下游無法評估影響,另外,不同鏈路口徑難以保障。

弊端一:重復建設,包括重復計算、重復存儲,造成資源浪費,同時功能上的重復建設也會造成人力資源浪費。
弊端二:交付效率低,不同的系統、不同的開發同學對接不同的數據源,數據服務質量不可控,整個對接的標準也不夠統一。
2.一站式數據服務中臺建設
基于上述痛點,經過多次沉淀與總結,最終對數據服務中臺有了一個清洗的定位,即能夠一站式地完成數據的統一定義、統一生產和統一消費。

02、數據服務中臺框架
1.服務框架

2.核心流程

第一步:首先對指標進行定義,包括指標名稱、指標領域、指標口徑等信息;
第二步:構建數據模型,在平臺上通過托拉拽的方式構建指標維度模型,以及定義模型中字段與指標維度的關系,計算方法,更新周期等技術口徑;完成了前兩個步驟,基本實現了數倉開發同學對指標數據的定義與管理工作了。當有數據消費的需求時,則可以根據需求場景在平臺做自動數據加速。
第三步:加速數據模型,根據消費場景,選擇需求所需的指標維度信息,平臺自動實現了目標表的DDL、SQL邏輯的自動生成、調度依賴配置、告警等過程;
第四步:構建API,根據業務數據請求及返回要求,選擇數據源、定義字段的請求、返回參數屬性,主備鏈路信息等,測試完成后即可完成一個API的市場發布。在數據消費側,當業務有數據需求時,去 API 市場里面找到數據生產者已經生產好的API,申請權限就可以使用了。如果API市場里面沒有所需要的數據,就要走另外一條流程,提一個數據開發的需求給數據開發同學,然后數據開發同學增量地去構建一個數據結果到平臺中去。當業務開發同學申請完這個API的使用權限之后,平臺會授權給他一串密鑰以及資源的標識。業務開發只需對接一次服務網關,即可重復利用。把數據的生產與消費的開發流程解耦,數倉開發同學不用過多參與業務系統的開發過程,可以更加專注做指標的增量建設;對業務開發屏蔽了數據的加工處理過程,無需深入理解大數據知識,專注開發業務需求即可。
(1)模型構建

明細加速:實現把邏輯模型中的數據從冷引擎到熱引擎的鏡像復制,極大保留了模型的原始數據的業務特性,可以更好的支持對模型中不同的維度及指標做多維分析或者范圍查詢,在熱引擎中,加速數據的查詢效率。預計算加速:根據數據獲取需求,從邏輯模型中的明細數據進行預計算及處理,直接聚合到所需粒度的數據,并將數據寫入熱引擎中。由于數據已經預計算處理,在數據查詢時極大減少了引擎的計算,查詢效率更高,但也損失了如多維分析及維度下鉆查詢的靈活性。不同的場景有不同的加速方式及引擎選擇的組合,針對四種類型的場景,推薦的組合如下:
在線場景:預計算+kv存儲,一般應用于C端及B端的數據需求,有著極高的服務性能要求,且線上數據不會快速的變化,靈活度要求低。
準在線場景:預計算 + tidb/mysql,一般應用于活動或者運營系統后臺,服務性能要求不會同線上場景那么高,但同時要求支持范圍查詢,有一定的查詢靈活度;對于數據量較大的查詢場景,可以選擇分布式數據庫 Tidb,其他可以選擇Mysql。
OLAP場景:明細+ ClickHouse/Iceberg,一般應用于數據分析系統,需要對數據進行多維分析,所以需要明細加速。ClickHouse 作為一款OLAP分析引擎,比較適合作為目標引擎,如果考慮到成本因素,也可以使用湖倉一體技術Iceberg,數據無需出倉既可在倉內完成數據的加速,性能雖不及ClickHouse,但也可以達到秒級的響應,特別是在使用成本及查詢語法通用性上更有優勢。
離線場景:離線數據獲取,一般訪問原始hive數據源即可。
(2)API構建

數據查詢:

步驟1,一個查詢的DSL信息如下圖圖所示。解析的過程是把DSL信息與API配置進行匹配,并得出本次數據請求需要的模型。

步驟3,結果處理器是一個內存計算器,負責把子任務的查詢結果進行拼接、排序、分頁及格式轉換等,返回統一格式的數據結果,讓下游無感知數據的處理過程。
步驟3-1,翻譯模塊是把子任務的查詢信息翻譯成對應引擎可以識別的sql語法。AST是abstract syntax tree的縮寫,也就是抽象語法樹。翻譯模塊區別于引擎對執行SQL進行語法樹解析的過程,而是逆向從構建AST開始,并最終翻譯成SQL的過程。構建AST的算法如下圖所示:

步驟3-2,引擎層負責執行各個子任務的查詢SQL,系統適配了目前公司內部多種數據引擎,包括自研KV、TiDB、Mysql、ClickHouse、Iceberg等。除接入不同的引擎連接協議,在不同引擎的連接方式上也做了優化,如:mysql、tidb 由單次短連接改為連接池,減少連接的頻繁創建及銷毀帶來的開銷問題;自研KV多可用區連接,擴大在線服務可用的服務范圍;OLAP引擎如ClickHouse、Iceberg的超時自取消功能,減少服務占用及降低引擎壓力等。
03、數據服務中臺實踐方案
1.全鏈路管控
在數據服務中臺實踐中,最重要的是實現全鏈路管控,讓數據在服務化的過程中做到統一定義、統一生產、統一消費。

統一出口:口徑不易維護的另外的一個原因是定義與生產分離,出口不可控。我們打通了指標的定義及生產流程:模型的出倉可以自動化完成,出倉過程中的計算邏輯是基于指標平臺中的定義自動生成的,減少了人工的干預,避免定義與生產的不一致;其次,API的取數邏輯非人工定義,也是基于指標定義,自動翻譯取數邏輯及路由計算引擎,避免生產與消費過程中的不一致。通過定義與生產的打通,生產與消費的打通,數據流通過程中完全基于統一的定義,達到了最終的定義與消費的一致性。
全鏈路監控:數據從定義到生產到消費環節,有完整的監控鏈路,以此來確保口徑的持續一致性。指標一致性監控:維度建模的數倉中,同一個指標由于分析思路或者需求場景,最終生產此指標的模型可能是多個,那么就需要保障指標在不同模型間的口徑一致性。通過一致性對比或者閉環公式校驗等手段,發現指標口徑不一致,然后通過口徑變更、模型換綁等治理方法來持續保障指標口徑的一致;出倉一致性監控:出倉過程中數據集成工具保障了實時的一致性,這里需要保障的是,由于歷史數據變更導致的出倉前后數據不一致的問題;服務質量監控:從數據出口監控數據的質量情況,主要包括閾值監控,波動率監控等,發現質量問題,保障出口的最終口徑一致性。
2.降本增效
中臺的建設最終是要為企業降本增效的。過往中,不同業務線重復建設,垂直產品線煙囪式的開發,使得數據成為一個個孤島,雖能滿足單一業務場景,但是卻增加了各個業務線的合作成本。我們的建設思路是,首先將公共、通用的部分抽離出來,形成可復用服務,讓業務可以快速完成數據鏈路的搭建,減少業務重復造輪子,降低研發成本;其次,統一服務標準,通過快速復用已建設的數據鏈路搭建的能力,讓數據從定義-->生產-->消費的整個周期縮短,提升對接效率,為數據在不同部門間流轉創造可能。

提效: 數據構建提效:數據構建時,通過元數據的管理,自動化及半自動化的構建出模型及指標,提高了數據構建效率;另外構建出的數據資產是標準化的,消除了數據格式、生產、存儲等差異性,下游消費時不用關心底層的邏輯,提高了應用的效率。 服務使用提效:標準化的API,在系統對接時可以實現一次對接溝通,多次復用,提高了API的對接效率。
3.高可用建設

異地雙活:異地雙活的目的也就是容災,當某個地方服務出現了災難性故障,而服務仍然能正常提供服務。我們根據業務的部署情況,選擇距離業務較近的A、B兩地機房部署服務,正常情況下同機房的請求鏈路為主鏈路,當某地服務宕機,則會自動降級到另外一地的服務。
04、數據服務中臺成果&規劃
最后分享我們的數據服務中臺目前取得的成果,以及未來的建設規劃。



第一個是服務治理方向,根據服務等級、服務監控、數據鏈路的信息,讓服務能夠高質量、低成本、強有效地運行;
第二個方向是支持更多的場景,比如推動一些平臺類的產品接入,包括標簽平臺、AB 平臺的等能夠從服務中臺管理及使用數據;
第三是服務編排,我們希望服務能夠更加貼近于業務的需求,讓數據能夠做到即取即可用;第四是降級容災,希望能夠做到日常的災備演練、主備功能切換演練等;最后就是持續的降本增效,在大數據計算資源效率、存儲效率方面持續投入研發,向高效率、低成本更進一步。