聊聊主流的分布式資料庫

2021-10-13 15:27:18 字數 3660 閱讀 8200

單體資料庫時代,隨著系統交易量的不斷上公升,資料庫讀寫效能出現了嚴重下降。我們可以借助分庫分表中介軟體,比如mycat、shardingjdbc來實現分庫分表,緩解單庫的讀寫效能。但是分庫分表中介軟體並不支援事務,如果要保證資料一致性,就需要借助於分布式事務中介軟體,比如阿里巴巴的seata。後來分布式資料庫逐漸成為解決資料一致性的選擇,目前分布式資料庫產品已經比較成熟,支援acid事務,本文就來聊一聊分布式資料庫。

以mysql為例,我們來看一下單體資料庫的邏輯架構,如下圖:

從這個圖我們可以看到,mysql包括聯結器層,server層,儲存引擎層和資料/檔案層。單體資料庫場景下,資料庫本身就是支援事務的,我們不用事務做額外的工作。

如果需要分庫分表,這時架構就需要調整,如下圖:

這個架構增加了**層,它的功能包括客戶端接入、簡單的查詢處理、程序管理和分片資訊管理。這時因為資料分布在不同的切片上,使用的複雜性也大幅度增加。

如果應用要進行全量分頁查詢、關聯查詢、排序等應用,乙個簡單的**層是很難滿足的,**層必須支援複雜的運算,這時就基本過度到分布式資料庫了,而**層也被叫做了協調節點。

協調節點增加了運算能力,但是要支援分布式事務的一致性,還是遠遠不夠的。下面我們就看一下一致性問題。

在分布式的cap理論中,資料一致性是終極目標。我們來聊一下線性一致性和因果一致性。

先看線性一致性,如下圖:

user1讀取足球比賽成績,比分4:2,1秒之後,user2讀取比賽成績,但user2讀到的成績是4:1,這樣後讀取的使用者讀取到的資料反而是舊的資料。

發生這個問題的原因就是多副本同步延遲,而線性一致性要解決的問題如下:

線性一致性是分布式下最強的一致性理論,主流的資料庫產品解決執行緒一致性的手段是引入全域性時鐘,用單點授時的方式,從這個單一節點獲取時間,而且必須保證單一時鐘節點的高可靠性。

線性一致性的問題是全域性時鐘的併發問題,如果共用乙個物理時鐘,效能必然受到影響。

如果我們在一致性和高效能之間做乙個取捨,我們可以降低一些一致性來提高併發效能。這個理論就是因果一致性,它一致性要求低於線性一致性。因為一致性的基礎是在資料庫的單一切片上,事件肯定是有先後順序的。在不同的切片上,需要通訊的話,傳送事件肯定早於接收事件。

基於因果一致性,引入了邏輯時鐘的概念。目前也有一些資料庫使用邏輯時鐘來實現因果一致性,雖然比線性一致性弱一些,但是效能更好。

上面我們介紹了傳統關係型資料庫,增加了切片集群,增加了協調節點,增加了全域性時鐘,這樣就演變成了分布式資料庫。如下圖:

這種資料庫架構被業內稱為pgxc架構,這個名字是postgresql-xc的簡稱,它是一種提供寫可靠性,多主節點資料同步,資料傳輸的開源集群方案。

注意:這種架構被叫做pgxc,並不是專指postgresql-xc這種分布式資料庫,而是文章上面講的架構風格的一類資料庫。

newsql是由nosql鍵值資料庫發展而來,它是一類新的資料庫架構方案,不僅具有nosql對海量資料的儲存管理能力,還保持了傳統資料庫支援acid和sql等特性。它主要有以下特性:

pgxc資料庫由傳統關係型資料庫基於分庫分表的技術演化而來,優點是效能比較穩定,缺點是寫入能力有限,這是由架構風格決定的。

我們來介紹幾款主流的pgxc資料庫,代表如下:

1.tbase

