cantian引擎的介紹
?專欄內容:
參天引擎內核架構
本專欄一起來聊聊參天引擎內核架構,以及如何實現多機的數據庫節點的多讀多寫,與傳統主備,MPP的區別,技術難點的分析,數據元數據同步,多主節點的情況下對故障容災的支持。手寫數據庫toadb
本專欄主要介紹如何從零開發,開發的步驟,以及開發過程中的涉及的原理,遇到的問題等,讓大家能跟上并且可以一起開發,讓每個需要的人成為參與者。
本專欄會定期更新,對應的代碼也會定期更新,每個階段的代碼會打上tag,方便階段學習。
?開源貢獻:
- toadb開源庫
個人主頁:我的主頁
管理社區:開源數據庫
座右銘:天行健,君子以自強不息;地勢坤,君子以厚德載物.
文章目錄
- cantian引擎的介紹
- 前言
- 概述
- cantian引擎是什么
- 多主分布式架構的特點
- 高可用
- 擴展性
- 應用無修改
- 多主分布式架構的技術難點
- 數據庫元數據的同步
- 數據庫分布式鎖
- 多節點事務一致性
- 多寫下的恢復
- 多機共享文件系統
- 參天引擎可以做什么
- 結尾
前言
國內數據庫的發展如火如荼,每年的各種大會都會聽到好消息,今年除了數據庫本身的各種技術演進之外,華為發布了參天引擎,而且是做為數據庫的一種基座形式,也就是所有數據庫可以在參天引擎基礎上,構建形成多主分布式架構的數據庫系統,這也就是它叫引擎的目的。
本專欄就來詳細聊一聊參天引擎內部架構,以及如何適配參天引擎。
概述
據華為官網發布的新聞,題為:華為宣布CANTIAN引擎開源,攜手共建數據庫存儲新生態,已經有萬里數據庫適配完成,萬里數據庫是基于mysql,也就是說mysql與參天引擎結合成功,達到了分布式數據庫集群,基于共享存儲的多主效果。
華為在數據庫方向上開源了GuassDB之后,又宣布開始了參天引擎,這又是什么神器呢,今天我們就一起來看一看。
cantian引擎是什么
隨著數據庫國產化的推進,基礎模型的數據庫大多都與國外品牌有了對標產品,比如說主從,延伸出來的一主多從,讀寫分離等,已經很成熟,也有很多中間鍵可以應用開源數據庫mysql,postgresql都有類型部署模式;
還有MPP模式,也就是元數據在master節點,通過切片將實際數據放在worker節點,已經有開源的citus, greenplum等數據庫支持;
但是對于數據庫巨頭oracle的 oracle RAC產品對標產品一直沒有進展,也就是說它還不能被很好的替代。
oracle RAC主要特點是高可用,不是其它一些模型能達到了,而華為cantian引擎的出現,就是干了這么一件事,可以對標oracle RAC了。
基于共享存儲的架構
oracle RAC其實是一種基于共享存儲的分布式集群架構,從上圖可以看到,集群中的每個數據庫節點都訪問同一份相同的數據,同時每個數據庫節點都可以進行讀寫操作,比如兩個節點上同時可以對同一張表進行插入數據操作。
這種架構模型下,集群中一個節點故障后,其它節點完全可以接管所有業務。
參天引擎的目標是讓數據庫具有“分布式架構+集中式體驗”的多主架構數據庫,它通過client,server, 存儲三層,將傳統單機數據庫,如mysql,postgresql與client進行結合,從而改造成多主的分布式集群式數據庫。
換句話說,參天引擎可以是一種標準服務,只要數據庫系統與client進行改造對接后,就可以使用server,存儲層,這樣就可以支持多主的分布式架構。
多主分布式架構的特點
oracle RAC類型的共享存儲下的分布式數據庫,有什么特點,或者它的優勢在那里呢?
在歷年的oracle RAC白皮書中反復提到這幾個特性,而且對它們進行持繼的更新演進,當然也是多主分布式架構的最核心特點。
高可用
集群中的多個節點完全對稱,也就是任意兩個節點是一模一樣的,這就是說業務可以運行在任意節點上,真實使用時只是通過負載均衡將業務分散到了各節點上,使負載達到了均衡。
各節點對稱,這一特性使得當任意節點故障時,業務可以立馬轉移到其它節點上,這與主從架構,MPP架構完全不同。
主從架構中,只有主具有處理所有業務的能力,從節點具有處理只讀業務的能力,當主節點故障時,需要重新選主,再進行業務切換;
而MPP架構中,特點區分更加明顯,它具有兩個節點角色,對于master角色的節點,只存儲元數據,也即數據分布信息,它的高可用一般也采用一主多從的形式,故障時處理與主從是一樣的;而對于worker角色的節點,它們存儲了一部分分片的數據,它們一般通過多副本機制達到冗余備份的高可用,故障節點的數量不能超過副本數量,副本越多管理成本越高。
按照oracle RAC最新的版本,這個故障處理的能力已經非常絲滑,可以達到事務級別的轉移,這在其它兩個架構,由于架構的限制很難做到。
業務連續性的用戶體驗,這在一些關鍵應用中體現非常重要,這里借用oracle rac技術白皮書中的一張圖來說明。
擴展性
當然對于多主架構,集群中增加一個節點,業務負載就可以立即分擔;同樣減少一個節點時,對應業務負載也可以轉移到剩余節點上。有點像現在的云部署的感覺,通過自動化的控制,完全可以按照業務負載調整資源的使用情況。
當然,這在其它架構也是很難達到的。
應用無修改
經過幾年的數據庫國產化后,這一點體驗比較深刻,現在都會支持單機,主從,MPP部署,但這三種都需要應用能夠做一些適配,尤其MPP部署,需要這種應用的業務要完全適合此種架構,就有很多限制,比如復雜聯合查詢就要特別當心了,最好提前能夠整改了。
而對于多主分布式架構,這些情況都不存在,不需要區分只讀,讀寫業務,也不需要擔心SQL的不支持,單機部署也開發正確,在多主分布式架構下就是可以的;
這大大簡化了業務應用的開發,同時對于業務應用架構設計的成本也降低了,不需要對每種數據庫的限制深入了解。
多主分布式架構的技術難點
多主的分布式架構為什么遲遲在國內沒有大的推進呢,它主要有幾大技術難點,每個難度都是一個重量型的開發,所以對企業,尤其是資本業講,很難在短期得到收益。
數據庫元數據的同步
對于多主的分布式系統,最先面臨的就是元數據的多機同步,數據庫也是一樣,在多寫的情況下,每個節點都會產生元數據,需要實時同步。
數據庫分布式鎖
多節點如果訪問同一數據元素時,需要進行加鎖,那這個鎖不再是單機系統下的某個內核變量,而是要擴展到分布式下多節點間的鎖,在多節點起到加鎖互斥的效果。當然在分布式下有很多實踐,但是數據庫這樣高頻使用場景下,如何能提高性能是不得不考慮的問題。
多節點事務一致性
在數據庫概念專欄,分享并發控制的可串行化相關內容,那些都是單機架構下的,如何在多節點時做到事務的并發一致性,需要將封鎖,時間戳,有效性確認幾種方式擴展到多節點。
其中事務號,也就是事務時間戳的實現,就有好幾種方式,如時鐘,統一分發的序號等等。
多寫下的恢復
多個節點都可以寫入數據,那么故障時,如何恢復,數據的一致性又如何保障呢?
比如兩個節點修改了數據,它們的先后順序的確定,單機也是由日志的時間戳方式進行排序,而多機時,如何使用統一的日志,那競爭必然加大。
在數據庫概念專欄中對于恢復,分享了幾種技術,如redo, checkpoint等,那對于redo,checkpoint都需要日志先落盤,或者對日志進行回收處理,在多節點間如何保障日志先于數據落盤。
多機共享文件系統
當然以上各點都是對于數據庫來講的,對于基于共享存儲的多主分布式架構,還有一個重要的技術難點,就是文件系統。
假如多個節點同時對一個表文件進行寫入,或者擴展,傳統的ext4,xfs肯定是不行的,多節點各自部署在獨立的服務器上,對應著多個操作系統,各自的文件系統元數據是不交互的,此時就會混亂。
而對于分布式文件系統,一般都會將元數據緩存在客戶端,也就是每個使用者的機器上,會導致更新不及時。
參天引擎可以做什么
從華為官方發布的消息來看,已經與廠商合作適配成功了,也達到了多主分布式集群的效果,從其它媒體發布的消息來看,測試的數據還是不錯。
目前看起來對于mysql進行了適配,另一個主流開源數據庫postgresql還沒有看到消息,其它也沒有看到更多介紹的文檔。
既然開源了,那接下來我們就從源碼角度看看,參天引擎可以做什么,拿postgresql來適配的話,難度會有多少。
結尾
非常感謝大家的支持,在瀏覽的同時別忘了留下您寶貴的評論,如果覺得值得鼓勵,請點贊,收藏,我會更加努力!
作者郵箱:study@senllang.onaliyun.com
如有錯誤或者疏漏歡迎指出,互相學習。