分析型數據庫的另外一個發(fā)展方向就是以分布式技術來代替MPP的并行計算,一方面分布式技術比MPP有更好的可擴展性,對底層的異構軟硬件支持度更好,可以解決MPP數據庫的幾個關鍵架構問題。本文介紹分布式分析型數據庫。
— 背景介紹—
目前在分布式分析型數據庫領域,學術界今年的研究不多,主要是工業(yè)界在推動相關的技術發(fā)展。分布式分析型數據庫的存儲層一般采用分布式存儲或云存儲,而計算引擎層采用獨立的分布式計算引擎,而MPP數據庫的存儲層和計算層都是由多個數據庫實例來承擔的,這是兩者最大的架構區(qū)別。
在Hadoop開始興起的時候,分布式架構的可擴展性和彈性優(yōu)勢就逐漸顯現(xiàn)出來,以HDFS為代表的大數據技術使大數據的處理在擴展性、彈性、容錯性、成本等方面取得進步,但是卻犧牲了傳統(tǒng)SQL數據庫例如事務、SQL語句、關系模型、安全管控等關鍵特性。SQL作為數據庫領域的事實標準語言,相比較用API(如MapReduce API,Spark API等)來構建大數據分析的解決方案有著先天的優(yōu)勢。從2013年開始大量的SQL on Hadoop引擎的出現(xiàn)和快速成熟,并且在國內外企業(yè)獲得了大量生產落地,充分說明了SQL的重要性。
分布式分析型數據庫用于數據倉庫的建設,就需要解決分布式事務以及高并發(fā)的批處理問題,因此需要重新構建分布式事務引擎和計算引擎。當前行業(yè)內不同的數據庫采用的技術方案不盡相同,分布式事務引擎大多需要從0到1的構建,而分布式計算引擎有采用類似DAG的計算模型。
分布式數據庫與MPP數據庫的一個典型區(qū)別就是計算和存儲的部分分離,也就是存儲服務和計算服務不再綁定在一個進程中,數量可以不一致,這樣就實現(xiàn)了計算的彈性。在真實生產業(yè)務中,計算的彈性需求比較大,而存儲相當來說可預測性更強。一些廠商采用自研存儲的方式如星環(huán)科技的ArgoDB,而另外部分企業(yè)就直接基于云存儲的方式來構建其數據庫,將目標市場直接定位在公有云端,如AWS Redshift、Snowflake和Databricks SQL。不過私有云和公有云場景下的分析型數據庫的設計理念差異非常大,實際架構區(qū)別也非常明顯,我們將在后續(xù)章節(jié)展開。
— 總體架構?—
由于分布式數據庫起步較晚,設計者在做架構設計的時候就能充分吸收MPP數據庫和Hadoop等技術的優(yōu)勢,避開MPP數據庫的架構缺陷,并且解決彈性化、多租戶隔離等方面的各種問題。分布式分析型數據圖的邏輯架構如下圖所示,主要包含了服務層、SQL引擎、分布式事務引擎、分布式計算引擎和存儲引擎。與MPP數據庫的邏輯架構最主要的區(qū)別在于計算引擎和存儲引擎獨立,而MPP數據庫底層基于某一種關系數據庫,包含了SQL、事務、計算和存儲能力。由于幾個引擎相對獨立,架構上的靈活性就保證了有多種方式可以解決原有MPP數據庫的架構問題。
?
- 分布式存儲引擎
在分布式存儲引擎這一層,目前行業(yè)內有比較多的基于Paxos或Raft協(xié)議打造的高可用的分布式存儲。由于用于分析型場景,數據存儲格式一般都采用列式數據存儲,典型的實現(xiàn)有ORC和Parquet文件格式。在分析場景下僅讀取需要的列數據而無需讀取其他不相關列,節(jié)省了IO從而有很高的數據讀吞吐;另外一個列的數據采用同樣的編碼方式(如RLE、Delta、字典編碼等),因此數據有很高的數據壓縮率,一般可以做到5~10x的壓縮比。另外,由于不同的列已經分開存儲,一般會設計并行讀數據的API,每個線程讀取不同的列數據,從而提高并行讀數據能力?;诹惺酱鎯Φ牧硗庖粋€好處就是更好的支持各種結構化和非結構化數據,從而可以在一個平臺內支持多樣的數據類型的數據分析。
?
列式存儲對讀數據有很大的性能優(yōu)勢,一般都會設計接口跟上層的計算層對接,提供讀取、過濾下推、索引等讀寫接口。在支持數據寫入的能力上,列式存儲不如行式存儲,一般需要通過在上層增加一個內存buffer的方式來加速,如MariaDB的Version Buffer。
另外分布式事務也是分布式存儲的一個重要特性與要求,一般都采用MVCC和Compaction機制來實現(xiàn)。在列式存儲中去修改給定一行的數據是比較復雜的,因此在實際操作每個事務操作并不會直接修改對應的字段的值,而是在生成一個新的版本,并在對應字段的block生成一個只包含要修改的數據的新版本的數據塊。每個新版本操作就生成一個新數據塊,在讀取數據的時候,會根據有效的事務號來讀取相關的數據塊并和基礎數據合并生成最終的數據值。隨著數據庫的版本增加,數據讀的速度會下降,因此需要啟動Compaction機制來合并,將大量的多版本文件合并為少量的文件,從而實現(xiàn)讀寫能力的有效平衡。
?
在實際功能中,還需要考慮關于分布式管理和運維方面的能力,包括對磁盤或節(jié)點的增刪管理能力,數據遷移能力等。
- 分布式計算引擎
分布式計算引擎是另外一個重要的組成,一個優(yōu)秀的引擎包括計算框架、各種分布式計算的算子、優(yōu)化器以及資源管理能力。在計算框架方面,一般選擇DAG或MPP模式,根據不同的設計需求來選擇。在計算算子方面,圍繞著SQL的原語,可以設計大量的算子,譬如JOIN算法就可以有包括hash join、sort merge join、index scan join、skew scan join等多種不同的實現(xiàn),并對接到CBO優(yōu)化器來做自動化的選擇。這個方向的長期演進方向就是自治數據庫,通過大量的優(yōu)化規(guī)則和機器學習能力來產生針對用戶場景的更多優(yōu)化規(guī)則,從而讓數據庫可以自動的選擇最合適的執(zhí)行計劃,無需DBA的手工干預。
在資源管理方面,如果跟現(xiàn)有的資源管理框架有效結合也是分布式數據庫的重要工作之一,包括YARN、Kubernetes以及各個公有云平臺。無論是Spark、Flink等開源資源管理框架,還是各個商業(yè)的分析型數據庫,都在大力的推動資源管理模式的優(yōu)化,從而更好的支持多租戶以及與云計算的結合。
- 分布式事務引擎
在分布式數據庫領域,分布式事務處理和優(yōu)化是非常熱門的關鍵技術,如何在復雜的系統(tǒng)架構和容錯設計下保證數據的一致性,以及有多種事務隔離級別的支持(串行化、可重復度、Read committed等),能夠拓展數據庫去支撐更多的應用。兩階段提交(2PC)、MVCC、基于快照的事務隔離等都是重要的技術實現(xiàn)。由于分析型數據庫主要處理低并發(fā)度的事務操作,比較多的都是批量的數據修改或插入,因此對事務的并發(fā)度要求不高。在實現(xiàn)中,甚至可以采用一些低并發(fā)度但是實現(xiàn)簡單的算法,如兩階段封鎖(2PL)等算法。
- SQL引擎
SQL引擎為開發(fā)者提供SQL開發(fā)能力,是業(yè)務開發(fā)的核心接口,因此各個數據庫都在努力提供完善的SQL支持,以及完整的SQL優(yōu)化能力。由于Oracle、Teradata等數據庫的SQL功能非常完善,提供Oracle與Teradata的數據庫兼容性是個非常有挑戰(zhàn)的工作,也需要長期持續(xù)的投入。
— 星環(huán)分析型數據庫ArgoDB?—
隨著大數據技術在企業(yè)中應用得越來越深,國內的企業(yè)數據架構變得越來越復雜,主要體現(xiàn)在離線業(yè)務與在線業(yè)務并存,分析型業(yè)務與檢索型業(yè)務并存,結構化數據與非結構化數據并存,對數據庫性能、多租戶服務能力的要求也越來越高。企業(yè)對性能要求超過彈性或者成本,因此亟需有極致性能的分布式分析型數據庫,這也是私有云領域分析型數據庫的主要發(fā)展方向。
軟件的設計需要充分考慮硬件的特性,從SAS硬盤,到SATA SSD,到PCIE-SSD,再到Memory,性能都有著數量級的增長,也推動著數據庫架構的重新設計。在應用需求和技術架構的雙重推動下,星環(huán)科技從2014年即開始規(guī)劃不依賴于Hadoop存儲的分析型數據庫,重用已有的SQL、事務和分布式計算引擎的能力,自研新一代的基于閃存的分布式存儲,到2018年正式推出了閃存數據庫ArgoDB,目標能夠作為數據倉庫、數據湖和數據集市的統(tǒng)一解決方案。
?
ArgoDB的架構如上圖所示,主要的核心組件主要包括分布式計算引擎Crux、SQL編譯器、分布式存儲管理層TDDMS以及存儲引擎Holodesk。
SQL編譯器繼承了Inceptor產品的優(yōu)秀能力,實現(xiàn)了SQL 99的完整兼容性,支持PL/SQL以及DB2 SQL PL存儲過程規(guī)范,并且原創(chuàng)的支持了Oracle、DB2和Teradata的方言。為了滿足企業(yè)的數倉需求,ArgoDB也支持分布式事務管理和四種隔離級別。
ArgoDB在數據庫內部實現(xiàn)了自己的資源調度以更好的支持不同業(yè)務的并發(fā)SQL任務,并與平臺本身的調度系統(tǒng)結合,實現(xiàn)了兩個層級的更加細化的資源管理和調度能力。首先ArgoDB有個常駐服務,數據庫啟動后就預先申請了CPU和內存資源,并將資源劃分為多個資源池。除了基于FIFO或FAIR策略為每個SQL分配資源以外,ArgoDB還增加了一個Furion機制,基于一個樹形的結構來資源管理,同一個樹節(jié)點下的各個子節(jié)點允許資源互借資源,每個樹節(jié)點允許不同的用戶或者應用設定ACL或affinity,實際調度的時候,只要有一個CPU core資源空閑,就調度某個task,最大程度的讓資源有效利用。為了更好的支持多業(yè)務,ArgoDB允許根據用戶名、IP、業(yè)務類型、提交時間等特性來設定不同的優(yōu)先級和調度策略,允許搶占式調度。另外每個資源池都保證最小的資源,從而避免饑餓調度問題。
?
ArgoDB將分布式存儲引擎解構為通用分布式存儲管理層TDDMS與底層存儲引擎Holodesk兩塊。TDDMS將底層存儲引擎抽象為一組接口,包括存儲的讀寫操作接口、事務操作接口、計算引擎的優(yōu)化接口等,任何實現(xiàn)這些接口的存儲引擎都能以插件的形式接入ArgoDB。TDDMS基于分布式一致性協(xié)議Raft實現(xiàn)的存儲引擎,利用它可以實現(xiàn)存儲引擎管理的高可用和備份災備能力,并且提供運維管理能力。由于TDDMS在設計上的使用了數據存儲的引擎化管理,它能夠接入新的專用存儲,從而解決了對Hadoop生態(tài)技術的依賴問題。TDDMS在設計上可以接入多模態(tài)的存儲,既而與上層計算引擎配合,實現(xiàn)多模態(tài)的統(tǒng)一存儲和統(tǒng)一分析能力,在實際業(yè)務中是個重要的創(chuàng)新,避免每個數據庫都要垂直的實現(xiàn)存儲管理的工作。
?
Holodesk通過基于閃存的行列混合存儲,針對閃存SSD強大的隨機IO能力,以及優(yōu)于普通HDD盤順序讀寫能力,做了數據讀寫的專項優(yōu)化,實現(xiàn)了數據快速的讀寫能力,進而可以是業(yè)務獲得更優(yōu)秀的分析能力。Holodesk也支持多種輔助索引技術,支持數據塊級別的預先聚合,極大地增強了數據的檢索性能,能更好地適配混合型的業(yè)務場景。但Holodesk并不僅僅只能使用SSD,也支持內存+閃存+磁盤的三級混合存儲。多級存儲使得用戶可以更好的在性能和硬件預算間找到平衡點。
?
分布式計算引擎Crux是一個向量化的計算引擎,采用的基于DAG模式的計算框架,內部由多個無狀態(tài)的執(zhí)行器組成,可以根據業(yè)務負載來調整計算彈性化。計算引擎既可以快速讀取批量存儲文件,也可以高速地運行少量數據的簡單查詢和復雜查詢。內存數據格式的設計與列式存儲適配,最大程度地減少了數據在內存中轉換的時間。同時,能夠動態(tài)分析SQL結構,基于向量化的思想選取高效的運行時行列對象模型,在提升性能的同時顯著節(jié)省內存使用。ArgoDB的整體的業(yè)務查詢架構如下所示,用戶的SQL業(yè)務經過SQL編譯器生產執(zhí)行計劃和Runtime Context,然后發(fā)送給Crux Executor;Executor通過TDDMS來訪問存儲層的數據,其中F1/F2/F3/F4等都代表一個數據塊,Holodesk默認采用3副本方式存儲,然后經過TDDMS Tablet Server來訪問本地文件系統(tǒng)上的存儲的實際數據塊。
?
Crux Executor和TDDMS存儲是獨立分層的,它們各自可以根據負載情況來獨立的彈性擴縮容,因此解決了可擴展性問題,尤其是計算的可擴展。未來,我們計劃將TDDMS Tablet Server與各個云平臺對接,可以直接與云上的文件系統(tǒng)高速交互打造云上的數據分析能力,服務于公有云的企業(yè)客戶。ArgoDB本身實現(xiàn)了數據庫內的資源管理,底層基于容器技術和Kubernetes做系統(tǒng)層的資源調度,通過兩層資源調度機制實現(xiàn)了非常好的多租戶能力。
?
基于先進的架構設計與規(guī)劃,ArgoDB在2年內也落地了大量的金融級生產案例。此外,在國際基準組織TPC的數據分析決策測試TPC-DS的測試中,星環(huán)Inceptor是國際上首個通過測試的產品,而ArgoDB是全球第四個,這也充分說明了整體架構的先進性。
— 小結—文章來源:http://www.zghlxwxcb.cn/news/detail-413026.html
本文介紹了分布式分析型數據庫的架構原理,以及星環(huán)分析型數據庫ArgoDB的核心能力。分布式數據庫相比于MPP數據庫能夠實現(xiàn)存算分離,這樣就能實現(xiàn)了計算的彈性。那么更進一步的,在傳統(tǒng)的企業(yè)數據運用中,常常會出現(xiàn)企業(yè)的系統(tǒng)數據散落在各個數據存儲中的狀況,數據分析需求往往是跨庫的,這類需求又該如何解決呢?下一篇將介紹數據聯(lián)邦架構。文章來源地址http://www.zghlxwxcb.cn/news/detail-413026.html
到了這里,關于分析型數據庫:分布式分析型數據庫的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!