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

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