矩陣起源是一家專注于為企業(yè)用戶提供簡捷強(qiáng)大的數(shù)據(jù)操作系統(tǒng)的數(shù)據(jù)基礎(chǔ)軟件公司。公司創(chuàng)始團(tuán)隊(duì)來自騰訊云、Snowflake等國內(nèi)外知名的互聯(lián)網(wǎng)企業(yè)、軟件公司、數(shù)字化企業(yè)和開源社區(qū),核心團(tuán)隊(duì)為產(chǎn)品、研發(fā)、解決方案、生態(tài)和開源社區(qū)等領(lǐng)域的專家,在分布式架構(gòu)、數(shù)據(jù)庫、云計(jì)算、大數(shù)據(jù)及人工智能等領(lǐng)域積累了豐富經(jīng)驗(yàn)。
MatrixOne 是矩陣起源(MatrixOrigin)開源的一款超融合 HTAP 云原生數(shù)據(jù)庫,借助于全新設(shè)計(jì)和研發(fā)的統(tǒng)一分布式計(jì)算和存儲框架,使數(shù)據(jù)庫同時具備 TP、AP和Streaming三種能力,幫助客戶徹底打破數(shù)據(jù)孤島問題,成為企業(yè)智能化核心的數(shù)據(jù)基礎(chǔ)設(shè)施。得益于這一創(chuàng)新的架構(gòu)設(shè)計(jì),用戶可以在公有云、私有云、數(shù)據(jù)中心和邊緣節(jié)點(diǎn)上部署和使用MatrixOne。秉承“One Size Fits Most”的產(chǎn)品理念,MatrixOne將運(yùn)維工作簡化到極 致,使得數(shù)據(jù)應(yīng)用開發(fā)變得極為簡捷,同時也保證了數(shù)據(jù)處理的極 致性能。
推翻三座大山
分布式框架
MatrixCube作為當(dāng)時的分布式框架,提供了多副本存儲模式,每一份數(shù)據(jù)都保存 3 副本并且以分片(shard)形式保存,使得存儲的成本飆升。而基于Raft選舉的Leader節(jié)點(diǎn),頻繁成為了熱點(diǎn),各類操作都需要通過Leader節(jié)點(diǎn)進(jìn)行分發(fā),在極端業(yè)務(wù)場景下,Leader節(jié)點(diǎn)的負(fù)載會數(shù)倍于普通節(jié)點(diǎn)。
引擎眾多
早期的MatrixOne內(nèi)置了三種存儲引擎,三個引擎之間代碼復(fù)用率較低,使得對功能的維護(hù)需要投入更多人力。而基于因子化算法的Plan構(gòu)建方式過于激進(jìn)和抽象,在計(jì)算組內(nèi)部對其完全理解的程序員數(shù)量有限,往往添加功能時仍舊需要主開一人完成,新功能添加緩慢。
資源分配
舊架構(gòu)采用了存算不分離的架構(gòu),這個架構(gòu)導(dǎo)致了擴(kuò)展性較差。每擴(kuò)展一個單位的計(jì)算節(jié)點(diǎn)必須同步擴(kuò)展存儲資源。由于存儲采用了shard分片,使得在shard較大時影響了OLTP的性能,在shard較小時,又會影響OLAP性能。
在找到了三座大山之后,接下來要做的事情就是一一扳倒它們,田豐博士結(jié)合MatrixOne的產(chǎn)品愿景以及未來的技術(shù)趨勢,對于實(shí)驗(yàn)架構(gòu)進(jìn)行了總結(jié),并提出了MatrixOne獨(dú)有的架構(gòu)設(shè)想,從整個架構(gòu)的現(xiàn)狀來看,要分三步走:
第 一步,將舊架構(gòu)share nothing的框架破除,完成更靈活的解耦;
第二步,將多種引擎合二歸一,實(shí)現(xiàn)內(nèi)部引擎的大一統(tǒng);
第三部,重構(gòu)計(jì)算引擎,留有足夠的空間給未來的產(chǎn)品發(fā)展。
重生后的MatrixOne
新架構(gòu)通過解耦,最終實(shí)現(xiàn)了三個各自獨(dú)立的層級,每個層級有自己的對象單元與分工,不同類型的節(jié)點(diǎn)可以靈活伸縮,不再受到其他層的制約:
計(jì)算層,以計(jì)算節(jié)點(diǎn)Compute Node為單位,實(shí)現(xiàn)了計(jì)算和事務(wù)處理的Serverless化,又有自己的Cache,可以實(shí)現(xiàn)任意重啟與擴(kuò)縮容;
事務(wù)層,以數(shù)據(jù)庫節(jié)點(diǎn)Database Node為與日志節(jié)點(diǎn)Log Service為單位,提供完整的日志服務(wù)以及元數(shù)據(jù)信息,內(nèi)置Logtail用于保存最近數(shù)據(jù);
存儲層,全量數(shù)據(jù)保存在以S3 為代表的對象存儲中,實(shí)現(xiàn)了低成本的無線伸縮存儲方式,以File Service命名的統(tǒng)一文件操作服務(wù),實(shí)現(xiàn)了不同節(jié)點(diǎn)對底層存儲的無感知操作。
在確定了以TAE作為唯 一存儲引擎之后,對融合后的TAE引擎又做了諸多設(shè)計(jì)上的調(diào)整,才有了后來融合后的TAE存儲引擎。完成了單一引擎完成所有數(shù)據(jù)庫存儲行為的目標(biāo),并且具備了如下優(yōu)勢:
列存管理,統(tǒng)一的列存與壓縮,對于OLAP業(yè)務(wù)有著先天的性能優(yōu)勢;
事務(wù)處理,共享日志與DN節(jié)點(diǎn)共同完成對計(jì)算節(jié)點(diǎn)的事務(wù)支持;
冷熱分離,使用File Service以S3 對象存儲作為目標(biāo),每個計(jì)算節(jié)點(diǎn)都有自己的Cache。
多次運(yùn)行測試,得出置信度較高的結(jié)果:
早期的計(jì)算引擎中,兼容MySQL的大目標(biāo)沒有變化,但是對于節(jié)點(diǎn)調(diào)度、執(zhí)行計(jì)劃、SQL能力又有著更高的要求。重構(gòu)后的高性能計(jì)算引擎,既具備了實(shí)驗(yàn)架構(gòu)中計(jì)算引擎的MPP,又彌補(bǔ)了過去的諸多不足:
兼容MySQL,既有對MySQL協(xié)議的支持,又包含了對MySQL語法的支持;
融合引擎,基于DAG重新構(gòu)建執(zhí)行計(jì)劃,可以同時執(zhí)行TP和AP;
節(jié)點(diǎn)調(diào)度,未來可支持自適應(yīng)節(jié)點(diǎn)內(nèi)和節(jié)點(diǎn)間調(diào)度,同時滿足并發(fā)和并行執(zhí)行;
完善SQL能力,支持子查詢、窗口函數(shù)、CTE、Spill內(nèi)存溢出處理等。
積跬步以至千里
回顧歷時數(shù)月的架構(gòu)升級之路,充滿了各種辛酸和痛苦。無論考慮的多么充分,在實(shí)際開發(fā)中,總會遇到各種各樣意想不到的問題出現(xiàn),尤其是在一些關(guān)鍵問題上的困難,讓研發(fā)團(tuán)隊(duì)從開始的一籌莫展,到偶爾的靈光乍現(xiàn),再到很后面的零之曙光,走向最終的黎明時刻。個中三昧,不言而喻。
這些難題中,主要圍繞在存儲、事務(wù)、負(fù)載隔離與資源配比幾個方面。
尋找更合適的存儲
在意識到三副本存儲帶來的問題后,如何尋找一個新的存儲適配新架構(gòu),成為了當(dāng)時一大難題,而這個新的存儲必須滿足兩個核心需求,低成本與冷熱數(shù)據(jù)分離。
在對市面上的諸多存儲進(jìn)行了調(diào)研以及試驗(yàn)之后,AWS S3 成為了最終的選擇。單一副本,自帶的冷熱數(shù)據(jù)分離。
事務(wù)分工的調(diào)整
最初的新架構(gòu)中,計(jì)算節(jié)點(diǎn)CN與數(shù)據(jù)庫節(jié)點(diǎn)DN之間的分工是CN負(fù)責(zé)計(jì)算,計(jì)算結(jié)果推給DN,由DN完成事務(wù)。隨著開發(fā)進(jìn)度的不斷推進(jìn),這個分工開始出現(xiàn)了問題,DN對事務(wù)的處理能力成為整個系統(tǒng)的瓶頸。因此,對于CN和DN的分工,必須做重新定義:
CN負(fù)責(zé)所有的計(jì)算以及事務(wù)邏輯,DN負(fù)責(zé)保存元數(shù)據(jù)信息、日志信息以及事務(wù)裁決,DN不再成為瓶頸;
在日志中引入Logtail對象,用于保存最近日志中的關(guān)聯(lián)數(shù)據(jù),定期將Logtail的數(shù)據(jù)寫入S3 中,CN擴(kuò)容可以實(shí)時將Logtail數(shù)據(jù)同步至Cache,實(shí)現(xiàn)了部分?jǐn)?shù)據(jù)共享;
為事務(wù)大小設(shè)置閾值,超過閾值上限的事務(wù)直接寫S3,日志只保存記錄寫入記錄,未超過閾值的事務(wù)繼續(xù)由DN寫入,極大增加了吞吐量。
實(shí)現(xiàn)HTAP的工作負(fù)載隔離
作為HTAP數(shù)據(jù)庫,如何實(shí)現(xiàn)不同類型的工作負(fù)載隔離,是一個必須解決的問題。在完成了對舊的實(shí)驗(yàn)架構(gòu)的靈活解耦之后,工作負(fù)載的隔離也得以實(shí)現(xiàn):
服務(wù)器級別的隔離,硬件資源充裕的情況下,各個組件分別在不同的物理機(jī)運(yùn)行,接入同一個對象存儲;
容器級別的隔離,硬件資源有限的情況下,利用所有節(jié)點(diǎn)無狀態(tài)的特性,以容器作為各個節(jié)點(diǎn)的隔離手段。
實(shí)現(xiàn)資源配比的靈活調(diào)整
作為HTAP數(shù)據(jù)庫,日常業(yè)務(wù)中,不同業(yè)務(wù)場景的比例是在動態(tài)變化中,對于資源的配比也有著更高的要求,而舊架構(gòu)下的資源分配模式注定無法實(shí)現(xiàn)靈活調(diào)整,需要對各個節(jié)點(diǎn)實(shí)現(xiàn)更加精細(xì)化的管理,包含但不限于:
CN節(jié)點(diǎn)的分工,允許用戶對CN進(jìn)行劃分,用于TP或AP業(yè)務(wù),其中某項(xiàng)業(yè)務(wù)資源出現(xiàn)瓶頸之后,對CN進(jìn)行水平擴(kuò)容;
在不類業(yè)務(wù)的CN組之間,動態(tài)判斷各組的負(fù)載情況,當(dāng)前兩類業(yè)務(wù)的負(fù)載差異較大時,可以自動將閑置資源分配至繁忙組內(nèi);
通過租戶(account)的邏輯概念,實(shí)現(xiàn)邏輯資源的完全隔離,不同的租戶可以以獨(dú)享或共享的方式使用指定的CN資源。
寫在最后
矩陣起源作為一家數(shù)據(jù)智能領(lǐng)域的創(chuàng)新企業(yè)致力于成為數(shù)字世界的核心技術(shù)提供者。 矩陣起源專注建設(shè)開放的技術(shù)開源社區(qū)和生態(tài)系統(tǒng)、打造世界 級的團(tuán)隊(duì)、并通過業(yè)界領(lǐng)先的技術(shù)創(chuàng)新和工程能力,實(shí)現(xiàn)數(shù)據(jù)在數(shù)字世界中的任意存儲和任意計(jì)算,幫助用戶釋放數(shù)據(jù)的潛力和創(chuàng)新力(Store Anywhere, Compute Anywhere, Innovate Anywhere)。
整個MatrixOne的架構(gòu)升級之路,始于0. 4 迭代,在0. 6 迭代初步完成,歷時半年多,數(shù)十位一線研發(fā)與測試工程師投入其中,最終完成了今天的新分布式HTAP架構(gòu),團(tuán)隊(duì)與產(chǎn)品共同獲得了成長。在今年,MatirxOne 將會推出第 一個 GA 版本,為開發(fā)者持續(xù)創(chuàng)造價值。
(推廣)