熱鬧紛繁的 OLAP 賽道,又迎來一個開源新玩家。
這幾年 OLAP 賽道持續(xù)火熱,國內(nèi)外不少開源項目和商業(yè)公司活躍其中。在一眾玩家中,ClickHouse 憑借彪悍的性能表現(xiàn)、活躍的開源社區(qū)和相當(dāng)快的迭代速度,市場普及率一路狂飆。
圍繞 ClickHouse,最近有兩則新聞頗引人關(guān)注:一個是阿里云官宣與 ClickHouse 商業(yè)公司合作,成為 ClickHouse 在中國獨家的云服務(wù)提供商;另一個則是字節(jié)跳動 ByteHouse 與亞馬遜云科技合作推出新一代云數(shù)倉服務(wù)。兩種不同的組合,背后其實是國內(nèi)外市場對 ClickHouse 云原生化產(chǎn)品和應(yīng)用的濃厚興趣。
(資料圖片)
作為國內(nèi)極具代表性的 ClickHouse 大規(guī)模采用者,字節(jié)跳動在歷經(jīng)數(shù)年的 ClickHouse 云原生化改造和應(yīng)用中沉淀了許多寶貴的實踐經(jīng)驗和思考。2021 年 8 月,字節(jié)跳動將經(jīng)過多年定制化改造的 ClickHouse,沉淀為 ByteHouse 對外提供服務(wù)。自那時起,就有人猜測:ByteHouse 會不會開源?
其實字節(jié)跳動為開源準(zhǔn)備已久。今年,字節(jié)跳動將 ByteHouse 內(nèi)核向社區(qū)開源為 ByConity,并于近日正式官宣發(fā)布 0.1.0 版本。
ByConity 定位為開源的云原生數(shù)據(jù)倉庫,采用 Apache 2.0 許可協(xié)議,基于 ClickHouse 內(nèi)核,但采用了存儲計算分離的全新架構(gòu),支持多個關(guān)鍵功能特性,如存儲計算分離、彈性擴縮容、租戶資源隔離和數(shù)據(jù)讀寫的強一致性等。通過利用主流的 OLAP 引擎優(yōu)化,如列存儲、向量化執(zhí)行、MPP 執(zhí)行、查詢優(yōu)化等,ByConity 可以提供優(yōu)異的讀寫性能。ByConity 適合用于 Online Analytical Processing(OLAP)場景和輕載數(shù)倉場景,包括但不限于交互式分析、實時日志監(jiān)控、流數(shù)據(jù)處理和分析等。
借此機會,InfoQ 獨家采訪了 ByConity 背后的技術(shù)團隊,深入了解 ByConity 開源準(zhǔn)備過程、架構(gòu)亮點、ByConity 與 ClickHouse 的差異,以及 ByConity 后續(xù)規(guī)劃等問題。這也是 ByConity 開源后團隊首次接受采訪。
一、開源準(zhǔn)備
為了和早些推出的商業(yè)品牌作區(qū)分、避免用戶混淆,團隊為開源版本取了新名字 ByConity。新名字由三個英文單詞組合再生而來:
? By 來自 Byte,代表存儲數(shù)據(jù)的基本單位,也比喻海量數(shù)據(jù);
? Con 來自 Convert,代表改變和革新;
? Conity 也來自 Community,代表一群人,也就是開源開發(fā)者社區(qū)。
從采用 ClickHouse 遇到痛點進而自研改造,到推出商業(yè)化服務(wù) ByteHouse,再到現(xiàn)在推出開源項目 ByConity,陳星認(rèn)為這是一個自然而然的過程,ByteHouse 和 ByConity 背后實際也是同一個技術(shù)團隊在支持。在他看來,行業(yè)內(nèi)有很多公司和團隊存在使用 ClickHouse 的痛點,對于解決這些問題并進一步拓寬其使用場景感興趣。開源能夠帶來更多技術(shù)層面的合作,也能幫助 ByConity 更快地擴展到更廣泛的不同行業(yè)中去,這是推動團隊將 ByConity 開源出來的重要動機之一。
在決定開源之前,團隊也考慮過是否能將自研修改合并回 ClickHouse 社區(qū),并圍繞向社區(qū)完整貢獻和聯(lián)合開發(fā),與 ClickHouse 核心研發(fā)團隊、ClickHouse 創(chuàng)業(yè)公司負(fù)責(zé)人做了幾次閉門溝通,但得到的反饋是架構(gòu)差異過大、合并難度和代價大、無法聯(lián)合開發(fā)。最終按照 ClickHouse 社區(qū)給到的建議,團隊決定獨立開源,并跟 ClickHouse 社區(qū)進行了消息同步。
2022 年 5 月,團隊啟動 ByConity 開源相關(guān)研發(fā)和準(zhǔn)備工作。到正式開源這期間,技術(shù)層面關(guān)鍵迭代主要有以下幾點:
升級 ByConity Codebase,和社區(qū) ClickHouse 21.8 版本代碼做同步,因為最初字節(jié)跳動引入 ClickHouse 的時候用的還是早期版本,但 ClickHouse 社區(qū)在版本 19 到 22 之間做了比較大的重構(gòu),導(dǎo)致整個執(zhí)行 model 發(fā)生了一些變化,這部分需要做不少代碼重寫工作,將整個代碼基線提升到社區(qū)新的 LTS 版本; 移除公司內(nèi)部依賴組件,尋找對應(yīng)的開源替代方案做兼容和適配,比如 FoudationDB 適配、ClickHouse-Keeper 適配等; 基于 Processor Model 重構(gòu) MPP 實現(xiàn),提升性能與穩(wěn)定性:主要解決了 ClickHouse 對于復(fù)雜 Query 的執(zhí)行支持不好,功能也比較局限(Join 只支持 broadcast join)等問題;適配 ClickHouse 新版本基于 Processor Push Mode 的執(zhí)行模式; 優(yōu)化器迭代,重點迭代了優(yōu)化規(guī)則(RBO),CBO 方面重點增強統(tǒng)計信息自動收集等:比如當(dāng)用戶表有改動時,后臺任務(wù)會檢查統(tǒng)計信息表的修改行數(shù),當(dāng)達(dá)到一定閾值時觸發(fā)自動收集; 云原生架構(gòu)設(shè)計下,增強數(shù)倉場景的查詢性能,數(shù)據(jù)能夠自動預(yù)讀,避免被動 cache 在實時場景下緩存命中率低的問題:支持 HDFS/S3 等分布式文件系統(tǒng)或者對象存儲系統(tǒng),并針對不同的分布式存儲系統(tǒng)做了讀寫性能優(yōu)化,存儲系統(tǒng)中也實現(xiàn)了基于本地磁盤的二級緩存系統(tǒng),可以采用高性能本地盤來進一步加速存儲讀寫性能。
前兩點主要是為對外開源做準(zhǔn)備,后三點則是在原來內(nèi)部版本基礎(chǔ)上進一步優(yōu)化升級。除了技術(shù)層面的準(zhǔn)備,還涉及公司開源流程、代碼合規(guī)、工程質(zhì)量、配套部署工具開發(fā)等一系列相關(guān)準(zhǔn)備。
據(jù)陳星介紹,ByConity 開源非常徹底,引擎核心能力都開源了,只有因公司合規(guī)要求受限的部分做了一些裁剪。本質(zhì)上 ByteHouse 云數(shù)倉的內(nèi)核就是 ByConity,引擎能力基本一樣。后續(xù) ByteHouse 研發(fā)新功能,也會直接在 ByConity 基礎(chǔ)上用開源的模式做,這對于團隊的研發(fā)模式來說是一個非常大的改變。
作為正式官宣開源前準(zhǔn)備工作的關(guān)鍵一環(huán),今年 1 月,團隊發(fā)布了 ByConity beta(v0.1.0-beta)版本,并在社區(qū)小范圍征集用戶試用。過去四個月陸陸續(xù)續(xù)已經(jīng)有不少團隊試用 ByConity 并在 GitHub 上提 issue 反饋,其中有一些團隊已經(jīng)在驗證生產(chǎn)場景中的數(shù)據(jù)和工作負(fù)載。翟鹿淵表示,希望通過這樣的小范圍試用,確認(rèn) ByConity 能真正幫助大家解決問題、帶來好處,再正式開源,讓更廣泛的用戶知道該如何使用 ByConity、能真正把 ByConity 用起來。比起一開始就官宣開源,這可能是一種相對謹(jǐn)慎但更務(wù)實的做法。
二、社區(qū)反響
Beta 版本推出后,ByConity 團隊從社區(qū)得到了不少反饋。好的一面是,有不少團隊和開發(fā)者對 ByConity 表現(xiàn)出濃厚興趣,其中不乏知名科技公司和團隊,比如傳音控股、電子云、華為、美團、天翼云、唯品會等,都在積極測試和驗證。據(jù)翟鹿淵介紹,目前國內(nèi)采用了 ClickHouse 的公司中,ByConity 大致覆蓋了頭部的三分之一,都是使用規(guī)模相對比較大的。其中華為終端云團隊已經(jīng)參與到了 ByConity 部分研發(fā)工作中,比如這次發(fā)布的 0.1.0 版本中有一個對象存儲集成功能的預(yù)覽版,就是華為終端云團隊參與共同開發(fā)的。
當(dāng)然難免也會出現(xiàn)一些挑戰(zhàn)。在知乎 ByConity 相關(guān)問題下面,有網(wǎng)友反饋代碼風(fēng)格對開發(fā)者不是很友好,一個方法里幾百上千行代碼,批評 ByConity 肯定是延續(xù)了 ClickHouse 開源代碼的問題。對此,陳星表示虛心接受批評,ByConity 本身就是基于 ClickHouse 內(nèi)核開發(fā),因此 CH 的代碼風(fēng)格問題,ByConity 難以避免,再加上早期內(nèi)部研發(fā)更多追求快速上線使用,對于代碼風(fēng)格可能沒有特別高要求和統(tǒng)一規(guī)范。目前 ByConity 團隊已經(jīng)在規(guī)劃和推進代碼重構(gòu)工作、希望做出好的示范,也希望后續(xù)社區(qū)能夠一起推進這項工作。
類似的問題,翟鹿淵也被問到過,比如有開發(fā)者認(rèn)為 ByConity 的代碼和 ClickHouse 重合度比較高。潛在的質(zhì)疑或挑戰(zhàn)點在于,ByConity 不是一個完全自主研發(fā)的項目。對此團隊的態(tài)度很坦蕩,ByConity 的起點是 ClickHouse,這是事實,作為 ClickHouse 的下游項目,ByConity 會在向上兼容性方面做基礎(chǔ)保證,并在開源許可的 header 文件中對受益于哪些開源項目給到完整的說明。
ByConity 不會為了體現(xiàn)差異而做代碼調(diào)整(比如重命名一些函數(shù)、在命名空間上做些修飾等)。ByConity 希望能夠繼承 ClickHouse 的長處和優(yōu)勢,比如性能上的優(yōu)勢、工程設(shè)計上的亮點等,ByConity 都會繼續(xù)保留;同時針對實際業(yè)務(wù)場景中需要解決的問題,ByConity 會在新架構(gòu)上做延展,以求在更廣泛的場景上發(fā)揮出更大作用,讓更多公司或團隊受益。
三、架構(gòu)亮點與差異
從 2017 年引入 ClickHouse 至今,ByConity 團隊基于 ClickHouse 內(nèi)核做了深度改造和大量升級優(yōu)化,不管是技術(shù)難度還是技術(shù)投入程度都非常大。具體的優(yōu)化思路在早前的采訪和白皮書做過詳細(xì)說明,近期 ByConity 社區(qū)也會聯(lián)合 InfoQ 陸續(xù)發(fā)布一系列 ByConity 技術(shù)解讀文章。
目前 ByConity 整體架構(gòu)如下圖所示,分為 3 層:服務(wù)接入層、計算層和存儲層,其中服務(wù)接入層響應(yīng)用戶查詢,計算層負(fù)責(zé)計算數(shù)據(jù),存儲層存放用戶數(shù)據(jù)。詳細(xì)介紹可查閱 ByConity 的整體架構(gòu)說明文檔。
ByConity 最新架構(gòu)圖
基于從外部收到的反饋,翟鹿淵將 ByConity 相比傳統(tǒng) MPP 架構(gòu)的亮點概括為以下三點:
? 首先是存儲計算分離的改造。傳統(tǒng) MPP 很難對計算資源做隔離,據(jù)翟鹿淵介紹,現(xiàn)在業(yè)界大多數(shù)使用 ClickHouse 方案的公司和團隊,采用的隔離方式基本是靠物理集群隔離,運維管理成本極高。存算分離之外,ByConity 依托于虛擬化容器調(diào)度能力,既能實現(xiàn)業(yè)務(wù)和業(yè)務(wù)之間的隔離,又能非常靈活地調(diào)配硬件資源,這其實是很多公司想解決,但可能只解了一半或者暫時還沒有好解決方案的嚴(yán)重問題。
? 其次是自研的面向 ClickHouse runtime 執(zhí)行層、與之完全匹配的查詢優(yōu)化器?;谒膫€大方向(基于規(guī)則、基于 cost、基于數(shù)據(jù)依賴、基于反饋)提供極致優(yōu)化能力,能極大提高查詢性能,特別是在復(fù)雜查詢場景下能帶來數(shù)倍至數(shù)百倍的性能提升。雖然業(yè)界成熟的數(shù)倉引擎都會配備查詢優(yōu)化器,但據(jù)了解,從 ClickHouse 技術(shù)方案衍生出來的查詢優(yōu)化器,目前在業(yè)界應(yīng)該沒有第二個方案。
? 然后是對元數(shù)據(jù)存儲和管理的優(yōu)化。使用 ClickHouse 比較多的團隊可能都會遇到一個問題,隨著集群管理的元數(shù)據(jù)越來越多,ZooKeeper/Keeper 會面臨很大的 coordinate 壓力,可能出現(xiàn)元數(shù)據(jù)不一致的問題,輕則查詢報錯,重則整個集群宕機。這類問題在 ByConity 從系統(tǒng)層面得到了解決。ByConity 基于高性能的分布式 key-value store(FoundationDB)做元數(shù)據(jù)管理,并在 catalog api 上層實現(xiàn)了完備事務(wù)語義(ACID)支持,提供了高效可靠的元數(shù)據(jù)服務(wù),能夠?qū)⒃獢?shù)據(jù)吞吐拉升到百萬級別。
除了架構(gòu)上的差異化亮點,ByConity 和 ClickHouse 在使用過程中又有哪些異同?社區(qū)也有不少開發(fā)者對此有疑問。前不久 ByConity 社區(qū)組織了一場直播,從使用角度對兩者差異做了介紹,主要從以下幾個關(guān)鍵維度展開:
? 在資源隔離與擴縮容設(shè)計上的架構(gòu)與組件差異
? 在庫表創(chuàng)建、數(shù)據(jù)導(dǎo)入與查詢上的差異
? 在事務(wù)支持與特殊表引擎上的差異
ByConity 與 ClickHouse 的差異總結(jié)(來源:ByConity 社區(qū))
感興趣的讀者可以在bilibili搜索ByConity官方賬號查看直播回放視頻進一步了解。
四、后續(xù)規(guī)劃
隨著 ByConity 正式官宣開源,后續(xù)項目會遵循開源社區(qū)的模式來運營和治理,社區(qū)治理原則相關(guān)的文檔目前已經(jīng)同步到項目 GitHub 上,并面向整個社區(qū)開放討論。
對于 ByConity 接下來的技術(shù)發(fā)展路線,團隊基于自身現(xiàn)狀初步做了一些規(guī)劃,今年下半年側(cè)重點會放在權(quán)限控制、數(shù)據(jù)安全和組件高可用等方向。還有一些社區(qū)關(guān)注度比較高的問題,比如對數(shù)據(jù)湖分析的支持,包括對接 Hudi、Iceberg 等功能,也在 Roadmap 規(guī)劃之中。
ByConity 2023 年技術(shù)路線 Roadmap
陳星表示,未來 ByConity 希望從一個只面向即時型分析的輕量級數(shù)倉,向一個能夠處理更多復(fù)雜工作負(fù)載、更成熟的數(shù)倉去演化。當(dāng)然,這其中挑戰(zhàn)非常大,也不是短時間內(nèi)能夠做好的,需要與社區(qū)共同努力。
對于一個新的開源項目,社區(qū)往往會非常關(guān)注項目的長期投入和發(fā)展問題。翟鹿淵表示,字節(jié)去年成立開源委員會,就是字節(jié)更加重視開源的一個信號,而開源委員會有一條原則是做精品項目,從公司層面會聚焦少數(shù)重點項目做長期的戰(zhàn)略投入,ByConity 是其中之一。另外,如前所述,ByConity 和 ByteHouse 研發(fā)團隊基本是完全重合的,只是每個人的工作有一部分在做商業(yè)版、一部分在解決開源社區(qū)相關(guān)反饋,開源和商業(yè)版融合度非常高。未來 ByConity 會朝著一個更加開放的引擎開發(fā)模式去發(fā)展,今年年中會將內(nèi)外部代碼層面完全拉齊,后續(xù)對 ByteHouse 的改動會基于 ByConity 源代碼用開源的方式來開發(fā),即先在上游開發(fā),開發(fā)完成后在再往回拉。這個開發(fā)模式調(diào)整可以說是大動干戈,但也從側(cè)面印證了字節(jié)長期投入 ByConity 的決心。
未來除了 ByConity 社區(qū)自身的代碼貢獻,字節(jié)內(nèi)部業(yè)務(wù)場景、ByteHouse 的客戶場景帶來的迭代和改進也會反哺給 ByConity,幫助 ByConity 持續(xù)迭代優(yōu)化。比如,字節(jié)內(nèi)部使用規(guī)模還在逐步增大,可能會打破以往設(shè)計方案的一些假設(shè)條件,導(dǎo)致調(diào)度策略或者資源分配策略要適應(yīng)內(nèi)部業(yè)務(wù)做優(yōu)化和調(diào)整,這些優(yōu)化都會輸出到 ByConity。商業(yè)化產(chǎn)品同理,商業(yè)版用戶在使用中遇到的問題或反饋的修改,也會同步到 ByConity。
五、寫在最后
對于一個開源項目,引入更多參與者、讓社區(qū)往多元化方向發(fā)展往往是重要目標(biāo)之一,ByConity 也不例外。從發(fā)布 Beta 版開始,ByConity 團隊就公布了社區(qū)路線圖,并積極與社區(qū)成員共同探討和解決大家在試用過程中遇到的問題,團隊有耐心、也有信心,更是非常期待未來能夠與更多開發(fā)者和合作伙伴一起共建共享,激發(fā)更多創(chuàng)造力。
對于社區(qū)多元化可能會給項目創(chuàng)始團隊帶來的新問題,比如項目無法按照最初規(guī)劃的技術(shù)發(fā)展路線演進等,陳星和翟鹿淵都表示,希望這個幸福的煩惱早些到來。
網(wǎng)頁搜索「GitHub - ByConity」查看官方地址;
ByConity官方微信公眾號回復(fù)「用戶手冊」,獲取ByConity完整背景和技術(shù)架構(gòu)。
采訪嘉賓介紹:
陳星,火山引擎分析型數(shù)據(jù)庫負(fù)責(zé)人,具體包括 ClickHouse、Doris、下一代云原生數(shù)據(jù)庫,支持內(nèi)部多種業(yè)務(wù)場景背后分析引擎。加入字節(jié)跳動數(shù)據(jù)平臺之前,在 IBM 從事 DB2 內(nèi)核研發(fā)工作,對數(shù)據(jù)庫技術(shù)有一些了解。
翟鹿淵,火山引擎 ByteHouse 產(chǎn)品經(jīng)理,主導(dǎo) ByteHouse 海外商業(yè)化和引擎 ByConity 開源。之前在 Kyligence 做 Apache Kylin 商業(yè)產(chǎn)品。
[責(zé)任編輯:linlin]
標(biāo)簽:
字節(jié)跳動開源ByConity:基于ClickHouse的存算分離架構(gòu)云原生數(shù)倉
“復(fù)星系”再出手融資,豫園股份擬發(fā)行80億定增
環(huán)球熱訊:微盟集團(02013)發(fā)布WAI 攜手大模型激活“應(yīng)用智能”
武漢武大創(chuàng)新投資有限公司(關(guān)于武漢武大創(chuàng)新投資有限公司介紹)
白雪公主讀后感手抄報_白雪公主讀后感-全球熱門
當(dāng)前觀察:安徽國資國企研究院揭牌成立
蘭州市城市生活垃圾分類宣教中心正式啟動運營 要聞
兵團2023中級會計報考時間:6月26日至7月10日_世界熱門
鄉(xiāng)村振興進行時丨鳳凰山莊繡球花開 絢爛整個夏天_全球快播報
每日關(guān)注!世乒賽:#陳夢王藝迪晉級女雙八強#
滲水、發(fā)霉、開裂、脫落!這個小區(qū)的墻皮“病”了兩年無人問
2023成都寵博會哪些展臺有免費試吃可以領(lǐng) 環(huán)球新消息