崑崙分散式資料庫架構介紹

KunlunDB發表於2022-01-13
一、前言


崑崙分散式資料庫叢集(下文簡稱崑崙資料庫)是一個分散式關聯式資料庫管理系統,面向TB和PB級別海量資料處理,以高吞吐量和低延時處理海量資料高併發讀寫請求。

它提供健壯的事務ACID保障,高效易用的分散式查詢處理,高可擴充套件性,高可用性和透明的分庫分表資料處理功能,業務層和終端使用者無感知的水平擴充套件能力,是典型的 NewSQL分散式資料庫系統。 應用軟體開發者按照使用單節點關聯式資料庫相同的方法使用崑崙資料庫,就可以得到所有上述NewSQL資料庫的優點,完全不需要考慮資料的分割槽方式等儲存細節。


這樣,應用開發者就可以非常快速的開發健壯可靠的,高可用和高可擴充套件的資訊系統,來處理PB級海量資料。 所有的海量資料管理的挑戰和困難都由崑崙系統來解決,從而大大降低了開發分散式系統的時間成本和資金成本和技術難度,並且全面提升其產品質量,大大加快應用開發和變更過程中的上線進度。


二、架構

崑崙分散式資料庫架構圖解

一個崑崙資料庫叢集有3類元件構成:一個或者多個計算節點,一個或者多個儲存shard以及一個後設資料叢集

2.1  計算節點

本軟體是崑崙資料庫的計算節點,基於PostgreSQL-11.5開發。為了實現自動的DDL同步及複製以及分散式事務,分散式查詢處理等高階功能,我們大量地修改了PostgreSQL原始碼,而不是直接使用其FDW介面。 我們的程式碼保持了很好的模組化,方便將來可以繼續跟隨PostgreSQL版本更新。

kunlun-storage是崑崙資料庫的儲存節點,它是我們基於percona-server-8.0深度最佳化開發的MySQL分支。 使用者必須使用kunlun-storage軟體組建崑崙資料庫的儲存叢集和後設資料叢集,因為崑崙資料庫叢集需要的關鍵功能只存在於kunlun-storage中,並且它還包含了社群版MySQL-8.0 XA事務處理的所有容災缺陷的修復;最後,kunlun-storage在XA事務處理方面比社群版mysql有大幅效能最佳化。計算節點使用PostgreSQL協議(後續會支援MySQL客戶端協議)接收和驗證使用者的連線請求,驗證透過後,就接收和處理連線上發來的查詢並返回結果給客戶端。

2.2  儲存shard

使用者可以根據工作負載來增減計算節點,每個計算節點彼此平等和獨立,沒有依賴關係,都可以處理使用者連線和讀寫請求。計算節點含有每個資料表以及其他資料庫物件的後設資料,但是使用者資料儲存在儲存shard中。

執行一個SQL時,計算節點解析該語句,然後對它做分散式查詢最佳化,然後透過與後端儲存shard做互動來完成分散式查詢執行。互動的方法就是根據SQL語句的需要和資料在後端shard的分佈資訊,為相關的後端儲存shard生成SQL語句。

如果執行的SQL語句是 SELECT 或者 INSERT/DELETE/UPDATE...RETURNING 而不是簡單的 INSERT/DELETE/UPDATE, 那麼計算節點會併發地傳送語句然後接收結果,最後合併處理所有後端儲存shard返回的結果,形成最終的查詢結果,返回給客戶端。

每個儲存shard 儲存著一部分使用者表或者表分割槽,每個shard的資料子集沒有交集;每個儲存shard是一個MySQL binlog複製叢集,透過標準的MySQL MGR single master 模式或者基於傳統的row based binlog複製的強同步機制來實現高可用性。

一個shard的主節點接受來自計算節點的讀寫請求,執行請求並返回結果給計算節點;啟用了備機讀功能時,shard的備節點可以接收和處理來自計算節點的只讀請求。

使用者可以根據資料量的增加和減少來增加和較少儲存shard,資料會自動均勻分散到所有shard上面,從而達到自動和透明的高可擴充套件性。

2.3  後設資料叢集

後設資料叢集也是一個MySQL binlog複製叢集,儲存著一個崑崙資料庫叢集的後設資料。多個資料庫叢集可以共用同一個後設資料叢集。

最後,崑崙資料庫還有一個cluster_mgr程式,它負責維護正確的叢集和節點狀態,佔用資源極少。


-END-


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

相關文章