網易有道成人教育數倉建設實踐

qing_yun發表於2022-08-23

導讀:

隨著有道旗下網易雲課堂、中國大學mooc產品的迅速發展,對資料的需求日益增多,在提高資料服務質量和資料使用效率、降低資料使用成本、資料賦能業務的背景下,我們從0到1建設成人教育資料倉儲。

1、整體架構

  • 資料來源:資料主要來自Mysql、ES、DDB的業務資料,以及kafka的埋點日誌資料;

  • 資料處理層:基於有數大資料平臺的儲存、計算能力之上建設資料倉儲;

  • 查詢層:查詢層主要為應用提供即席查詢、olap計算和儲存能力,根據具體的業務需求選擇presto、doris、es;

  • 應用服務:目前資料倉儲支撐了有數BI報表、個性化推薦、市場營銷、資料分析、使用者畫像、使用者增長等資料應用。

2、資料倉儲建設過程

2.1 業務調研

業務調研需要從自上而下和自上而下兩個方向去執行:

  • 自上而下:根據已有的報表需求和業務需求梳理這些資料的原始資料來源、資料總量和增量、結構、計算邏輯和資料及時性等。

  • 自下而上:現有的報表和需求有時候並不能覆蓋所有業務過程,需要從業務過程調研原始資料,線上的業務過程會產生哪些資料。

自上而下和自上而下雙管齊下是為了更全面調研業務系統的資料。避免出現基於少量的業務調研設計的數倉架構和規範不滿足後面業務的擴充套件,影響數倉的穩定性。

2.2 架構設計

平臺架構:

平臺元件技術選型及架構設計,根據業務調研結果選型包括計算引擎、儲存、排程系統等元件。目前有數大資料平臺基本滿足離線數倉的架構需求。

數倉分層架構:

  • ODS層 :資料操作層,儲存源資料最原始資料;

  • DWD層:透過清洗、整合ODS層資料生成的最原子粒度的事實表,主要儲存原子指標資料;

  • DIM層 :儲存描述維度屬性的維度表,維度表多用於與事實表關聯彙總查詢;

  • DWS層:根據需求對原子指標進行週期+修飾詞(維度屬性)聚合彙總的輕度彙總層;

  • ADS層 :面向主題應用的報表及服務結果層。

數倉匯流排矩陣:

劃分資料域,構建業務過程與維度關係矩陣,匯流排矩陣中行表示業務過程,列表示維度,透過匯流排矩陣梳理業務過程和維度關係,是模型設計過程的基本工具,以此來保證維度跨多業務過程的一致性,以及防止在事實表設計時遺漏關聯維度。

2.3 模型設計

整個數倉是按照kimball的維度建模方式建設,設計步驟如下:

(1)選擇業務過程

選擇業務活動行為的過程,如:下單、支付、看影片。

(2)宣告粒度

粒度即事實表中每行資料代表什麼,明細表中應宣告業務過程最細的粒度,如:每個課程的訂單記錄,支付的每一筆錢記錄,每次開啟影片的觀看記錄。

(3)確定維度

維度是用來描述業務過程發生的環境實體,如:誰在什麼時候什麼地方以何種方式下單。

(4)確定事實

確定業務過程中的度量,即原子指標,如:下單金額、支付金額、觀看時間。

(5)冗餘維度

冗餘常用維度資訊至事實表中,提高模型使用效率,冗餘的過程中應儘量使用已經開發好的維表,保證維度屬性的邏輯一致性。

透過上面的步驟我們大概能設計出圍繞一個業務過程的星型模型,當多個星型模型透過事實表或者維度表相互連線時,就形成了數倉中常見的事實星座模型。

2.4 模型開發

2.4.1 開發原則

(1)高內聚低耦合

將業務相近或者相關的資料、粒度相同資料設計為一個邏輯或者物理模型;將高機率同時訪問的資料放在一起,將低機率同時訪問的資料分開儲存。

(2)核心模型與擴充套件模型分離

在設計明細表和維度表的時候,採用垂直切分的方式,將常用欄位保留在核心模型,將一些大欄位、個性化或者少量應用的欄位剝離到擴充套件模型,常用雜項維度的方式,保證核心模型的簡潔

(3)公共處理邏輯下沉以及單一

將業務資料處理邏輯下沉至明細層進行處理,不暴露給應用層,並保證處理邏輯單一存在。

(4)適當冗餘

針對常用維度屬性冗餘在明細層和彙總層,提高開發效率。

(5)資料可回滾

處理邏輯不變,全量處理在不同時間多次執行資料的結果需要確定不變,增量處理根據輸入時間變化可回刷歷史資料。

2.4.2 開發規範

  • 原則上層次呼叫關係為ODS>DWD>DWS>ADS,部分需要針對明細層的需求或者不穩定的業務場景可遵循ODS>DWD>ADS。禁止反向依賴。比如DWS依賴ADS,造成任務深度多大,相互依賴等問題;

  • ODS層不能被應用層直接呼叫,如不確定資料處理邏輯的可先在明細層建立檢視,透過檢視訪問;

  • 多個計算任務輸出至一個表時,需要建立一個依賴這多個任務的虛擬節點進行管理;

  • DWS層進行粗粒度彙總時,優先呼叫已經產出DWS較細粒度彙總,可避免直接從明細層計算,提高計算效率;

  • 一個計算任務只能輸出至一個表;

  • 一個計算任務中間使用的臨時表不得被其他任務使用;

  • 建表必須對欄位和表描述進行中文描述;

  • 指標類的欄位空值用零填充,維度屬性值為空的用-99(未知)填充。

2.4.3 表命名規範

  • ODS 層 :ods_{源庫標識}_{源庫表名}_{週期儲存方式}

  • DIM 層 :dim_{業務/pub}_{維度定義}_{自定義命名}_{週期儲存方式}

  • DWD 層:dwd_{業務/pub}_{資料域}_{業務過程縮寫}_[自定義命名]_{週期儲存方式}

  • DWS 層:dws_{業務/pub}_{資料域}_{自定義命名}_{時間粒度}_{週期儲存方式}

  • ADS 層:ads_{業務/pub}_{需求模組名}_{自定義命名}_{週期儲存方式}

  • 重新整理週期縮寫:h:小時、d:天、m:月、y:年、rt實時

  • 分割槽儲存:f:全量、i增量

  • 指令碼內臨時表命名規範:{project_name}.tmp_{產出表表名}_{n}。

2.4.4 測試與上線

在模型開發完成後測試資料結果的準確性、完整性、一致性和及時性,透過探查指標、資料量、維度屬性分佈,模型之間關聯情況,任務執行效率等方式測試。上線後設定模型基線,配置資料質量監控。

3、未來展望

目前有道成人教育離線資料倉儲已經用於各個資料應用場景,接下來的重點工作則是對數倉長期的資料治理工作,其中重點會放在資料規範方面。由於業務對實時的需求日益增多,目前也有嘗試使用sloth平臺開發實時數倉,未來會往流批一體方向發展。

作者簡介:吳建,網易有道資深大資料開發工程師。7年大資料相關工作經驗,涉及電商、金融、政務、教育等領域。深度參與多個資料中臺專案從0到1的建設。

來自 “ 網易有數 ”, 原文作者:吳建;原文連結:https://mp.weixin.qq.com/s/Nq5jRCeJbF70kp7EsTLslw,如有侵權,請聯絡管理員刪除。

相關文章