快手指標中臺建設實踐
一、背景介紹
1. 關于快手
快手是一個普惠的數字社區,在這里每個人都可以記錄生活、分享生活??焓滞ㄟ^短視頻和直播的形式成功構建了電商、商業化等多元化的業務生態系統。
截止到今年第一季度,根據公開財報數據,快手的平均日活躍用戶數(DAU)達到了 3.93 億,平均月活躍用戶數(MAU)達到了 6.97 億。在如此大的用戶規模背后,是快手強大的技術在支持,這其中也包括數據平臺部的技術。
2. 關于快手數據平臺部
快手數據平臺部的使命是打造高效且智能的自助式數據平臺工具,用于業務的分析決策提效。職責是提供從數據集成、加工,到分析全鏈路的智能數據開發、管理和分析的泛大數據平臺化能力,加速數據分析決策效率。
數據平臺部主要圍繞著基礎建設和數據能力這兩方面展開:
- 基礎建設:技術架構的底層是大數據的引擎層,在引擎層之上有一站式的數據采集以及數據開發的工具。通過這些工具,可以將數據匯總到大數據平臺上,再經過數據加工和融合打通,就形成了數據中臺一體化的數倉。在數倉之上,我們會去沉淀各種資產。這就是我們在基礎建設方面的工作。
- 數據能力:在基礎建設之上,我們構建了各種數據能力,以滿足各種場景下的數據分析需求,比如面向通用分析場景的數據分析能力等。
目前快手有著萬級別的集群規模,以及 EB 級別的數據規模。如此海量的數據,給我們大數據技術帶來了巨大的挑戰。
今天我們分享的指標中臺就是數據平臺部的核心平臺之一。
3. 指標相關介紹
在介紹我們的指標中臺之前,先來回顧一下指標相關的概念。在數據分析中,指標是衡量業務表現的重要工具。
以活躍用戶數為例,它是一個原子指標,代表用戶活躍度的基礎度量。這個指標可以進一步拆分為業務過程(用戶行為事件),對象實體(用戶),以及度量(用戶數)。
通過添加修飾詞,如“新增”,我們可以將指標限定在特定范疇,例如新增用戶。
此外,通過指定時間范圍(如“近 7 日”)和維度(如按城市),我們還可以構建派生指標,從而更細致地觀察數據的分布。
基于這些原子指標和派生指標就可以構建指標體系,它可以幫助業務進行更有效的管理和決策。然而,指標體系也是一把雙刃劍,如果使用得當,可以顯著提升業務效率;如果使用不當,則可能帶來額外的負擔。因此,正確理解和應用指標對于業務成功至關重要。
4. 快手指標中臺背景
在快手指標中臺建立之前,公司的數據倉庫擁有 10 萬量級的數據表,當時采用的是數倉直接對接應用系統的方式,這種煙囪式建設模式導致了數據管理和應用效率的問題。這種模式下,指標分散在 BI 系統、AB 系統和運營系統等不同應用平臺,缺乏統一管理,造成了資源浪費。主要帶來以下問題:
- 數據質量:由于指標管理不統一、指標口徑不統一,導致業務分析時難以對賬,需要大量時間排查原因。
- 研發效率:每個應用平臺的指標能力重復建設,嚴重浪費了研發資源,降低了研發效率。
為了解決以上問題,快手經過慎重考慮,決定建設一套企業級的指標中臺系統,通過將數據層和應用層進行解耦,來解決指標質量和研發效率的問題。
5. 如何構建企業級指標中臺
那么如何去構建企業級指標中臺呢?
我們首先對行業趨勢和業界常用方案進行了調研。
(1)行業趨勢
- Headless BI:Headless BI 采用“一處定義,多處使用”的理念,實現指標一經定義,即可在 BI 平臺、運營平臺等多處使用;其優勢在于將數據層與應用層解耦,通過統一的服務接口保證指標的服務質量;當然,其整體實現的技術成本和挑戰也比較高。
- 智能建模:基于表元信息抽取,利用算法和規則等技術手段自動構建表與表之間的關系,以減少人工建模的復雜性和成本。
(2)業界方案
- 指標驅動生產:基于已經定義好的指標元數據信息(派生指標、復合指標、加工口徑等),來設計指標的生產鏈路,也就是業界 NoETL 的思路;主要優點是通過控制生產過程來保證指標質量,落地比較徹底,適用于一般場景的指標數據加工和聚合,其缺點是應用場景比較單一,無法應對復雜業務場景;
- 指標驅動分析:主要面向數據消費場景,提供更靈活多樣的數據分析能力;而在數倉建設不做過多的限制,所以可能存在指標質量風險(當然該問題可以通過其他方法來解決),整體的實現復雜程度比較高。
指標驅動生產和指標驅動分析并非互斥,業界已有公司同時做生產方向和分析方向,并且取得不錯的效果。基于快手已有較為成熟的數倉體系,我們認為現階段基于指標來驅動分析的方案能更好地發揮數據價值。
6. 快手指標中臺解決方案
基于以上的考慮,我們采用了 Headless BI 的理念建設了快手指標中臺,通過實現指標的統一指標管理和統一指標服務,來解決指標質量和研發效率問題。
指標中臺在整個數據鏈路中起到了承上啟下的作用。
- 向下,通過對各種數據源進行統一接入,來保障指標口徑和數據質量,并且屏蔽了底層物理技術的實現細節,讓用戶只需感知指標維度層面的使用;
- 向上,通過統一的指標查詢服務,為上層應用提供穩定可靠的指標服務,從而保障指標質量。
在與應用方的合作過程中,主要采用兩種模式:
- 合作共建:一種是指標中臺與 BI 工具的深度合作,通過這種方式構建快手的 BI 體系,實現數據的深入分析和可視化;
- 開放生態:另一種是指標中臺結合開放 API,構建一個開放的生態,允許更廣泛的數據訪問和應用集成,從而促進數據的共享和創新。
通過這種綜合性的解決方案,能夠為企業提供強大的數據支持和靈活的分析能力,推動企業數據驅動的決策和業務增長。
整個指標中臺是圍繞著指標管理和指標服務兩部分來建設的,接下來將分別進行詳細介紹。
二、指標管理
1. 指標管理相關背景
首先來介紹指標管理。
在指標管理方面,主要問題是指標管理不統一和指標口徑不一致;指標管理不統一導致了指標多處管理、嚴重浪費成本等問題,指標口徑不一致導致了指標同義不同名、同名不同義等問題,比如同樣是支付訂單金額指標,有的業務方叫 GMV,有的業務方叫支付金額,這種同義不同名的現象給我們日常指標溝通和使用都帶來問題和困難。我們希望通過標準化流程對指標進行有效管理,協助業務提高指標管理效率,降低業務成本,從而提高業務決策效率。
2. 指標管理解決方案
那么如何才能有效管理指標呢?
我們的具體做法是采用流程+規范+管理工具的方式來構建指標管理模塊,主要分為以下部分:
- 指標標準化流程與規范:采用標準化的流程和規范來統一指標和維度信息的接入。
- 元數據管理:對接入的指標維度元數據進行統一管理。
- 模型管理:對指標維度等元數據進行數據建模,形成數據模型,將數據模型進行有效管理。
- 數據集管理:在元數據管理和模型管理的基礎上形成數據集管理,對外提供統一的服務。
下面來分別介紹以上步驟。
3. 指標標準化規范和流程
指標標準化規范和流程主要解決兩個問題:統一指標口徑、提高指標質量。在整個流程中的各個環節都需要制定并落實相關規范,具體如下:
- 業務口徑制定:在明確需求后,將制定業務口徑,確保指標的定義與業務目標一致,要落實數據規范和指標命名規范。
- 數據開發:根據業務口徑進入指標開發階段,要落實數據開發規范和數據模型規范,并且在平臺保證一致性規范。
- 指標服務提供:落實指標服務規范。
- 審批授權:為保證指標口徑的統一,我們會對各業務線進行梳理,每個業務線會有對應的數據域,數據域有數據管家對指標口徑進行審批和授權。
整體來講,我們是在關鍵流程中落實相關規范來保障數據開發質量,進而保障指標的質量。在整個流程中,需要多個團隊通力合作,才能確保指標的統一性和高質量。
4. 元數據/模型/數據集管理
在元數據管理方面,整體采取分層管理的方法來確保數據的有效組織和使用:
- 概念層(元數據管理):主要負責指標、維度、數據表以及綁定等元數據的統一管理。
- 邏輯層(模型管理):在元數據管理之上,我們面臨的第一個問題是原始錄入指標的元數據通常不能直接用于業務。例如,一個維度可能綁定多張維表,在指標服務時基于原始元數據計算維度應該從哪張維表取數是非常浪費資源的,所以需要進行數據建模,基于元數據重新梳理和構建數據關系,形成數據模型,進而提高指標使用時的查詢性能。
- 應用層(數據集管理):第二個問題是業務線可能有成千上萬的指標,用戶的一些使用場景只關注少量指標,但在使用時卻需要從大量指標中檢索特定指標,這無疑增加了用戶的理解成本和使用成本。為了解決這個問題,我們設計了數據集,即特定指標、維度和數據表的一個集合,從而縮小指標數據的范圍。用戶可以將關注的指標和維度圈選到一個數據集中,這樣在使用看板或報表時,可以直接使用數據集提供服務,而不需要從大量指標中逐一檢索。數據集也是我們對外提供服務的載體。
5. 數據建模
在元數據管理中,有一步非常關鍵,就是數據建模,這里單獨介紹一下數據建模。
數據建模是數據管理過程中非常關鍵的一步,它直接影響到后續數據的使用和分析。數據建模,即基于指標維度和數據表的關聯關系,實現從指標維度元數據到數據模型的轉換。具體做法是采用三步建模的方式:
(1)概念建模:在指標定義階段,定義指標、維度、數據表之間的關系。
(2)邏輯建模:邏輯建模是一個自動化的建模服務,包括模型發現、關聯字段、最佳路徑計算和模型索引的構建。
(3)物理建模:生成最終的數據模型,包括星型模型和雪花模型。
其中關鍵的建模步驟是邏輯建模過程。為了讓大家更好的理解邏輯建模過程,這里以一個例子來介紹:
- 模型發現:如上圖中的例子,在平臺上定義了一個指標(活躍設備數)和一個維度(省份 ID),指標綁定在事實表上,維度綁定在事實表和兩張維表上;首先會通過模型發現檢測到指標口徑以及指標和表的綁定關系的變化,一旦發現變化,就會自動觸發建模流程。
- 關聯字段:模型發現后,首先通過關聯字段(省份 ID 綁定的維表字段)進行模型的初步構建,在該例子中事實表和維表通過province_id 相關聯,而 province_id 會關聯兩個維表,即城市維表和省份維表。
- 最佳路徑計算:初步建模后,接下來對模型進行優化,即最佳路徑優化,主要遵循選粗表不選細表、選快表不選慢表的原則;在上述例子中,雖然省份維表和城市維表均滿足綁定要求,但省份維表比城市維度粒度更粗,在后續指標服務過程有更好的查詢性能,所以這一步會將城市維表裁剪掉,只留下省份維表。
- 數據模型:最終得到數據模型,記錄表與表之間的關系,以及一些附加信息(可累加性等信息)。
有了數據模型之后,就可以對外提供指標服務了。接下來將介紹指標服務部分。
三、指標服務
1. 指標服務相關背景
指標服務是數據架構中的重要組成部分,其核心功能是提供指標取數的能力。隨著業務的不斷發展,對指標服務的要求也在不斷提高,主要問題與挑戰如下:
- 需求多樣性:除普通計算能力外,業務需要高級計算和分析能力,如窗口函數計算、同比/環比分析等;
- 聯邦查詢:數據可能分布在不同的存儲系統中,如 ClickHouse、Hive 或 MySQL 等,傳統的解決方案是將數據同步到單一引擎,但這會給業務增加開發和存儲成本。所以業務對聯邦查詢的需求也愈發強烈;
- 查詢效率:不同存儲系統中的查詢效率存在差異,比如像 Hive 離線引擎查詢慢、ClickHouse Join 查詢性能慢,從而會影響業務的分析效率。
2. 指標服務解決方案
為了解決上述問題,我們將指標服務設計成以下三層:
- 統一分析語言層:提供豐富的語義表達能力,使用戶能夠定義復雜的計算和分析需求。
- 統一查詢引擎層:提供聯邦查詢能力,允許用戶跨引擎進行查詢,而無需關心底層物理存儲的復雜性。
- 指標加速層:提供指標查詢加速能力,優化查詢性能,解決查詢效率低下的問題。
3. 統一分析語言 OAX
統一分析語言(OAX)是一種以數據集為載體,面向分析場景的分析語言,包括五個要素:數據范圍、指標、維度、時間范圍和過濾條件。
為了大家更好地理解 OAX 語言,我們以一個例子來說明:比如要獲取 2022-2023 年廣東省各市的 GDP 總值及其在全省 GDP 中的占比。
- 不使用 OAX 語言:首先我們需要分別求出廣東省各市的 GDP 總值,然后計算廣東省的 GDP 總值,再把兩者計算求出占比,整個過程一般需要三個 SQL 來完成。
- 使用 OAX 語言:我們可以這樣操作,數據范圍是國民經濟數據集,指標為各市的 GDP 總值及其占比,維度是年份、省份和城市,時間條件是 2022 年至 2023 年,過濾條件是省份為廣東。如圖中 SQL 的第 5 行,通過 EXCLUDE[城市]去掉了城市維度,也就是省 GDP,再用各市的 GDP 除以省 GDP,就是我們需要的占比這一指標??梢钥吹?,使用 OAX 語言可以極大地簡化計算的定義,提高業務分析效率。
以上例子是 OAX 語言的動態粒度計算的能力,OAX 語言的能力主要包括三部分:
- 基本計算:OAX 提供了一系列基本的計算函數,如 SUM、COUNT DISTINCT、CONCAT 等等。
- 動態粒度計算:允許用戶在計算過程中根據需要調整數據的粒度,進行更靈活的分析。如 EXCLUDE、INCLUDE、FIXCLUDE 等。
- 表計算:表計算是 OAX 的一個高級特性,它允許用戶在數據表中進行跨行的計算。例如 RUNNING SUM(累計求和),用于計算從表的開始到當前行的連續值的總和。這種方法不僅簡化了計算過程,而且提高了計算的準確性和效率。
OAX 屬于語言層面,要真正落地還需要一個載體去實現,即統一查詢引擎 OCTO。
4. 統一查詢引擎 OCTO
統一查詢引擎 OCTO 是一個支持聯邦查詢的通用查詢平臺,它能夠將統一分析語言(OAX)轉化為實際的查詢操作。
OCTO 的架構主要包括:
(1)接口層:主要聯邦查詢語言,基于 Substrait 協議擴展而來。
(2)查詢層:首先是解析接口層的聯邦查詢語言,構建邏輯查詢計劃;然后對查詢計劃進行編排,這里是實現二次計算的關鍵,像同環比、動態粒度計算等能力均為二次計算能力;最后將編排后的計劃交由引擎執行。
(3)適配層:適配異構引擎的查詢能力。
我們還是以一個例子來看一下整體處理流程:
(1)定義 OAX 查詢語言:以前面求各市 GDP 占比的樣例為例,首先定義好 OAX 語言的五要素;這時還是指標維度范圍;
(2)翻譯成聯邦查詢語言:然后將 OAX 語言翻譯成聯邦查詢語言;這一步主要結合指標維度元數據和數據模型信息,將 OAX 語言的五要素轉換成物理引擎的表和字段信息,組織成聯邦查詢語言;這時就是物理底表范圍;
(3)查詢計劃:將聯邦查詢語言翻譯成查詢計劃,在該例中,廣東省各市 GDP 總值和廣東省 GDP 總值分別是兩個計算算子,然后將這兩算子 Join 計算得出 GDP 占比;
(4)得出結果:最后將計算結果返回。
總結一下,OCTO 具有三大特點:
(1)聯邦查詢能力:OCTO 是支持異構數據源的通用聯邦查詢平臺,可以通過查詢計劃編排實現各種高級數據分析能力;
(2)開放能力:作為通用平臺,可支持運營平臺、質檢平臺等多種應用系統的指標需求。
(3)查詢性能優化:
- RBO:基于規則的優化,如謂詞下推、列裁剪、join 消除等。
- CBO:基于成本的優化,遵循選擇快表、小表的原則,提高查詢性能。
5. 指標加速
OCTO 的查詢優化主要是在查詢計劃層面,而有些場景下查詢計劃層面的優化無法滿足要求,比如無法優化 Hive 引擎查詢慢的問題。為了解決此類查詢性能問題,我們設計了指標加速層,其主要采用的是用空間換時間的思想。
指標加速層的配置方式有兩種:
- 用戶手動配置:用戶可以基于特定的指標和維度手動配置加速規則,系統根據這些規則生成 ETL 任務,自動提交給任務調度平臺,定期執行以加載數據到高速引擎。
- 自動化分析配置:平臺根據用戶在指標和維度上的查詢歷史記錄,自動分析提效場景,然后創建自動化的 ETL 任務進行數據加速。
指標加速層的應用場景包括:
- 冷引擎到熱引擎:將存儲在性能較低的存儲引擎(如 Hive 表)中的指標數據加速到性能更高的存儲引擎(如 ClickHouse);
- 關聯查詢到單表查詢:將涉及多表關聯查詢的場景優化為單表查詢場景,通過加速任務,提前將數據聚合到單張表再加速到熱引擎中,以提高查詢性能;
- 大表到小表:在某些大寬表場景下,每次查詢少量常用指標維度都需要進行全表掃描,導致查詢性能不佳;指標加速可以將頻繁查詢的指標和維度單獨形成小表,減少查詢時的數據掃描量,提升查詢效率。
指標加速層上線以來,加速任務已達到百級,加速指標占比約為 10%,整體查詢性能提高了 10 倍。
6. 指標中臺落地情況
指標中臺自上線以來,全面覆蓋了公司的分析領域,主要表現如下:
- 質量:沒有重大質量故障。
- 效率:10 倍以上的效率提升。
- 成本:極大地提高了數據復用度。
- 指標管理:快手核心業務線指標全部接入指標中臺,上萬指標數量。
- 指標服務:接入幾十個應用方,單日查詢次數達到上百萬次。
- 運營情況:日活躍用戶達到千級別,月活躍用戶達到萬級別,為數據分析師、運營人員、DE 和業務人員的提效提供支撐。
四、未來展望
指標中臺在未來發展中將重點聚焦于兩個關鍵領域,即智能化和高性能。
- 智能化方面:平臺計劃利用大型模型的能力來探索智能取數功能,以實現更高級的業務分析自動化。通過標準化的指標信息構建交互式的自助 BI 產品,從而提升用戶體驗,提供高質量的對話式智能分析服務。這種智能化的趨勢將極大地提高數據分析的效率,使用戶能夠更快速地獲取所需信息,同時降低技術門檻,實現數據的普惠。
- 高性能:平臺將繼續優化和提高查詢性能,不斷提升用戶的查詢體驗。此外,隨著技術的發展,也會探索如向量化、native sql 等新技術,以進一步提升數據處理能力,滿足日益復雜的業務需求。