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