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