分析型資料庫:分散式分析型資料庫

星環科技發表於2023-04-17

分析型資料庫的另外一個發展方向就是以分散式技術來代替MPP的平行計算,一方面分散式技術比MPP有更好的可擴充套件性,對底層的異構軟硬體支援度更好,可以解決MPP資料庫的幾個關鍵架構問題。本文介紹分散式分析型資料庫。



— 背景介紹—

目前在分散式分析型資料庫領域,學術界今年的研究不多,主要是工業界在推動相關的技術發展。分散式分析型資料庫的儲存層一般採用分散式儲存或雲端儲存,而計算引擎層採用獨立的分散式計算引擎,而MPP資料庫的儲存層和計算層都是由多個資料庫例項來承擔的,這是兩者最大的架構區別。

在Hadoop開始興起的時候,分散式架構的可擴充套件性和彈性優勢就逐漸顯現出來,以HDFS為代表的大資料技術使大資料的處理在擴充套件性、彈性、容錯性、成本等方面取得進步,但是卻犧牲了傳統SQL資料庫例如事務、SQL語句、關係模型、安全管控等關鍵特性。SQL作為資料庫領域的事實標準語言,相比較用API(如MapReduce API,Spark API等)來構建大資料分析的解決方案有著先天的優勢。從2013年開始大量的SQL on Hadoop引擎的出現和快速成熟,並且在國內外企業獲得了大量生產落地,充分說明了SQL的重要性。

分散式分析型資料庫用於資料倉儲的建設,就需要解決分散式事務以及高併發的批處理問題,因此需要重新構建分散式事務引擎和計算引擎。當前行業內不同的資料庫採用的技術方案不盡相同,分散式事務引擎大多需要從0到1的構建,而分散式計算引擎有采用類似DAG的計算模型。

分散式資料庫與MPP資料庫的一個典型區別就是計算和儲存的部分分離,也就是儲存服務和計算服務不再繫結在一個程式中,數量可以不一致,這樣就實現了計算的彈性。在真實生產業務中,計算的彈性需求比較大,而儲存相當來說可預測性更強。一些廠商採用自研儲存的方式如星環科技的ArgoDB,而另外部分企業就直接基於雲端儲存的方式來構建其資料庫,將目標市場直接定位在公有云端,如AWS Redshift、Snowflake和Databricks SQL。不過私有云和公有云場景下的分析型資料庫的設計理念差異非常大,實際架構區別也非常明顯,我們將在後續章節展開。

— 總體架構 

由於分散式資料庫起步較晚,設計者在做架構設計的時候就能充分吸收MPP資料庫和Hadoop等技術的優勢,避開MPP資料庫的架構缺陷,並且解決彈性化、多租戶隔離等方面的各種問題。分散式分析型資料圖的邏輯架構如下圖所示,主要包含了服務層、SQL引擎、分散式事務引擎、分散式計算引擎和儲存引擎。與MPP資料庫的邏輯架構最主要的區別在於計算引擎和儲存引擎獨立,而MPP資料庫底層基於某一種關聯式資料庫,包含了SQL、事務、計算和儲存能力。由於幾個引擎相對獨立,架構上的靈活性就保證了有多種方式可以解決原有MPP資料庫的架構問題。

  • 分散式儲存引擎

在分散式儲存引擎這一層,目前行業內有比較多的基於Paxos或Raft協議打造的高可用的分散式儲存。由於用於分析型場景,資料儲存格式一般都採用列式資料儲存,典型的實現有ORC和Parquet檔案格式。在分析場景下僅讀取需要的列資料而無需讀取其他不相關列,節省了IO從而有很高的資料讀吞吐;另外一個列的資料採用同樣的編碼方式(如RLE、Delta、字典編碼等),因此資料有很高的資料壓縮率,一般可以做到5~10x的壓縮比。另外,由於不同的列已經分開儲存,一般會設計並行讀資料的API,每個執行緒讀取不同的列資料,從而提高並行讀資料能力。基於列式儲存的另外一個好處就是更好的支援各種結構化和非結構化資料,從而可以在一個平臺內支援多樣的資料型別的資料分析。

列式儲存對讀資料有很大的效能優勢,一般都會設計介面跟上層的計算層對接,提供讀取、過濾下推、索引等讀寫介面。在支援資料寫入的能力上,列式儲存不如行式儲存,一般需要透過在上層增加一個記憶體buffer的方式來加速,如MariaDB的Version Buffer。

