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