2.guassdb 300guassdb 300由華為研發,也是基於開源postgresql研發的,支援htap,支援sql92、sql99和sql2003語法,並且支援提供儲存過程、觸發器、分頁等。目前在招商銀行、工商銀行和民生銀行有使用。

3.antdb

由亞信科技開發,基於開源postgresql核心研發的,主要特點是對oracle相容性高,分布式事務支援2pc協議和mvcc,集群支援動態擴充套件。

4.goldendb由中興通訊研發,跟前面3款不一樣的是,這款資料庫以mysql為核心構建的,按照官方的描述,這款資料庫對金融行業的支援比較好,目前中信銀行的核心業務系統有使用。

5.tdsql

newsql資料庫有很大的架構上的優勢,但是首先難度也很大,我們來看一下目前主流的資料庫產品。

1.谷歌spanner

使用gps加原子鐘的方式來實現全域性時鐘,這就就是引入了true time,支援全球化部署

支援線性一致性

2.tidb

3.ocean base雖然官方說ocean base高度相容各種主流關係型資料庫,但是業界普遍認為對oracle相容不太好。

採用paxos分布式選舉演算法來實現高可用。

4.sequoiadb

巨杉金融級分布式資料庫,它具有如下特性:

完整支援分布式事務、強一致、多副本高可用,滿足分布式核心交易業務需求

支援 mysql、postgresql、sparksql 和 mariadb 四種關係型資料庫例項,100%相容mysql語法

支援htap混合事務/分析處理

目前在廣發、民生等金融機構有一定使用。

5.cockroachdb和yugabytedb

這2個資料庫放在一起講的原因是它們不支援線性一致性,只支援因果一致性,因為它們使用的是混合邏輯時鐘(hybrid logical clocks),它們的設計思想都是來自spanner。

cockroachdb採用了range分割槽,每個range對應乙個rocksdb資料庫,同時使用raft演算法的改進演算法multi raft,讓多分片並行處理提公升效能。

yugabytedb除了newsql的特性外,還支援文件資料庫介面,查詢層支援同時sql和cql兩種api,sql api是基於postgresql改的,所以對postgresql的支援非常好。

aurora資料庫是amazon推出的雲原生資料庫,它的特點是計算節點垂直擴充套件,儲存節點可以水平擴充套件。可見計算節點依然是單節點。aurora基於mysql引擎構建,100%支援mysql。

aurora資料快取在主節點,然後同步到其他從節點,可見跟其他分布式資料庫相比,從節點不支援寫入,所以不支援多寫,從節點只能分擔讀的壓力。

傳統的分庫分表架構不斷演進,增加了協調節點,全域性時鐘,就演變成了pgxc架構,這是主流分布式資料庫的乙個分支。

在基於bigtable鍵值資料庫的基礎上增加事務支援,就演變成了newsql,是分布式資料庫的另乙個分支。

amazon推出aurora分布式資料庫並不算是上面2種架構的一種,並沒有解決分布式場景下的寫入壓力,但也是一種分布式資料庫的風格。

分布式資料庫的產品已經很成熟,數量也很多,需要結合業務特性來做技術選型。

目前主流的分布式資料庫

目前業界最流行的分布式資料庫有兩類,乙個是以google spanner為代表,乙個是以aws auraro為代表。spanner 是 shared nothing 的架構,內部維護了自動分片 分布式事務 彈性擴充套件能力,資料儲存還是需要 sharding,plan 計算也需要涉及多台機器,也就涉...

分布式資料庫

網路選課系統中分布式資料庫設計 何翠雙王巧雲張麗麗 摘要 關鍵字 選課 分布式 資料庫 distributed system of on line course choosing abstract key words course choosing distributed database 隨著學校...

分布式資料庫

1 背景 我們知道資料是乙個公司的命脈,隨著業務越做越大,資料量也會越來越大,計算也會越來越複雜,效能,可靠性,可擴充套件性的需求就會越來越強烈,這個時候乙個集中式的資料庫顯然已經滿足不了需求了。對於技術決策者來說有兩條路可以走,第一 按照現有的大型資料庫的解決方案,比如sql server clu...