【參天引擎】華為參天引擎內核架構專欄開始更新了,多主分布式數據庫的特點,類oracle RAC國產數據開始出現了

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
如有錯誤或者疏漏歡迎指出,互相學習。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213136.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213136.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213136.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 中 4 個高效的技巧(建議收藏)

今天我想和大家分享 4 個省時的 Python 技巧,可以節省 10~20% 的 Python 執行時間。 反轉列表 Python 中通常有兩種反轉列表的方法:切片或 reverse() 函數調用。這兩種方法都可以反轉列表,但需要注意的是內置函數 reverse() 會更改原始列表…

【數據結構】C語言結構體詳解

目錄 前言 一、結構體的定義 二、定義結構體變量 三、結構體變量的初始化 四、使用typedef聲明新數據類型名 五、指向結構體變量的指針 總結 🌈嗨!我是Filotimo__🌈。很高興與大家相識,希望我的博客能對你有所幫助。 &#x1f4a1…

做題筆記:SQL Sever 方式做牛客SQL的題目--查詢每天刷題通過數最多的前二名用戶

----查詢每天刷題通過數最多的前二名用戶id和刷題數 現有牛客刷題表questions_pass_record,請查詢每天刷題通過數最多的前二名用戶id和刷題數,輸出按照日期升序排序,查詢返回結果名稱和順序為: date|user_id|pass_count 表單創建…

Spring JDBC和事務管理

Spring JDBC是Spring框架用來處理關系型數據庫的模塊&#xff0c;對JDBC的API進行了封裝。 Spring JDBC的核心類為JdbcTemplate&#xff0c;提供數據CRUD方法 Spring JDBC使用步驟 Maven工程引入依賴spring-jdbc <dependency><groupId>org.springframework<…

springboot 整合nacos

Spring Boot整合Nacos 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01;今天&#xff0c;我將帶領大家探索一個讓微服務架構更加便捷的利器——Spring Boot整合Nacos。在當今快速發展的互聯網時代&#…

應用安全:JAVA反序列化漏洞之殤

應用安全:JAVA反序列化漏洞之殤 概述 序列化是讓Java對象脫離Java運行環境的一種手段&#xff0c;可以有效的實現多平臺之間的通信、對象持久化存儲。Java 序列化是指把 Java 對象轉換為字節序列的過程便于保存在內存、文件、數據庫中&#xff0c;ObjectOutputStream類的 wri…

MYSQL創建用戶以及解決MYSQL新建數據庫看不到相關數據庫信息的解決方案

MYSQL創建用戶以及解決MYSQL新建數據庫看不到相關數據庫信息的解決方案 首先 我們在root用戶下&#xff0c;創建一個mysql用戶賬戶 如創建一個test用戶 密碼123456 命令如下&#xff1a; CREATE USER ‘test’‘localhost’ IDENTIFIED BY ‘123456’; 創建了一個db1的數據庫 …

唯創知音WTN6040F-8S語音芯片在空氣消毒機中的應用:提升用戶體驗與健康保障

在現代生活中&#xff0c;空氣質量成為人們越來越關注的問題。空氣消毒機作為一種能夠凈化空氣、殺滅病毒細菌的設備&#xff0c;受到了廣大消費者的青睞。然而&#xff0c;對于很多用戶來說&#xff0c;操作空氣消毒機可能存在一定的困惑和不便。為了解決這一問題&#xff0c;…

對Spring源碼的學習:Bean實例化流程

目錄 SpringBean實例化流程 Spring的后處理器 Bean工廠后處理器 Bean后處理器 SpringBean實例化流程 Spring容器在進行初始化時&#xff0c;會將xml配置的<bean>的信息封裝成一個BeanDefinition對象&#xff0c;所有的BeanDefinition存儲到一個名為beanDefinitionMa…

Docker容器的可視化管理工具—DockerUI本地部署與遠程訪問

文章目錄 前言1. 安裝部署DockerUI2. 安裝cpolar內網穿透3. 配置DockerUI公網訪問地址4. 公網遠程訪問DockerUI5. 固定DockerUI公網地址 前言 DockerUI是一個docker容器鏡像的可視化圖形化管理工具。DockerUI可以用來輕松構建、管理和維護docker環境。它是完全開源且免費的。基…