另外分散式事務也是分散式儲存的一個重要特性與要求,一般都採用MVCC和Compaction機制來實現。在列式儲存中去修改給定一行的資料是比較複雜的,因此在實際操作每個事務操作並不會直接修改對應的欄位的值,而是在生成一個新的版本,並在對應欄位的block生成一個只包含要修改的資料的新版本的資料塊。每個新版本操作就生成一個新資料塊,在讀取資料的時候,會根據有效的事務號來讀取相關的資料塊並和基礎資料合併生成最終的資料值。隨著資料庫的版本增加,資料讀的速度會下降,因此需要啟動Compaction機制來合併,將大量的多版本檔案合併為少量的檔案,從而實現讀寫能力的有效平衡。

在實際功能中,還需要考慮關於分散式管理和運維方面的能力,包括對磁碟或節點的增刪管理能力,資料遷移能力等。

  • 分散式計算引擎

分散式計算引擎是另外一個重要的組成,一個優秀的引擎包括計算框架、各種分散式計算的運算元、最佳化器以及資源管理能力。在計算框架方面,一般選擇DAG或MPP模式,根據不同的設計需求來選擇。在計算運算元方面,圍繞著SQL的原語,可以設計大量的運算元,譬如JOIN演算法就可以有包括hash join、sort merge join、index scan join、skew scan join等多種不同的實現,並對接到CBO最佳化器來做自動化的選擇。這個方向的長期演進方向就是自治資料庫,透過大量的最佳化規則和機器學習能力來產生針對使用者場景的更多最佳化規則,從而讓資料庫可以自動的選擇最合適的執行計劃,無需DBA的手工干預。

在資源管理方面,如果跟現有的資源管理框架有效結合也是分散式資料庫的重要工作之一,包括YARN、Kubernetes以及各個公有云平臺。無論是Spark、Flink等開源資源管理框架,還是各個商業的分析型資料庫,都在大力的推動資源管理模式的最佳化,從而更好的支援多租戶以及與雲端計算的結合。

  • 分散式事務引擎

在分散式資料庫領域,分散式事務處理和最佳化是非常熱門的關鍵技術,如何在複雜的系統架構和容錯設計下保證資料的一致性,以及有多種事務隔離級別的支援(序列化、可重複度、Read committed等),能夠擴充資料庫去支撐更多的應用。兩階段提交(2PC)、MVCC、基於快照的事務隔離等都是重要的技術實現。由於分析型資料庫主要處理低併發度的事務操作,比較多的都是批次的資料修改或插入,因此對事務的併發度要求不高。在實現中,甚至可以採用一些低併發度但是實現簡單的演算法,如兩階段封鎖(2PL)等演算法。

  • SQL引擎

SQL引擎為開發者提供SQL開發能力,是業務開發的核心介面,因此各個資料庫都在努力提供完善的SQL支援,以及完整的SQL最佳化能力。由於Oracle、Teradata等資料庫的SQL功能非常完善,提供Oracle與Teradata的資料庫相容性是個非常有挑戰的工作,也需要長期持續的投入。

— 星環分析型資料庫ArgoDB 

隨著大資料技術在企業中應用得越來越深,國內的企業資料架構變得越來越複雜,主要體現在離線業務與線上業務並存,分析型業務與檢索型業務並存,結構化資料與非結構化資料並存,對資料庫效能、多租戶服務能力的要求也越來越高。企業對效能要求超過彈性或者成本,因此亟需有更為優秀效能的分散式分析型資料庫,這也是私有云領域分析型資料庫的主要發展方向。

軟體的設計需要充分考慮硬體的特性,從SAS硬碟,到SATA SSD,到PCIE-SSD,再到Memory,效能都有著數量級的增長,也推動著資料庫架構的重新設計。在應用需求和技術架構的雙重推動下,星環科技從2014年即開始規劃不依賴於Hadoop儲存的分析型資料庫,重用已有的SQL、事務和分散式計算引擎的能力,自研新一代的基於快閃記憶體的分散式儲存,到2018年正式推出了快閃記憶體資料庫ArgoDB,目標能夠作為資料倉儲、資料湖和資料集市的統一解決方案。

ArgoDB的架構如上圖所示,主要的核心元件主要包括分散式計算引擎Crux、SQL編譯器、分散式儲存管理層TDDMS以及儲存引擎Holodesk。

SQL編譯器繼承了Inceptor產品的優秀能力,實現了SQL 99的完整相容性,支援PL/SQL以及DB2 SQL PL儲存過程規範,並且原創的支援了Oracle、DB2和Teradata的方言。為了滿足企業的數倉需求,ArgoDB也支援分散式事務管理和四種隔離級別。

