GaussDB(for Mongo)只讀副本的設計與實現

      網友投稿 975 2025-03-31

      相關資訊:6月30日,華為openGauss正式開源,開放openGauss數據庫源代碼,并成立openGauss開源社區。

      GaussDB(for Mongo)是華為云自主研發兼容MongoDB4.0接口的文檔數據庫。其領先的副本集計算存儲架構,對于傳統MongoDB社區版有如下優勢:

      l??秒級添加Secondary節點(相比社區版Mongo小時級添加Secondary節點)

      l??基于WAL復制, Secondary節點無寫IO,從根本上解決社區版Secondary節點Oplog脫節問題

      l??Primary/Secondary無任何IO交互,Secondary節點個數理論無上限, 支持百萬OPS的讀事務能力

      l??LSMTree Compaction 計算/IO卸載到Compaction統一調度池,集中管理,不浪費用戶讀寫IO

      GaussDB(for Mongo)?架構介紹

      GaussDB(for Mongo) 是兼容mongodb4.0接口的計算存儲分離架構的高性能數據庫。通過底層存儲來保證多副本的數據的安全可靠,上層計算節點可以做到無狀態的運行。

      GaussDB(for Mongo) 有以下幾個優點:

      1.秒級的節點擴容能力

      GaussDB(for Mongo) 具有秒級的節點擴容能力。在業務流量突發的時候,可以迅速采取擴容措施,應對業務高峰。傳統的 mongodb 因為采用的是 計算節點讀取本地數據的方式, 擴容節點后,新加節點還需要等待節點同步完主節點數據才可以對外提供服務。如果數據量很大, 新增節點的數據同步會花費很多時間,在這段時間內,新增節點非但不能提供服務,反而因為需要從集群同步數據的緣故,進一步加重了數據庫的負載。

      2.?從根源上杜絕了社區版MongoDB數據被Rollback的問題

      社區版mongodb副本集基于Raft協議,當Primary宕機后,Secondary節點選舉成新的Primary,老Primary有數據回滾的風險,而GaussDB(for Mongo)基于共享存儲則不存在這種問題。

      3.?計算節點寫壓力卸載

      傳統的數據庫通過只讀副本可以做到業務數據的讀寫分離。基于共享存儲的GaussDB(for Mongo) 不僅僅能做到業務數據的讀寫分離,還能分離主節點的LSMTree Compaction壓力。 將主節點的后臺Compaction壓力托管給Compaction Service微服務,從而節約主節點的IO與CPU資源,提升主節點的寫吞吐量,為客戶業務提供更好的數據抗壓能力。這個特性稱為 'Compaction Offload'(Compaction卸載)。

      GaussDB(for Mongo)只讀副本的設計與實現

      4.?主從復制占用的資源少

      傳統的數據庫使用 MongoDB層面的Oplog進行數據同步,所有主節點上的寫IO在從節點必須被鏡像式的回放一遍。GaussDB(for Mongo) 在數據同步技術上,充分利用了共享存儲的優勢, 僅需要主備之間同步存儲池數據文件的元數據變更信息,以及讀取變更數據的Write Ahead Log到內存的操作。避免了Secondary節點數據的Double甚至Triple Write,為用戶的業務讓出更多的CPU和IO資源。

      GaussDB(for Mongo)?只讀節點設計

      只讀節點功能設計

      l??傳統社區版MongoDB副本集基于Oplog做數據復制,只讀節點需要鏡像主節點的所有寫IO操作。GaussDB(for Mongo) 的只讀節點和主節點共享同一份底層數據庫文件(LSMTree的SST文件),只讀節點并不自己生成SST文件。

      l??隨著業務數據的寫入,Compaction的不斷執行,LSMTree的當前版本(包含哪些SST文件)不斷更新,LSMTree的元數據更新(增刪SST文件的記錄)被同步到只讀節點執行。

      l??RocksDB中,數據的變更被持久化到WAL里,元數據的變更(增刪文件的操作, 叫做VersionEdit)被持久化到Mainifest里。RocksDB的數據和元數據是分開的,WAL流和VersionEdit流是并行的,沒有嚴格的先后順序。為了保證只讀節點和主節點完全一致的事件回放順序,WAL和VersionEdit流必須要合并成一個流,在雙流合并后,通過LSN就可以為每個事件(WAL的寫操作/VersionEdit)定序。

      l??基于WAL+VersionEdit復制,而不基于Oplog復制

      l??共享文件(sst/wal)的生命周期管理由主節點負責

      sst文件和wal的文件的生命周期由主節點負責。RocksDB中,SST文件通過層級的引用計數來維持不被刪除。如下圖,RocksDB的每個游標會維持SuperVersion,如下圖中的S0,S1,S2。每個SuperVersion會引用一個Version,一個Version代表LSMTree在不斷變形(通過增刪SST文件變形)的過程中,某個時間點的形狀,最新的Version就代表LSMTree當前的形狀。

      l??在GaussDB(for Mongo)中,主節點會記錄所有只讀節點在使用的Version,并為這些Version增加引用計數從而維持SST文件的生命周期。

      對于WAL,主節點會記錄所有只讀節點中最老的LSN(oldestLsn),最老的LSN來自于復制最慢的只讀節點。并刪除比oldestLsn還舊的WAL文件。

      l??元數據變更通知

      無論是oldestLsn還是只讀節點的當前在用的活躍的Version,都需要及時推進,這些元數據的變更是通過主從節點的定期心跳上報到主節點上的。主節點利用心跳數據對垃圾版本與WAL做清理。

      如下圖所示,在經歷一次心跳后,主節點發現Secondary0的Version0和Secondary1的Version0不再使用。刪除這兩個Version后,SST0的引用計數為0,表示SST0可以被刪除。OldestLsn也從100推進到了250,可以清理掉250之前的WAL。

      l??只讀節點的Memtable的釋放

      主節點的Memtable不會實時Flush為SST文件。如果只讀節點不處理主節點的Memtable的話,只讀節點的數據就不是實時的,且存在數據一致性問題。只讀節點通過回放WAL到內存的Memtable中,來覆蓋SST文件與主節點的Memtable的Gap。

      上文介紹了只讀節點是不往共享存儲寫入數據的, 所以只讀節點上的 Memtable 最后的結局一定是被丟棄掉。但什么時候丟棄這個 Memtable 就是一個問題。過早的丟棄,會造成SST文件與Memtable之間的數據不連續,存在Gap,過晚的丟棄會造成內存的浪費。只有當只讀節點識別到SST的數據已經完全能夠Cover某個Memtable時,這個Memtable才可以被丟棄。

      GaussDB(for Mongo)的只讀節點在每次應用VersionEdit后,檢查所有SST中的最大的LSN與Memtable的最小的LSN的關系,來決定是否要丟棄某個Memtable。

      l??內存元數據的反向更新

      傳統的復制,數據流從Oplog來,走一遍完整的數據庫Server層CRUD接口,再落到引擎層。這種邏輯和主節點上業務的寫入邏輯是一致的,因此Server層的一些內存元數據結構,在這個過程中就自然而然的得到更新了。但是當采用基于WAL的復制后,整個WritePath并不經過只讀節點的Server層。因此Server層的內存元數據更新,就是一個很大的挑戰。在這里,只讀節點對每一條WAL做分析,如果WAL的內容會影響Mongo內存元數據,就會reload對應的元數據模塊。

      GaussDB(for Mongo)?實現

      考慮到只讀節點和主節點,以及 GaussDB(for Mongo)的軟件分層, 我們將只讀副本方案的實現,分為四個部分, 如下圖所示:

      三大流程如圖所示:

      l??開始復制

      l??持續復制

      l??心跳處理

      總結

      GaussDB(for Mongo) 只讀節點功能,實現了一份數據多計算節點共用的功能。極大的提升了存儲的利用效率,提高了計算節點的讀取數據能力。為了讓副本節點具有持續的讀擴展能力,整個只讀方案采用元數據的同步模式,在不降低主節點負載的情況下,極大的提升了整個系統的讀數據的處理能力。為3節點,5節點,乃至于15節點以上的副本集的工作提供了可能。

      GaussDB(for Mongo) 只讀節點功能,極大的提升了計算節點的彈性能力, 秒級擴縮容的能力在應對負載高峰和降低數據庫成本方面效果顯著。真正的做到了按需使用,彈性擴容的核心能力。也為客戶業務面對熱點爆發流量數據提供了更加高效安全的保證。

      【優惠福利】華為云GaussDB重磅發布,新品嘗鮮低至6折,旗艦產品低至¥8.3/小時,戳它體驗>>

      數據庫 云數據庫 GaussDB(for Mongo)

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:免費無代碼開發小程序平臺(小程序免費源碼網)
      下一篇:excel甘特圖制作教程(用excel做甘特圖
      相關文章
      亚洲无码精品浪潮| 亚洲国产精品丝袜在线观看| 伊伊人成亚洲综合人网7777| 亚洲情侣偷拍精品| av无码东京热亚洲男人的天堂| 亚洲国产成人久久精品大牛影视| 中文字幕亚洲综合久久综合| 中文文字幕文字幕亚洲色| 亚洲中文字幕在线无码一区二区| 91亚洲国产成人久久精品网址| 亚洲视频免费观看| 亚洲人成综合在线播放| 亚洲丰满熟女一区二区v| 亚洲乱码一二三四区麻豆| 最新亚洲卡一卡二卡三新区| 亚洲一卡一卡二新区无人区| 亚洲国产成人久久综合| 日本亚洲欧美色视频在线播放| 99热亚洲色精品国产88| 国产成人精品日本亚洲18图| 日韩亚洲国产综合高清| 亚洲av无码片vr一区二区三区| 国产AV无码专区亚洲AV麻豆丫| 成人亚洲综合天堂| 国产成人精品久久亚洲| 亚洲人成网7777777国产| 亚洲爆乳精品无码一区二区三区| 午夜亚洲AV日韩AV无码大全| 亚洲美女视频网址| 亚洲AV成人一区二区三区在线看 | 亚洲丝袜中文字幕| 中文字幕在线日亚洲9| 国产AV无码专区亚洲AV麻豆丫| 亚洲精品456播放| 亚洲国产另类久久久精品黑人| 久久精品国产亚洲AV麻豆不卡| 亚洲精品视频专区| 亚洲色大网站WWW永久网站| 国产精品亚洲专区在线播放| 国产精品亚洲美女久久久| 无码欧精品亚洲日韩一区|