【GlobalMapper精品教程】066:shp轉JSON(GeoJson)案例實現

文章目錄 一、JSON與GeoJson的區別二、globalmapper實現shp轉JSON1. 加載shp數據2. shp轉json一、JSON與GeoJson的區別 JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,它基于JavaScript的語法,可以將JavaScript對象中表示的一組數據轉換為字符串,在函數之…

ElasticSearch之cat recovery API

命令樣例如下&#xff1a; curl -X GET "https://localhost:9200/_cat/recovery?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"執行結果輸出如下&#xff1a; index shard time type sta…

2023 CCF中國軟件大會(CCF ChinaSoft) “程序語義深度理解前沿進展”論壇成功召開...

2023年12月2日&#xff0c;2023年度CCF中國軟件大會軟件程序語義深度理解前沿進展論壇成功召開。 本次論壇由南京大學卜磊老師和國防科技大學陳振邦老師主持&#xff0c;計算機研究與發展期刊代表侯麗珊老師致辭&#xff0c;旨在反映程序語義理解及其應用相關研究前沿進展與實踐…

Vue之模板語法

模板語法有兩大類&#xff1a; 1.插值語法 2.指令語法 讓我為大家介紹一下吧&#xff01; 一、插值語法 功能:用于解析標簽體內容。 寫法: {{xxx}}&#xff0c;xxx是js表達式&#xff0c;且可以直接讀取到data中的所有屬性。 舉個例子&#xff1a; <!DOCTYPE html> &l…

探索未來新趨勢:鴻蒙系統的嶄新時代

探索未來新趨勢&#xff1a;鴻蒙系統的嶄新時代 隨著科技的不斷發展&#xff0c;操作系統作為計算機和移動設備的核心&#xff0c;扮演著至關重要的角色。近年來&#xff0c;一種備受矚目的操作系統——鴻蒙系統&#xff08;HarmonyOS&#xff09;嶄露頭角&#xff0c;正引領著…

uniapp 微信小程序請求攔截器 接口封裝

前言&#xff1a; 請求攔截器可以在我們需要傳遞請求頭的時候使用&#xff0c;例如&#xff1a;token 也會在當token發生變化的時候給予響應&#xff0c;所以我們做好對應的判斷即可 話不多說&#xff0c;直接進入正題&#xff1a; 1.首先在根目錄創建common文件夾&#xff0c…

Selenium 中并行測試的重要性!

隨著技術的進步&#xff0c;測試解決方案變得更具可擴展性&#xff0c;加速了團隊從手動測試到Selenium測試自動化的轉型。但是成年人的世界&#xff0c;沒有什么是容易的。對于許多團隊來說&#xff0c;并行運行多個測試仍然是不可擴展的。他們傾向于遵循傳統的順序執行測試方…

MIT6.5840-2023-Lab2A: Raft-leader election

前置知識 什么是一致性算法&#xff1f; 安全性保證&#xff0c;絕對不會返回一個錯誤的結果&#xff1b;可用性&#xff0c;容忍集群部分節點失敗&#xff1b;不依賴時序來保證一致性&#xff1b;一條指令可以盡可能快的在集群中大多數節點響應一輪遠程過程調用時完成。小部分…

uniapp實戰 —— 可滾動區域 scroll-view (自適配高度,下拉刷新)

自適配高度 自定義的頂部導航欄&#xff0c;可參考博文 https://blog.csdn.net/weixin_41192489/article/details/134852124 如圖可見&#xff0c;在頁面滾動過程中&#xff0c;頂部導航欄和底欄未動&#xff0c;僅中間的內容區域可滾動。 整個頁面的高度設置為 100%&#xf…

鴻蒙開發—學習聲明式UI

基本UI描述 ArkTS通過裝飾器Component和Entry裝飾struct關鍵字聲明的數據結構&#xff0c;構成一個自定義組件。自定義組件中提供了一個build函數&#xff0c;開發者需在該函數內以鏈式調用的方式進行基本的UI描述&#xff0c;UI描述的方法請參考UI描述規范。 基本概念 stru…