ArgoDB在資料庫內部實現了自己的資源排程以更好的支援不同業務的併發SQL任務,並與平臺本身的排程系統結合,實現了兩個層級的更加細化的資源管理和排程能力。首先ArgoDB有個常駐服務,資料庫啟動後就預先申請了CPU和記憶體資源,並將資源劃分為多個資源池。除了基於FIFO或FAIR策略為每個SQL分配資源以外,ArgoDB還增加了一個Furion機制,基於一個樹形的結構來資源管理,同一個樹節點下的各個子節點允許資源互藉資源,每個樹節點允許不同的使用者或者應用設定ACL或affinity,實際排程的時候,只要有一個CPU core資源空閒,就排程某個task,儘可能的的讓資源有效利用。為了更好的支援多業務,ArgoDB允許根據使用者名稱、IP、業務型別、提交時間等特性來設定不同的優先順序和排程策略,允許搶佔式排程。另外每個資源池都保證最小的資源,從而避免飢餓排程問題。



ArgoDB將分散式儲存引擎解構為通用分散式儲存管理層TDDMS與底層儲存引擎Holodesk兩塊。TDDMS將底層儲存引擎抽象為一組介面,包括儲存的讀寫操作介面、事務操作介面、計算引擎的最佳化介面等,任何實現這些介面的儲存引擎都能以外掛的形式接入ArgoDB。TDDMS基於分散式一致性協議Raft實現的儲存引擎,利用它可以實現儲存引擎管理的高可用和備份災備能力,並且提供運維管理能力。由於TDDMS在設計上的使用了資料儲存的引擎化管理,它能夠接入新的專用儲存,從而解決了對Hadoop生態技術的依賴問題。TDDMS在設計上可以接入多模態的儲存,既而與上層計算引擎配合,實現多模態的統一儲存和統一分析能力,在實際業務中是個重要的創新,避免每個資料庫都要垂直的實現儲存管理的工作。



Holodesk透過基於快閃記憶體的行列混合儲存,針對快閃記憶體SSD強大的隨機IO能力,以及優於普通HDD盤順序讀寫能力,做了資料讀寫的專項最佳化,實現了資料快速的讀寫能力,進而可以是業務獲得更優秀的分析能力。Holodesk也支援多種輔助索引技術,支援資料塊級別的預先聚合,極大地增強了資料的檢索效能,能更好地適配混合型的業務場景。但Holodesk並不僅僅只能使用SSD,也支援記憶體+快閃記憶體+磁碟的三級混合儲存。多級儲存使得使用者可以更好的在效能和硬體預算間找到平衡點。



分散式計算引擎Crux是一個向量化的計算引擎,採用的基於DAG模式的計算框架,內部由多個無狀態的執行器組成,可以根據業務負載來調整計算彈性化。計算引擎既可以快速讀取批次儲存檔案,也可以高速地執行少量資料的簡單查詢和複雜查詢。記憶體資料格式的設計與列式儲存適配,儘可能地減少了資料在記憶體中轉換的時間。同時,能夠動態分析SQL結構,基於向量化的思想選取高效的執行時行列物件模型,在提升效能的同時顯著節省記憶體使用。ArgoDB的整體的業務查詢架構如下所示,使用者的SQL業務經過SQL編譯器生產執行計劃和Runtime Context,然後傳送給Crux Executor;Executor透過TDDMS來訪問儲存層的資料,其中F1/F2/F3/F4等都代表一個資料塊,Holodesk預設採用3副本方式儲存,然後經過TDDMS Tablet Server來訪問本地檔案系統上的儲存的實際資料塊。

Crux Executor和TDDMS儲存是獨立分層的,它們各自可以根據負載情況來獨立的彈性擴縮容,因此解決了可擴充套件性問題,尤其是計算的可擴充套件。未來,我們計劃將TDDMS Tablet Server與各個雲平臺對接,可以直接與雲上的檔案系統高速互動打造雲上的資料分析能力,服務於公有云的企業客戶。ArgoDB本身實現了資料庫內的資源管理,底層基於容器技術和Kubernetes做系統層的資源排程,透過兩層資源排程機制實現了非常好的多租戶能力。



基於先進的架構設計與規劃,ArgoDB在2年內也落地了大量的金融級生產案例。此外,在國際基準組織TPC的資料分析決策測試TPC-DS的測試中,星環Inceptor是國際上第一個 透過測試的產品,而ArgoDB是全球第四個,這也充分說明了整體架構的先進性。

— 小結—

本文介紹了分散式分析型資料庫的架構原理,以及星環分析型資料庫ArgoDB的核心能力。分散式資料庫相比於MPP資料庫能夠實現存算分離,這樣就能實現了計算的彈性。那麼更進一步的,在傳統的企業資料運用中,常常會出現企業的系統資料散落在各個資料儲存中的狀況,資料分析需求往往是跨庫的,這類需求又該如何解決呢?下一篇將介紹資料聯邦架構。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994106/viewspace-2946138/,如需轉載,請註明出處,否則將追究法律責任。

相關文章