作為國內(nèi)規(guī)模最大的ClickHouse用戶,字節(jié)跳動踩過哪些坑?

ClickHouse 由于其性能方面的突出優(yōu)勢,正在分析型數(shù)據(jù)庫領(lǐng)域掀起一波新的技術(shù)浪潮。作為國內(nèi)規(guī)模最大的 ClickHouse 用戶,目前字節(jié)跳動內(nèi)部的 ClickHouse 節(jié)點總數(shù)超過 15000 個,管理總數(shù)據(jù)量超過 600PB,最大的集群規(guī)模在 2400 余個節(jié)點。實際上,字節(jié)跳動廣泛的業(yè)務(wù)增長分析很多都建立在 ClickHouse 為基礎(chǔ)的查詢引擎上。
那么,ClickHouse 具體應(yīng)用于字節(jié)跳動哪些業(yè)務(wù)場景?為什么選擇采用 ClickHouse 而不是其他數(shù)據(jù)分析技術(shù)?在使用 ClickHouse 的過程中,字節(jié)跳動內(nèi)部團(tuán)隊又踩過哪些坑?近日,InfoQ 帶著上述問題采訪了字節(jié)跳動數(shù)據(jù)平臺數(shù)據(jù)應(yīng)用研發(fā)負(fù)責(zé)人郭東東。
郭東東:兩家公司的發(fā)展階段,包括本身數(shù)據(jù)的體量都有一些差異,所以這兩個公司可能在建設(shè)上有一些比較相通的地方,也有一些差異化。在 360 那時候主要是 Hadoop 生態(tài)剛剛興起,當(dāng)時更多的工作是把 Hadoop、HBase 等一系列大數(shù)據(jù)技術(shù)引入到 360,去解決之前傳統(tǒng)數(shù)據(jù)庫構(gòu)建、數(shù)據(jù)分析平臺建設(shè)這塊的一些瓶頸,當(dāng)時更多只是把這些平臺作為底座更好地支撐業(yè)務(wù)。
來字節(jié)跳動之后,這些開源的生態(tài)已經(jīng)比較成熟了。我們更多是怎樣體系化地建設(shè)數(shù)據(jù)平臺,在技術(shù)平臺的基礎(chǔ)之上,更多地構(gòu)建數(shù)據(jù)分析的其他能力。當(dāng)然,字節(jié)跳動的數(shù)據(jù)量后期增速很大,本身底層分析引擎等方面的挑戰(zhàn)也比較大。
郭東東: 我主要負(fù)責(zé)數(shù)據(jù)應(yīng)用相關(guān)產(chǎn)品,跟火山引擎的數(shù)據(jù)中臺其實是上下游的依賴關(guān)系。中臺更多是把數(shù)據(jù)整理好加工好,形成相對規(guī)范的數(shù)據(jù)體系。數(shù)據(jù)應(yīng)用的話更多考慮的是在數(shù)據(jù)體系上怎樣把更多的數(shù)據(jù)能力賦能給業(yè)務(wù)線,比如各種分析能力、AB 實驗?zāi)芰Α⑿袨榉治瞿芰涂梢暬芰Φ鹊?。二者是一個比較密切的協(xié)同關(guān)系。
郭東東: 我們基本上采用敏捷開發(fā),一個迭代周期可能是兩到三周,每個產(chǎn)品會不太一樣,整體來說是小步快跑的節(jié)奏,快速把客戶的需求轉(zhuǎn)化成產(chǎn)品能力,然后提供給用戶去使用。這里面包括測試環(huán)節(jié)、活動環(huán)節(jié)都需要把控,整個有一套相對完善的需求管理和研發(fā)管控的系統(tǒng)。
郭東東: 我以 AB 實驗平臺為例,簡單介紹一下我們整體的技術(shù)棧和架構(gòu)。AB 實驗平臺整個產(chǎn)品的技術(shù)架構(gòu)包括指標(biāo)建設(shè)模塊、數(shù)據(jù)分流模塊等,以及底層的查詢引擎能力。指標(biāo)建設(shè)模塊負(fù)責(zé)數(shù)據(jù)的接入和清洗,包括整個 AB 實驗平臺數(shù)據(jù)體系的建設(shè)。數(shù)據(jù)分流模塊模塊主要是根據(jù)不同用戶實時決定用戶屬于的實驗組。最底層的查詢引擎是我們的核心,主要負(fù)責(zé)保證整個交互式查詢的能力,這里面還有一些增強(qiáng)分析的子模塊等等。整個是以容器化部署的,編程語言的話包括 Python、Go 這些都有用到。
郭東東: 其實一個開源技術(shù)從開源到逐步成熟、被業(yè)內(nèi)廣泛采用,本來就需要一個過程。另外,如果有一些大公司逐步在使用這個技術(shù)的話,也有助于更好地推動這項技術(shù)在業(yè)內(nèi)被普遍采用。應(yīng)該說字節(jié)跳動內(nèi)部的 ClickHouse 應(yīng)用實踐,對于 ClickHouse 在業(yè)內(nèi)更大范圍的使用也起到比較大的推動作用。很多公司都跟我們交流過 ClickHouse 的使用情況,包括技術(shù)改進(jìn)、技術(shù)引進(jìn)路線等等。
另外,從本質(zhì)上來說 ClickHouse 確實解決了一些特定場景和業(yè)務(wù)上存在的比較大的痛點。數(shù)據(jù)分析之前大家更多是困在數(shù)據(jù)量,很少能得到相對明細(xì)數(shù)據(jù)的分析,而 ClickHouse 強(qiáng)大的分析能力剛好解決了這一痛點。這其實也反映了大家對數(shù)據(jù)更細(xì)粒度的分析需求的持續(xù)拓展。
郭東東:ClickHouse 在字節(jié)的應(yīng)用場景比較多,比如我負(fù)責(zé)的數(shù)據(jù)應(yīng)用平臺,基本上很多底層技術(shù)都非常多地依賴 ClickHouse 提供的能力,比如 BI 分析能力、AB 實驗的分析能力、行為分析能力等等,包括商業(yè)化層面的廣告效果分析,也都是依賴 ClickHouse 的。
郭東東: 其實在選 ClickHouse 之前,我們也做了比較多的技術(shù)選型工作。當(dāng)時我們有一個相對比較有挑戰(zhàn)的技術(shù)場景,是要基于很多明細(xì)數(shù)據(jù)做行為分析,這一塊我們研究了挺長時間,當(dāng)時也試用了 Presto、Kylin 等等各種各樣的分析技術(shù),最后選擇了 ClickHouse。主要是 ClickHouse 在相對固定的一個 Panel 場景下,查詢能力確實有比較明顯的優(yōu)勢,而且本身它是不會損失靈活性的,像 Kylin 的話其實靈活性會比較差,只要做一點修改就需要重刷。
另外我們其實也調(diào)研過 Druid 等,但使用起來跟 ClickHouse 還是有比較大差異的。我們本身選 ClickHouse,還有一個比較大的原因是 ClickHouse 本身 Engine 是相對簡單的,因為它 Engine 的執(zhí)行引擎寫得比較高效,它帶來的向量化執(zhí)行等等這些特性對我們場景化分析的價值還是比較大的。
郭東東:ClickHouse 是本身開源版本,我們也會持續(xù)進(jìn)行迭代和優(yōu)化,還是做了不少工作的。比如說 ClickHouse 的單機(jī)用戶規(guī)模原始是受限的,我們做到了大概幾千臺的單機(jī)用戶規(guī)模,這里面就做了大量的優(yōu)化。對于它本身查詢能力層面、性能層面,我們也做了比較多的優(yōu)化,包括特殊的像那些比較復(fù)雜的路徑轉(zhuǎn)換等等一系列分析。
另外我們也做了 ClickHouse 的云原生改造,本身它只支持 Local 部署的模式,我們做到了存儲計算分離,就能比較容易地基于容器去調(diào)動算力,這些方面也做了很多事情。另外 ClickHouse 不支持事務(wù)、實時寫入能力,包括對 Update 的支持,這塊我們都做了比較多的改進(jìn).
我們整體來說還是按照云原生和相對完整的一個數(shù)據(jù)庫去推進(jìn)這個演進(jìn),包括對相對復(fù)雜 SQL 能力的支持、優(yōu)化器能力的補足,這塊都有投入。
郭東東: 我們使用 ClickHouse 算比較早的,中間遇到的問題比較多,踩了不少坑,但是現(xiàn)在來看的話,其實 ClickHouse 本身開源也在逐步成熟,很多問題也在逐步完善。至于有哪些經(jīng)驗可借鑒,我覺得可能有幾個點拿出來跟大家分享一下。首先 ClickHouse 本身運維管控是比較弱的,所以我們內(nèi)部自己搭建了一套相對完善的運維管控系統(tǒng),以保證 ClickHouse 的穩(wěn)定性,包括故障節(jié)點的停換等等一系列事情。另外 ClickHouse 在對外數(shù)據(jù)攝入這一方面其實也不算特別完善,這塊我們也做了比較多事情,還有包括實時能力等等。
郭東東: 過去三年大數(shù)據(jù)分析技術(shù)發(fā)展還是挺快的,尤其業(yè)內(nèi)也有比較多的開源技術(shù)出現(xiàn),像 ClickHouse 這樣的技術(shù)。另外業(yè)內(nèi)云原生數(shù)據(jù)分析公司(如 Snowflake)的成功,也在大力推動技術(shù)的發(fā)展。
回到技術(shù)本身,大家其實可以看到越來越多的云原生能力,包括 AI 支持和數(shù)據(jù)分析、數(shù)據(jù)庫和數(shù)據(jù)倉的結(jié)合、湖倉一體、批流一體等等,技術(shù)一直在持續(xù)推進(jìn)。未來我認(rèn)為數(shù)據(jù)分析能力會持續(xù)加強(qiáng),包括數(shù)據(jù)分析技術(shù)的多樣性、整個架構(gòu) Layer Out、存儲計算分離等等,都是比較大的發(fā)展趨勢。
郭東東: 目前在我們公司內(nèi)部這兩種架構(gòu)都是存在的,每一種架構(gòu)都有不同的使用場景。Lambda 架構(gòu)本身離線和實時是分開的,在我們內(nèi)部更多用于一些數(shù)據(jù)量比較大且整體有一些比較復(fù)雜的策略的場景,比如反作弊等策略,實時很難做得很準(zhǔn)確,就需要把離線和實時分開,離線先提供一份數(shù)據(jù),然后實時進(jìn)一步修正這個數(shù)據(jù),保證數(shù)據(jù)是可用的且準(zhǔn)確性更高。
但有些場景其實我們也直接采用 Kappa 架構(gòu),尤其數(shù)據(jù)湖這些技術(shù)在內(nèi)部的廣泛使用,保證了實時的分析能力跟離線也差不了太多,類似這種場景我們就會把實時和離線整合起來,就只用一套,保證實時產(chǎn)出的數(shù)據(jù)就是我們最終需要的數(shù)據(jù)。我們只有在出現(xiàn)比較大的數(shù)據(jù)口徑調(diào)整,或者其他事故的時候,才會跑離線任務(wù)去修正,默認(rèn)的話就是一套。
采訪嘉賓介紹:
郭東東,字節(jié)跳動數(shù)據(jù)平臺數(shù)據(jù)應(yīng)用研發(fā)負(fù)責(zé)人,負(fù)責(zé)數(shù)據(jù)應(yīng)用相關(guān)產(chǎn)品的研發(fā),具體包括 AB 實驗平臺、行為分析系統(tǒng)、智能 BI 洞察系統(tǒng)相關(guān)產(chǎn)品等,支撐內(nèi)部的抖音、今日頭條等核心業(yè)務(wù)線。曾經(jīng)任職于奇虎 360,負(fù)責(zé)大數(shù)據(jù)平臺相關(guān)建設(shè),有 10 年的大數(shù)據(jù)平臺以及應(yīng)用架構(gòu)經(jīng)驗,對 OLAP、大數(shù)據(jù)實時 & 離線處理技術(shù)有比較深入的了解,熟悉 ClickHouse、Spark、Presto 等主流的大數(shù)據(jù)處理技術(shù)。
--end--
掃描下方二維碼 添加好友,備注【交流】 可私聊交流,也可進(jìn)資源豐富學(xué)習(xí)群
更文不易,點個“在看”支持一下??
