數(shù)據(jù)湖在快手的應(yīng)用實(shí)踐
一、數(shù)據(jù)湖在快手的應(yīng)用歷程
1. 業(yè)務(wù)面臨的問(wèn)題與挑戰(zhàn)
(1)數(shù)倉(cāng)規(guī)模的持續(xù)膨脹
快手業(yè)務(wù)發(fā)展迅速,對(duì)數(shù)據(jù)精細(xì)化運(yùn)營(yíng)的要求越來(lái)越高。隨之而來(lái),數(shù)倉(cāng)的數(shù)據(jù)模型持續(xù)快速增長(zhǎng)。這帶來(lái)了兩個(gè)主要問(wèn)題:
其一,計(jì)算和存儲(chǔ)成本也隨之線性增長(zhǎng)。在當(dāng)前降本增效的大背景下,持續(xù)的成本增長(zhǎng)與團(tuán)隊(duì)的目標(biāo)戰(zhàn)略相悖。
其二,龐大的數(shù)據(jù)模型給治理和運(yùn)維帶來(lái)了挑戰(zhàn)。多套數(shù)據(jù)模型迭代節(jié)奏不一致,容易導(dǎo)致數(shù)據(jù)一致性的質(zhì)量問(wèn)題,運(yùn)維成本越來(lái)越高。
(2)協(xié)作效率有待提升
快手是一家多元化的業(yè)務(wù)公司,不可避免地會(huì)涉及到跨部門(mén)的數(shù)據(jù)協(xié)作。以計(jì)算ROI 為例,就需要匯總收入和支出兩部分?jǐn)?shù)據(jù),而這些數(shù)據(jù)掌握在不同的業(yè)務(wù)部門(mén)手中??绮块T(mén)協(xié)作時(shí),主要會(huì)遇到兩個(gè)問(wèn)題:
其一,時(shí)間的匹配。由于不同部門(mén)的業(yè)務(wù)側(cè)重點(diǎn)不一樣,在排期上難免會(huì)有差異,影響協(xié)作效率。
其二,數(shù)據(jù)異動(dòng)追蹤不夠敏捷。當(dāng)數(shù)據(jù)發(fā)生異動(dòng)時(shí),由于聯(lián)動(dòng)上下游多方排查時(shí)數(shù)據(jù)連環(huán)依賴(lài)加工,造成牽連廣泛、排查周期較長(zhǎng)。
(3)實(shí)時(shí)與離線數(shù)據(jù)差異
對(duì)數(shù)據(jù)時(shí)效性要求高的場(chǎng)景,比如活動(dòng)效果監(jiān)控、策略快速驗(yàn)證等,存在實(shí)時(shí)和離線數(shù)據(jù)誤差的問(wèn)題。如,實(shí)時(shí)數(shù)據(jù)顯示當(dāng)天目標(biāo)達(dá)成或未達(dá)成,但次日離線數(shù)據(jù)結(jié)果相反,這就會(huì)影響到業(yè)務(wù)決策的及時(shí)性和準(zhǔn)確性。
對(duì)于數(shù)倉(cāng)規(guī)模為什么會(huì)持續(xù)擴(kuò)漲,接下來(lái)基于真實(shí)的案例做分析。從需求交付的視角,最細(xì)粒度的目標(biāo)是基于[公共模型 3]同時(shí)交付核心日?qǐng)?bào)、增長(zhǎng)錢(qián)效、增長(zhǎng)日?qǐng)?bào) 3 個(gè)需求;這樣看起來(lái)最合理的數(shù)倉(cāng)模型只需要 1 個(gè)模型即可;但,實(shí)際為什么不行。我個(gè)人認(rèn)為原因有二,其一:面向數(shù)據(jù)應(yīng)用的視角,時(shí)效 SLA 是繞不開(kāi)的話題,因?yàn)橛玫蕉鄠€(gè)數(shù)據(jù)來(lái)源,將結(jié)果整合到一起,數(shù)據(jù)的時(shí)效 SLA = 最晚的數(shù)據(jù)源就緒時(shí)間 + 任務(wù)執(zhí)行時(shí)間,那么為了滿(mǎn)足數(shù)據(jù)時(shí)效 SLA 的訴求,會(huì)建設(shè)[公共模型 1&2&3];其二:如果將大量的業(yè)務(wù)過(guò)程的指標(biāo)和緯度整合到一個(gè)模型,當(dāng)前的計(jì)算引擎(Hive、Spark)的執(zhí)行時(shí)長(zhǎng)過(guò)長(zhǎng)&優(yōu)化難度較大;從而進(jìn)一步帶來(lái)時(shí)效 SLA 的保障壓力。
那么有沒(méi)有辦法實(shí)現(xiàn)純面向領(lǐng)域模型、業(yè)務(wù)過(guò)程、數(shù)據(jù)建模理論,滿(mǎn)足計(jì)算性能要求,滿(mǎn)足時(shí)效 SLA 要求的解決方案。經(jīng)過(guò)思考,我們需要一個(gè)引擎,它支持對(duì)數(shù)倉(cāng)模型的更新寫(xiě)。
2. 架構(gòu)演進(jìn):從 Hive 到 Hudi 的技術(shù)變革之路
經(jīng)過(guò)調(diào)研,數(shù)據(jù)湖技術(shù)支持對(duì)數(shù)倉(cāng)模型的更新寫(xiě)。市面上有多個(gè)引擎該如何選擇?主要的評(píng)判標(biāo)準(zhǔn)有三:第一,引擎的功能豐富度,功能越豐富,就可以適配更多的業(yè)務(wù)場(chǎng)景,適用性更強(qiáng);第二,與快手現(xiàn)有大數(shù)據(jù)架構(gòu)和技術(shù)棧的契合度,契合度越高,引入新引擎的投入越小、時(shí)間越短,解決問(wèn)題的效率越高;第三,引擎的自動(dòng)化程度,自動(dòng)化程度越高帶來(lái)的運(yùn)維成本越低。
綜合對(duì)比后,Hudi 憑借其豐富的功能、與現(xiàn)有架構(gòu)的良好適配性,以及相對(duì)較低的運(yùn)維成本,成為快手大數(shù)據(jù)團(tuán)隊(duì)的首選。
選定引擎后,對(duì)數(shù)倉(cāng)架構(gòu)的規(guī)劃藍(lán)圖是:按照業(yè)務(wù)實(shí)體整體設(shè)計(jì)大寬表,實(shí)現(xiàn)跨領(lǐng)域的打通(增長(zhǎng)、商業(yè)化、電商),跨業(yè)務(wù)的并行協(xié)作;單領(lǐng)域(增長(zhǎng))的多業(yè)務(wù)過(guò)程的團(tuán)隊(duì)內(nèi)并行協(xié)作;業(yè)務(wù)間&團(tuán)隊(duì)內(nèi)實(shí)施的同學(xué)關(guān)注于實(shí)體粒度下實(shí)現(xiàn)。依據(jù) SLA 的訴求將模型拆成合理的子任務(wù),通過(guò)更新的方式補(bǔ)充模型數(shù)據(jù)內(nèi)容。
下邊我們基于問(wèn)題看下如何應(yīng)用。
3. 快手 Hudi 數(shù)據(jù)庫(kù)應(yīng)用推廣歷程
我們依賴(lài)引擎的更新能力,可以從純數(shù)倉(cāng)架構(gòu)最理想模型的視角設(shè)計(jì)數(shù)倉(cāng)模型。比如,我們將[數(shù)據(jù)統(tǒng)計(jì)]的所有指標(biāo)和緯度 + 實(shí)體 ID 整合,建設(shè)跨主題的明細(xì)表,具體方案:
(1)基于時(shí)效SLA 的訴求,將子任務(wù)拆成 4、5、6、7 點(diǎn)執(zhí)行的 4 個(gè)任。
(2)不用時(shí)間點(diǎn)執(zhí)行的子任務(wù),更新數(shù)據(jù)內(nèi)容到跨主題的明細(xì)表。
(3)上層應(yīng)用基于時(shí)效 SLA 抽取部分字段計(jì)算滿(mǎn)足業(yè)務(wù)訴求。
綜上,可以滿(mǎn)足數(shù)據(jù)架構(gòu)的合理性、數(shù)據(jù)時(shí)效 SLA 的訴求、不同數(shù)據(jù)域(團(tuán)隊(duì))的協(xié)作。
對(duì)比傳統(tǒng)的一次性更新的模型,子任務(wù)邏輯更簡(jiǎn)單、數(shù)量更小,因此任務(wù)的計(jì)算&執(zhí)行效率更高,進(jìn)一步提升了數(shù)據(jù)的 SLA 時(shí)效。
針對(duì)上述的建設(shè)過(guò)程,經(jīng)過(guò)真實(shí)業(yè)務(wù)驗(yàn)證取得了一些成效。
4. 快手Hudi 應(yīng)用實(shí)踐初見(jiàn)成效
(1)從數(shù)倉(cāng)模型視角:引擎更新能力的支持,可以將我們過(guò)往散落的模型中的業(yè)務(wù)過(guò)程做有效的整合。能更聚焦和詳細(xì)的通過(guò)數(shù)據(jù)描述業(yè)務(wù);同時(shí)在數(shù)據(jù)的查找、使用、應(yīng)用(計(jì)算)效率上有顯著提升。
(2)從數(shù)倉(cāng)規(guī)模視角:去掉了因時(shí)效 SLA 帶來(lái)的非必要中間模型,因計(jì)算能力不足拆分的優(yōu)化模型;數(shù)據(jù)規(guī)模有顯著下降;規(guī)模的下降帶來(lái)運(yùn)維壓力的減輕、存儲(chǔ)、計(jì)算成本的下降。
(3)從數(shù)倉(cāng)增量視角:除必要的新實(shí)體,絕大部分工作體現(xiàn)在對(duì)實(shí)體資產(chǎn)的迭代;使得公共數(shù)據(jù)的完備度持續(xù)完善,復(fù)用度持續(xù)提升;從而間接提升研發(fā)效率。
從結(jié)果來(lái)看,數(shù)據(jù)湖技術(shù)在生產(chǎn)、應(yīng)用、效率、成本上是有收益的,那實(shí)際的推廣策略是什么,如何評(píng)估新引擎推廣的 ROI?
推廣策略、生態(tài)建設(shè)。
在推廣策略上分為幾個(gè)階段。
(1)功能&場(chǎng)景的覆蓋驗(yàn)證
要推廣一款新的基礎(chǔ)組件,要找準(zhǔn)切入點(diǎn)。我們重點(diǎn)聚焦在當(dāng)前 Hive 和 Spark 生態(tài)無(wú)法有效解決的"老大難"問(wèn)題:活動(dòng)的分鐘級(jí)時(shí)效問(wèn)題、狀態(tài)演變的全量回刷場(chǎng)景、DAU 點(diǎn)擊的時(shí)效優(yōu)化場(chǎng)景。通過(guò)解決“老大難"問(wèn)題,從業(yè)務(wù)的視角可以驗(yàn)證引擎可以解決過(guò)往的不可能,體現(xiàn)其增量?jī)r(jià)值。
(2)論證點(diǎn)到面的普適性
在增長(zhǎng)業(yè)務(wù)驗(yàn)證其 100% 支持業(yè)務(wù)的可能性,從歷史任務(wù)的改造遷移、增量任務(wù)的直接應(yīng)用,結(jié)果如上數(shù)據(jù)。通過(guò)整個(gè)業(yè)務(wù)方向的論證,可以認(rèn)為:引擎在解決業(yè)務(wù)問(wèn)題上具有普遍適用性。
(3)工具鏈生態(tài)建設(shè)、提升研發(fā)效率
技術(shù)落地的關(guān)鍵在于復(fù)用??焓謨?nèi)部擁很多業(yè)務(wù)部門(mén),要做到全面普及,必須標(biāo)準(zhǔn)化使用范式,沉淀出一整套工具鏈。同時(shí),我們?cè)诓粩嗟貙?shí)踐中探索總結(jié)出了一些技術(shù)最佳實(shí)踐,以 ShowCase 的形式推廣到各個(gè)業(yè)務(wù)部門(mén),實(shí)現(xiàn)了經(jīng)驗(yàn)的快速?gòu)?fù)制。
(4)廣泛應(yīng)用
在引擎技術(shù)的可能性基礎(chǔ)上,加上工具生態(tài)的效率加持;公司各個(gè)團(tuán)隊(duì)根據(jù)自己的業(yè)務(wù)場(chǎng)景和業(yè)務(wù)痛點(diǎn)進(jìn)行針對(duì)性的應(yīng)用與優(yōu)化;目前已經(jīng)得到廣泛的應(yīng)用。
二、數(shù)據(jù)湖在快手的應(yīng)用案例
1. 業(yè)務(wù)賦能:Hudi 在快手的典型場(chǎng)景
(1)CDC 數(shù)據(jù)同步
在數(shù)據(jù)同步方面,Hudi 展現(xiàn)出了不錯(cuò)的效果。通過(guò)將小時(shí)或者天的定時(shí)觸發(fā)同步,迭代成實(shí)時(shí)的數(shù)據(jù)同步;這種數(shù)據(jù)同步模式,為許多實(shí)時(shí)性要求高的業(yè)務(wù)提供了有力保障。業(yè)務(wù)方不必再受限于夜間批處理的時(shí)間窗口,而是可以隨時(shí)消費(fèi)到最新的數(shù)據(jù),極大地提升了數(shù)據(jù)應(yīng)用的靈活性。在時(shí)效上收益明顯,比如,一些核心的場(chǎng)景有60~90 分鐘的提升。
(2)批流結(jié)合業(yè)務(wù)加速
在某些場(chǎng)景下,僅有批處理還不夠,還需要實(shí)時(shí)的流式計(jì)算能力。Hudi 通過(guò)無(wú)縫集成批處理引擎和流處理引擎,很好地滿(mǎn)足了這一訴求。比如,除夕的紅包雨,需要在兩輪紅包雨之間完成下一輪 Push 推送的計(jì)算,使用歷史的小時(shí)計(jì)算需要 4~5 個(gè)小時(shí)的時(shí)間,但使用 Hudi 可以在上一輪紅包雨期間完成參與用戶(hù)的更新標(biāo)記。Hudi 從技術(shù)上滿(mǎn)足了業(yè)務(wù)的場(chǎng)景訴求。在活動(dòng)期間高頻應(yīng)用,拿到了顯著的結(jié)果收益。
(3)架構(gòu)升級(jí)數(shù)倉(cāng)優(yōu)化
基于寬表數(shù)據(jù)建設(shè),將歷史基于時(shí)效&計(jì)算優(yōu)化的 71 個(gè)模型,設(shè)計(jì)整合為基于設(shè)備&用戶(hù)為實(shí)體的 3 個(gè)模型,同時(shí)基于 SLA 的訴求拆分不同的子任務(wù),最終在模型規(guī)模、計(jì)算成本、存儲(chǔ)成本都拿到不錯(cuò)的收益。
基于引擎的更新能力,對(duì)數(shù)倉(cāng)模型的設(shè)計(jì)思路和實(shí)現(xiàn)方式也有根本上的改變;比如,在計(jì)算 N 留存的設(shè)計(jì),從過(guò)完多次重復(fù)的笛卡爾積計(jì)算轉(zhuǎn)為簡(jiǎn)單更新計(jì)算,在時(shí)效和成本上取得顯著收益。
2. 快手 Hudi 應(yīng)用實(shí)踐的一些思考
(1)需求引領(lǐng),技術(shù)驅(qū)動(dòng)
企業(yè)級(jí)服務(wù)的推廣切忌閉門(mén)造車(chē),一定要深入了解一線的業(yè)務(wù)需求,找準(zhǔn)痛點(diǎn),才能真正發(fā)揮技術(shù)的驅(qū)動(dòng)作用??焓值睦映浞终f(shuō)明,Hudi 之所以能夠在較短時(shí)間內(nèi)取得驕人的成績(jī),正是得益于其直指業(yè)務(wù)痛點(diǎn)的能力。從這個(gè)意義上說(shuō),Hudi 在快手的成功首先應(yīng)歸功于需求的精準(zhǔn)引領(lǐng)。
(2)制度先行,奠定規(guī)范基礎(chǔ)
Hudi 在快手的推廣之所以能夠做到體系化,與其完善的配套制度是分不開(kāi)的。通過(guò)建立統(tǒng)一的數(shù)據(jù)分層規(guī)范,快手為 Hudi 構(gòu)建了一個(gè)蓬勃發(fā)展的良好生態(tài)。同時(shí),將 Hudi 的最佳實(shí)踐以制度的形式固化下來(lái),又為后續(xù)的推廣應(yīng)用掃清了障礙。這為我們提供了一個(gè)很好的借鑒:任何新技術(shù)的引入都要考慮與現(xiàn)有的制度規(guī)范相配套,二者相輔相成,才能創(chuàng)造奇跡。
(3)打破壁壘,集體智慧方顯威力
Hudi 在快手的成功應(yīng)用離不開(kāi)各方的通力協(xié)作。從最初由基礎(chǔ)架構(gòu)團(tuán)隊(duì)主導(dǎo),到后來(lái)獲得越來(lái)越多BU 的青睞和使用,我們?cè)絹?lái)越意識(shí)到要打破部門(mén)壁壘,讓集體智慧發(fā)揮出最大的威力。正如開(kāi)源界流行的 "Given enough eyeballs,all bugs are shallow" 法則,新技術(shù)能否真正落地,關(guān)鍵在于能否調(diào)動(dòng)起全員的積極性,在實(shí)踐中不斷打磨,集眾人之所長(zhǎng),補(bǔ)己之所短。
總而言之,快手在 Hudi 的引入和推廣過(guò)程中積累了豐富的經(jīng)驗(yàn),也收獲了不菲的回報(bào)。其成功的要義在于需求引領(lǐng)、制度先行、破除壁壘,我們期待 Hudi 在快手能夠?yàn)闃I(yè)務(wù)創(chuàng)新和增長(zhǎng)提供源源不斷的動(dòng)力。也希望我們的實(shí)踐能給業(yè)界帶來(lái)一些啟示,為同行提供一些可資借鑒的范式。技術(shù)的進(jìn)步永無(wú)止境,讓我們攜手共進(jìn),共創(chuàng)美好未來(lái)!
三、Q&A
Q:新的 Hudi 架構(gòu)后,查詢(xún)速度優(yōu)化可以從哪些方面來(lái)考慮?
A:對(duì) Hudi 的查詢(xún)有兩種模式,第一種是在生產(chǎn)完成數(shù)據(jù)更新后即可以讀,第二種是數(shù)據(jù)需要 merge 之后才能使用,這種情況下需要等待 merge 之后再讀取數(shù)據(jù)。從生產(chǎn)讀的話,可以基于 Hudi 無(wú)增量來(lái)消費(fèi)上游的變更數(shù)據(jù),通過(guò)變更數(shù)據(jù)加上增量計(jì)算減少開(kāi)銷(xiāo)提高性能。分析查詢(xún)的話,可以加上二級(jí)索引來(lái)快速進(jìn)行查詢(xún)。