成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

我們是怎樣打造一款分布式數(shù)據(jù)庫的

新聞 數(shù)據(jù)庫運(yùn)維 分布式
關(guān)系型數(shù)據(jù)庫在過去數(shù)十年的數(shù)據(jù)庫領(lǐng)域一直占據(jù)著絕對(duì)主導(dǎo)的地位,它所帶來的穩(wěn)定性、安全性和易用性,成為了構(gòu)建現(xiàn)代化系統(tǒng)的基石。

 關(guān)系型數(shù)據(jù)庫在過去數(shù)十年的數(shù)據(jù)庫領(lǐng)域一直占據(jù)著絕對(duì)主導(dǎo)的地位,它所帶來的穩(wěn)定性、安全性和易用性,成為了構(gòu)建現(xiàn)代化系統(tǒng)的基石。隨著的互聯(lián)網(wǎng)高速發(fā)展,構(gòu)架于單機(jī)系統(tǒng)的數(shù)據(jù)庫已無法滿足越來越高的并發(fā)請(qǐng)求和越來越大的數(shù)據(jù)存儲(chǔ)需求,因此,分布式數(shù)據(jù)庫被愈加廣泛的采用。

一直以來,數(shù)據(jù)庫領(lǐng)域均由西方的科技公司和社區(qū)所主導(dǎo)。而今,越來越多的國產(chǎn)數(shù)據(jù)庫解決方案以分布式為支點(diǎn),逐漸在此領(lǐng)域有所建樹。Apache ShardingSphere 是其中的一個(gè)分布式數(shù)據(jù)庫解決方案,也是目前 Apache 軟件基金會(huì)中唯一的數(shù)據(jù)庫中間件。

1 背景

 

全面兼容面向傳統(tǒng)關(guān)系型數(shù)據(jù)庫的 SQL 和事務(wù),并且對(duì)分布式的天然友好,是分布式數(shù)據(jù)庫解決方案的設(shè)計(jì)目標(biāo)。它的核心功能主要集中在以下幾點(diǎn):

  • 分布式存儲(chǔ): 數(shù)據(jù)存儲(chǔ)不受單機(jī)磁盤容量限制,可通過增加數(shù)據(jù)服務(wù)器的數(shù)量提升存儲(chǔ)能力;

  • 計(jì)算存儲(chǔ)分離: 計(jì)算節(jié)點(diǎn)無狀態(tài),可通過水平擴(kuò)展增加算力。存儲(chǔ)節(jié)點(diǎn)和計(jì)算節(jié)點(diǎn)能夠分層優(yōu)化;

  • 分布式事務(wù): 高性能、完全支持本地事務(wù) ACID 原義的分布式事務(wù)處理引擎;

  • 彈性伸縮:可以隨時(shí)隨地的在不影響現(xiàn)有應(yīng)用的情況下,動(dòng)態(tài)對(duì)數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)擴(kuò)容和縮容;

  • 多數(shù)據(jù)副本:自動(dòng)將數(shù)據(jù)以強(qiáng)一致、高性能的方式復(fù)制至跨機(jī)房的多個(gè)副本,以保證數(shù)據(jù)的絕對(duì)安全;

  • HTAP:采用同一套產(chǎn)品混合處理 OLTP 的事務(wù)型操作和 OLAP 的分析型操作。

分布式數(shù)據(jù)庫的實(shí)現(xiàn)方案可以劃分為進(jìn)取型和穩(wěn)定型。進(jìn)取型實(shí)現(xiàn)方案是指開發(fā)全新架構(gòu)的 NewSQL。這類產(chǎn)品以追求更高性能換取穩(wěn)定性的缺失和運(yùn)維經(jīng)驗(yàn)的不足;穩(wěn)定型的實(shí)現(xiàn)方案是指在現(xiàn)有數(shù)據(jù)庫的基礎(chǔ)上提供增量能力的中間件。這類產(chǎn)品則以犧牲部分性能以保證數(shù)據(jù)庫的穩(wěn)定性和運(yùn)維經(jīng)驗(yàn)的復(fù)用。

2 架構(gòu)

Apache ShardingSphere 是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(計(jì)劃中)這 3 款相互獨(dú)立的產(chǎn)品組成。它們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)分片、分布式事務(wù)和分布式治理等功能,可適用于如 Java 同構(gòu)、異構(gòu)語言、云原生等各種多樣化的應(yīng)用場景。隨著 Apache ShardingSphere 在查詢優(yōu)化器和分布式事務(wù)引擎的不斷探索,它已漸漸地打破了實(shí)現(xiàn)方案的產(chǎn)品邊界,向集進(jìn)取型和穩(wěn)定型于一身的平臺(tái)級(jí)解決方案演進(jìn)。

Sharding-JDBC

定位為輕量級(jí) Java 框架,在 Java 的 JDBC 層提供的額外服務(wù)。它使用客戶端直連數(shù)據(jù)庫,以 jar 包形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的 JDBC 驅(qū)動(dòng),完全兼容 JDBC 和各種 ORM 框架。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

Sharding-Proxy

定位為透明化的數(shù)據(jù)庫代理端,提供封裝了數(shù)據(jù)庫二進(jìn)制協(xié)議的服務(wù)端版本,用于完成對(duì)異構(gòu)語言的支持。目前已提供 MySQL 和 PostgreSQL 版本,它可以使用任何兼容 MySQL 和 PostgreSQL 協(xié)議的訪問客戶端 (如:MySQL Command Client, MySQL Workbench, Navicat 等) 操作數(shù)據(jù),對(duì) DBA 更加友好。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

Sharding-Sidecar(規(guī)劃中)

定位為 Kubernetes 的云原生數(shù)據(jù)庫代理,以 Sidecar 的形式代理所有對(duì)數(shù)據(jù)庫的訪問。通過無中心、零侵入的方案提供與數(shù)據(jù)庫交互的的嚙合層,即 Database Mesh,又可稱數(shù)據(jù)庫網(wǎng)格。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

計(jì)算存儲(chǔ)分離的混合架構(gòu)

Sharding-JDBC 采用無中心化架構(gòu),適用于 Java 開發(fā)的高性能的輕量級(jí) OLTP 應(yīng)用;Sharding-Proxy 提供靜態(tài)入口以及異構(gòu)語言的支持,適用于 OLAP 應(yīng)用以及對(duì)分片數(shù)據(jù)庫進(jìn)行管理和運(yùn)維的場景。

每種架構(gòu)方案都有其各自的優(yōu)缺點(diǎn),下面表格對(duì)比了各種架構(gòu)模型的在不同場景下的優(yōu)劣:

我們是怎樣打造一款分布式數(shù)據(jù)庫的

Apache ShardingSphere 是多接入端共同組成的生態(tài)圈。通過混合使用 Sharding-JDBC 和 Sharding-Proxy,并采用同一配置中心統(tǒng)一配置分片策略,能夠靈活的搭建適用于各種場景的應(yīng)用系統(tǒng),使得架構(gòu)師更加自由的調(diào)整適合與當(dāng)前業(yè)務(wù)的最佳系統(tǒng)架構(gòu)。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

Apache ShardingSphere 采用 Share Nothing 架構(gòu),它的 JDBC 和 Proxy 接入端均采用無狀態(tài)設(shè)計(jì)。作為計(jì)算節(jié)點(diǎn),Apache ShardingSphere 負(fù)責(zé)對(duì)獲取的數(shù)據(jù)進(jìn)行最終的計(jì)算匯總。由于本身并不存儲(chǔ)數(shù)據(jù),因此 Apache ShardingSphere 可以將計(jì)算下推至數(shù)據(jù)節(jié)點(diǎn),以充分利用數(shù)據(jù)庫自身的計(jì)算能力。Apache ShardingSphere 可以通過增加部署節(jié)點(diǎn)數(shù)量來增加計(jì)算能力;增加數(shù)據(jù)庫節(jié)點(diǎn)數(shù)量來增加存儲(chǔ)能力。

3 核心功能

數(shù)據(jù)分片、分布式事務(wù)、彈性伸縮和分布式治理是 Apache ShardingSphere 目前階段的 4 個(gè)最核心功能。

數(shù)據(jù)分片

分而治之是 Apache ShardingSphere 用于處理海量數(shù)據(jù)的方案。Apache ShardingSphere 通過數(shù)據(jù)分片方案,使數(shù)據(jù)庫具備分布式存儲(chǔ)能力。

它可以將 SQL 根據(jù)用戶預(yù)置的分片算法自動(dòng)路由至相應(yīng)的數(shù)據(jù)節(jié)點(diǎn),以達(dá)到操作多個(gè)數(shù)據(jù)庫的目的。用戶可以像使用單機(jī)數(shù)據(jù)庫一樣使用被 Apache ShardingSphere 所管理的多個(gè)數(shù)據(jù)庫。目前支持 MySQL、PostgreSQL、Oracle、SQLServer 以及任何支持 SQL92 標(biāo)準(zhǔn)和 JDBC 標(biāo)準(zhǔn)協(xié)議的數(shù)據(jù)庫。數(shù)據(jù)分片的內(nèi)核流程見下圖:

我們是怎樣打造一款分布式數(shù)據(jù)庫的

主要流程如下:

  1. 通過解析數(shù)據(jù)庫協(xié)議包或 JDBC 驅(qū)動(dòng)獲取用戶輸入的 SQL 和參數(shù);

  2. 根據(jù)詞法分析器和語法分析器將 SQL 解析為 AST(抽象語法樹),并提取分片所需信息;

  3. 根據(jù)用戶預(yù)置算法匹配分片鍵,并計(jì)算路由路徑;

  4. 將 SQL 改寫為分布式可執(zhí)行 SQL;

  5. 向各數(shù)據(jù)節(jié)點(diǎn)并行發(fā)送 SQL,執(zhí)行引擎負(fù)責(zé)連接池與內(nèi)存資源的平衡;

  6. 根據(jù) AST 執(zhí)行流式或全量內(nèi)存結(jié)果集歸并計(jì)算;

  7. 封裝數(shù)據(jù)庫協(xié)議包或 JDBC 結(jié)果集,并返回至客戶端。

分布式事務(wù)

事務(wù)是數(shù)據(jù)庫系統(tǒng)的最核心功能。分布式的不確定和事務(wù)的復(fù)雜性,決定了分布式事務(wù)領(lǐng)域無法出現(xiàn)放之四海而皆準(zhǔn)的方案。

面對(duì)百花齊放的現(xiàn)狀,Apache ShardingSphere 提供高度開放的方案,采用標(biāo)準(zhǔn)接口統(tǒng)一整合開發(fā)者自主選擇的第三方分布式事務(wù)框架,以滿足各種場景的應(yīng)用需求。除此之外,Apache ShardingSphere 還提供了全新的分布式事務(wù)解決方案 JDTX,來彌補(bǔ)現(xiàn)有方案的缺失。

標(biāo)準(zhǔn)化整合接口

Apache ShardingSphere 為本地事務(wù)、兩階段事務(wù)和柔性事務(wù)提供了統(tǒng)一的適配接口,并對(duì)接了大量的現(xiàn)有第三方的成熟解決方案。通過標(biāo)準(zhǔn)接口,開發(fā)者可以輕松的將其他整合方案融入到 Apache ShardingSphere 平臺(tái)中。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

然而,融合大量第三方解決方案,卻不能覆蓋所有分布式事務(wù)需求分支。各種解決方案均有各自的適合及不適合場景。各解決方案間是互斥的,無法將它們的優(yōu)點(diǎn)疊加使用。針對(duì)于當(dāng)前最常見 2PC(兩階段提交)和柔性事務(wù),分別存在著以下的優(yōu)勢和不足:

  • 兩階段提交:基于 XA 協(xié)議實(shí)現(xiàn)的兩階段分布式事務(wù)對(duì)業(yè)務(wù)侵入很小。它最大的優(yōu)勢是對(duì)使用方透明,開發(fā)者可以像本地事務(wù)一樣使用基于 XA 協(xié)議的分布式事務(wù)。XA 協(xié)議能夠嚴(yán)格保障事務(wù) ACID 特性,但這也是一把雙刃劍。事務(wù)執(zhí)行在過程中需要將所需資源全部鎖定,它更加適用于執(zhí)行時(shí)間確定的短事務(wù)。對(duì)于長事務(wù)來說,整個(gè)事務(wù)進(jìn)行期間對(duì)資源的獨(dú)占,將導(dǎo)致對(duì)熱點(diǎn)數(shù)據(jù)依賴的業(yè)務(wù)系統(tǒng)并發(fā)性能衰退明顯。因此,在高并發(fā)的性能至上場景中,基于 XA 協(xié)議兩階段提交類型的分布式事務(wù)并不是最佳選擇。

  • 柔性事務(wù):如果將實(shí)現(xiàn)了 ACID 的事務(wù)要素的事務(wù)稱為剛性事務(wù)的話,那么基于 BASE 事務(wù)要素的事務(wù)則稱為柔性事務(wù)。BASE 是基本可用、柔性狀態(tài)和最終一致性這 3 個(gè)要素的縮寫。在 ACID 事務(wù)中對(duì)一致性和隔離性的要求很高,在事務(wù)執(zhí)行過程中,必須將所有的資源占用。柔性事務(wù)的理念則是通過業(yè)務(wù)邏輯將互斥鎖操作從資源層面上移至業(yè)務(wù)層面。通過放寬對(duì)強(qiáng)一致性和隔離性的要求,只要求當(dāng)整個(gè)事務(wù)最終結(jié)束的時(shí)候,數(shù)據(jù)是一致的。而在事務(wù)執(zhí)行期間,任何讀取操作得到的數(shù)據(jù)都有可能被改變。這種弱一致性的設(shè)計(jì)可以用來換取系統(tǒng)吞吐量的提升。

基于 ACID 的兩階段事務(wù)和基于 BASE 的最終一致性事務(wù)都不是銀彈,可通過下表詳細(xì)對(duì)比它們之間的區(qū)別。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

缺乏并發(fā)度保障的兩階段事務(wù)不能稱之為完善的分布式事務(wù)解決方案;而缺乏對(duì) ACID 原義支持的柔性事務(wù)都甚至不能稱之為數(shù)據(jù)庫事務(wù),它更適合服務(wù)層的事務(wù)處理。

放眼當(dāng)前,實(shí)難找到無需權(quán)衡即可放之四海而皆準(zhǔn)的分布式事務(wù)解決方案。

新一代分布式事務(wù)中間件 JDTX

JDTX 是京東數(shù)科自研的分布式事務(wù)中間件,尚未開源。它的設(shè)計(jì)目標(biāo)是強(qiáng)一致(支持 ACID 的事務(wù)原義)、高性能(不低于本地事務(wù)性能)、1PC(完全摒棄兩階段提交和兩階段鎖)的完全分布式事務(wù)中間件,目前可用于關(guān)系型數(shù)據(jù)庫。它采用完全開放 SPI 的設(shè)計(jì)方式,提供與 NoSQL 對(duì)接的可能,未來能夠?qū)⒍嘣悩?gòu)數(shù)據(jù)維持在同一事務(wù)中。

JDTX 通過完全自研的事務(wù)處理引擎,將 SQL 操作的事務(wù)中數(shù)據(jù)轉(zhuǎn)化為 KV(鍵值對(duì)),并在其基礎(chǔ)上實(shí)現(xiàn)了 MVCC(多版本快照)的事務(wù)可見性引擎,以及與數(shù)據(jù)庫設(shè)計(jì)理念類似的 WAL(預(yù)寫日志系統(tǒng))存儲(chǔ)引擎。可以通過下面的架構(gòu)圖來了解一下 JDTX 的構(gòu)成:

我們是怎樣打造一款分布式數(shù)據(jù)庫的

它的設(shè)計(jì)特點(diǎn)是將在事務(wù)中的數(shù)據(jù)(稱之為活躍數(shù)據(jù))和不在事務(wù)中的數(shù)據(jù)(稱之為落盤數(shù)據(jù))分離。活躍數(shù)據(jù)在落盤至 WAL 之后,再以 KV 的形態(tài)保存至 MVCC 內(nèi)存引擎中。落盤數(shù)據(jù)則是通過異步刷盤的方式,將 WAL 中的 REDO 日志,以流量可控的方式同步至最終的存儲(chǔ)介質(zhì)中(如:關(guān)系型數(shù)據(jù)庫)。事務(wù)內(nèi)存查詢引擎負(fù)責(zé)使用 SQL 從 KV 格式的活躍數(shù)據(jù)中檢索到相關(guān)數(shù)據(jù),與落盤數(shù)據(jù)合并,并根據(jù)事務(wù)隔離級(jí)別獲取符合當(dāng)前事務(wù)可見的數(shù)據(jù)版本。

JDTX 以全新的架構(gòu)重新詮釋了數(shù)據(jù)庫的事務(wù)模型,主要亮點(diǎn)有:

1、內(nèi)化分布式事務(wù)為本地事務(wù)

JDTX 的 MVCC 引擎是一個(gè)集中式緩存。它能夠?qū)呻A段提交內(nèi)化至一階段提交,以維持單一節(jié)點(diǎn)中數(shù)據(jù)的原子性和一致性,即將分布式事務(wù)的范疇縮減到本地事務(wù)的范疇。JDTX 通過保證所有對(duì)事務(wù)數(shù)據(jù)的訪問都通過 MVCC 引擎的活躍數(shù)據(jù) + 最終數(shù)據(jù)端的落盤數(shù)據(jù)的合并的方式,以保證事務(wù)數(shù)據(jù)的原子性和一致性。

2、無損的事務(wù)隔離機(jī)制

以 MVCC 的方式實(shí)現(xiàn)事務(wù)隔離性。目前完整的支持 4 種標(biāo)準(zhǔn)隔離級(jí)別中的讀已提交和可重復(fù)讀,已經(jīng)可以滿足絕大部分需求。

3、高性能

采用將活躍數(shù)據(jù)異步刷盤至存儲(chǔ)介質(zhì)的方式,極大地提高了數(shù)據(jù)寫入的性能上限。它的性能瓶頸從數(shù)據(jù)庫寫入耗時(shí)轉(zhuǎn)移到了落盤至 WAL 和 MVCC 引擎的耗時(shí)。

與數(shù)據(jù)庫的 WAL 系統(tǒng)類似,JDTX 的 WAL 也采用順序日志追加的方式,因此可以簡單的理解為 JDTX 的 WAL 耗時(shí) = 數(shù)據(jù)庫系統(tǒng)的 WAL 耗時(shí)。而 MVCC 引擎則采用 KV 數(shù)據(jù)結(jié)構(gòu),其寫入耗時(shí)小于維護(hù) BTree 索引的數(shù)據(jù)庫。因此,JDTX 的數(shù)據(jù)更新性能的上限甚至可以高于不開啟事務(wù)。

4、高可用

WAL 和 MVCC 引擎均可以通過主備 + 分片的方式維持高可用和水平擴(kuò)展的能力。在 MVCC 引擎完全不可用的情況下,可通過恢復(fù)模式將 WAL 中的數(shù)據(jù)同步至數(shù)據(jù)庫,以保證數(shù)據(jù)的完整性。

5、跨多元數(shù)據(jù)庫事務(wù)

將事務(wù)活躍數(shù)據(jù)和落盤數(shù)據(jù)分離的設(shè)計(jì)方案,使其落盤數(shù)據(jù)存儲(chǔ)端無任何限制。由于事務(wù)活躍數(shù)據(jù)通過異步的落盤執(zhí)行器存儲(chǔ)至后端存儲(chǔ)介質(zhì),因此后端是否為同構(gòu)數(shù)據(jù)庫,其實(shí)并無影響。使用 JDTX 能夠保證跨多元存儲(chǔ)端(如:MySQL、PostgreSQL,甚至是 MongoDB、Redis 等 NoSQL)的分布式事務(wù)維持在同一事務(wù)語義之中。

通過 Apache ShardingSphere 提供的分布式事務(wù)統(tǒng)一適配接口,可以將 JDTX 像其他第三方分布式事務(wù)解決方案一樣輕松地融入 Apache ShardingSphere 生態(tài),將數(shù)據(jù)分片與分布式事務(wù)無縫結(jié)合,使它們具備組成分布式數(shù)據(jù)庫基礎(chǔ)設(shè)施的能力。架設(shè)在產(chǎn)品最前端的 Apache ShardingSphere 用于 SQL 解析、數(shù)據(jù)庫協(xié)議和數(shù)據(jù)分片;位于中層的 JDTX 用于通過 KV 和 MVCC 的方式處理事務(wù)活躍數(shù)據(jù);最底層的數(shù)據(jù)庫則僅作為最終的數(shù)據(jù)存儲(chǔ)端。下圖是 ShardingSphere + JDTX 的架構(gòu)圖。

我們是怎樣打造一款分布式數(shù)據(jù)庫的

可以說,JDTX 的存在,使得 Apache ShardingSphere 打破了穩(wěn)定型的數(shù)據(jù)庫中間件的定位,在保持穩(wěn)定的同時(shí),逐步向進(jìn)取型 NewSQL 發(fā)展。

彈性伸縮

與無狀態(tài)的服務(wù)化應(yīng)用不同,數(shù)據(jù)節(jié)點(diǎn)中均持有不可丟失的重要用戶數(shù)據(jù)。當(dāng)數(shù)據(jù)節(jié)點(diǎn)的容量不足以承擔(dān)快速增長的業(yè)務(wù)時(shí),數(shù)據(jù)節(jié)點(diǎn)的擴(kuò)容則在所難免。根據(jù)用戶預(yù)置的分片策略不同,擴(kuò)容的策略也會(huì)隨之不同。

彈性伸縮可以讓被 Apache ShardingSphere 所管理的數(shù)據(jù)庫在不停止對(duì)外服務(wù)的情況下進(jìn)行擴(kuò)容和縮容。彈性伸縮分為彈性遷移和范圍擴(kuò)容兩個(gè)組件,目前它們均在孵化中。

彈性遷移

數(shù)據(jù)遷移是面向用戶定制分片策略的標(biāo)準(zhǔn)擴(kuò)縮容方案。在遷移過程中,需要準(zhǔn)備兩套數(shù)據(jù)節(jié)點(diǎn)。原數(shù)據(jù)節(jié)點(diǎn)在繼續(xù)提供服務(wù)的同時(shí),將數(shù)據(jù)以存量和增量的方式,分別寫入新數(shù)據(jù)節(jié)點(diǎn)。整個(gè)遷移過程無需停止對(duì)外服務(wù),可以平順的過渡新舊數(shù)據(jù)節(jié)點(diǎn)。Apache ShardingSphere 還將提供工作流界面,讓遷移過程完全自主可控。彈性遷移的架構(gòu)圖如下:

我們是怎樣打造一款分布式數(shù)據(jù)庫的

具體流程如下:

  1. 通過配置中心修改數(shù)據(jù)分片配置,以觸發(fā)遷移流程。

  2. 記錄當(dāng)前遷移數(shù)據(jù)開啟前的位點(diǎn)之后,開啟歷史遷移作業(yè),分批遷移全量數(shù)據(jù)。

  3. 開啟 Binlog 訂閱作業(yè),遷移位點(diǎn)之后的增量數(shù)據(jù)。

  4. 根據(jù)采樣率設(shè)置比對(duì)數(shù)據(jù)。

  5. 設(shè)置原數(shù)據(jù)源只讀,確保實(shí)時(shí)數(shù)據(jù)遷移完成。

  6. 將應(yīng)用連接切換至新數(shù)據(jù)源。

  7. 舊數(shù)據(jù)源下線。

遷移時(shí)長根據(jù)數(shù)據(jù)量的大小可能是幾分鐘至幾周不等。遷移過程中可以隨時(shí)回退或重新遷移。整個(gè)遷移流程完全自主可控,降低遷移過程中的風(fēng)險(xiǎn);并且通過自動(dòng)化工具完全屏蔽人工操作,避免繁瑣的操作帶來的巨大工作量。

范圍擴(kuò)容

如果彈性遷移稱之為硬伸縮的話,那么范圍擴(kuò)容則稱之為軟伸縮。Apache ShardingSphere 的范圍擴(kuò)容不涉及內(nèi)核改造,也無需遷移數(shù)據(jù),它只需通過優(yōu)化范圍分片策略,即可達(dá)到自動(dòng)擴(kuò)(縮)容的目標(biāo)。使用范圍擴(kuò)容,用戶無需感知分片策略和分片鍵等分庫分表方案中必要概念,讓 Apache ShardingSphere 更加接近一體化的分布式數(shù)據(jù)庫。

使用范圍擴(kuò)容的用戶,只需向 Apache ShardingSphere 提供數(shù)據(jù)庫資源池。容量巡檢器會(huì)在表容量到達(dá)閾值時(shí),從資源池中依次尋找下一個(gè)數(shù)據(jù)節(jié)點(diǎn),并在新數(shù)據(jù)節(jié)點(diǎn)創(chuàng)建新表之后,修改分片策略的范圍元數(shù)據(jù)。當(dāng)資源池中沒有新數(shù)據(jù)節(jié)點(diǎn)后,Apache ShardingSphere 會(huì)按照同樣的順序,在已經(jīng)創(chuàng)建過表的數(shù)據(jù)庫中增加新表。當(dāng)表數(shù)據(jù)大量刪除時(shí),之前的數(shù)據(jù)節(jié)點(diǎn)的數(shù)據(jù)將不再緊湊,垃圾回收器會(huì)定時(shí)壓縮表范圍,以釋放更多的碎片空間。范圍擴(kuò)容的結(jié)構(gòu)如下:

我們是怎樣打造一款分布式數(shù)據(jù)庫的

Apache ShardingSphere 為不同的應(yīng)用場景,提供了更加靈活的彈性伸縮策略。目前仍在孵化中的兩個(gè)彈性伸縮相關(guān)的項(xiàng)目,也力爭盡快提供試用版本。

分布式治理

治理模塊的設(shè)計(jì)目標(biāo)是為了更好管理和使用分布式數(shù)據(jù)庫。

數(shù)據(jù)庫治理

與所有的分布式系統(tǒng)的設(shè)計(jì)理念一脈相承,分而治之同樣是分布式數(shù)據(jù)庫的指導(dǎo)方針。數(shù)據(jù)庫治理能力的存在,能夠讓管理成本不隨著數(shù)據(jù)庫實(shí)例數(shù)目的增長而提升。

配置動(dòng)態(tài)化

Apache ShardingSphere 使用配置中心來管理配置,可以在配置修改后的極短時(shí)間內(nèi)傳播到所有的接入端實(shí)例。配置中心采用開放的 SPI 方式,能夠充分利用配置中心自身的能力,如配置多版本變更等。

高可用

Apache ShardingSphere 使用注冊中心管理接入端實(shí)例和數(shù)據(jù)庫實(shí)例的運(yùn)行狀態(tài)。注冊中心同樣采用配置中心的開放 SPI 方式。部分注冊中心的實(shí)現(xiàn)可以涵蓋配置中心的能力,因此用戶可以疊加使用注冊中心和配置中心的能力。

Apache ShardingSphere 提供了數(shù)據(jù)庫實(shí)例禁用和接入端熔斷的能力,分別用于處理數(shù)據(jù)庫實(shí)例不可用和接入端被大流量沖擊的場景。

Apache ShardingSphere 目前正在孵化高可用的 SPI,讓用戶能夠復(fù)用數(shù)據(jù)庫自身提供的高可用方案。目前正在對(duì)接 MySQL 的 MGR 高可用方案。Apache ShardingSphere 可以通過自動(dòng)探知 MGR 的選舉變化并快速傳播至所有的應(yīng)用實(shí)例。

可觀察性

大量數(shù)據(jù)庫和接入端實(shí)例,使得 DBA 和運(yùn)維人員無法迅速感知當(dāng)前系統(tǒng)的狀況。Apache ShardingSphere 通過對(duì) OpenTracing 協(xié)議的實(shí)現(xiàn),將監(jiān)控?cái)?shù)據(jù)發(fā)送至實(shí)現(xiàn)其協(xié)議的第三方 APM 系統(tǒng)中;除此之外,Apache ShardingSphere 還提供了 Apache SkyWalking 的自動(dòng)探針,可以讓使用它作為可觀察性產(chǎn)品的用戶直接觀測到 Apache ShardingSphere 的性能、調(diào)用鏈關(guān)系以及系統(tǒng)的整體拓?fù)鋱D。

數(shù)據(jù)治理

得益于 Apache ShardingSphere 對(duì) SQL 靈活的處理能力和對(duì)數(shù)據(jù)庫協(xié)議的高度兼容性,數(shù)據(jù)相關(guān)的治理能力也被很方便的加入到了產(chǎn)品生態(tài)中。

脫敏

Apache ShardingSphere 可以讓用戶在無需修改代碼的情況下,自動(dòng)將指定的數(shù)據(jù)列加密后存儲(chǔ)至數(shù)據(jù)庫,并在應(yīng)用程序獲取數(shù)據(jù)時(shí)解密,以保證數(shù)據(jù)的安全。當(dāng)數(shù)據(jù)庫的數(shù)據(jù)被不慎泄露時(shí),敏感數(shù)據(jù)信息由于被完全加密,從而不會(huì)造成更大的安全隱患。

影子庫表

Apache ShardingSphere 可以在系統(tǒng)進(jìn)行全鏈路壓測時(shí),自動(dòng)將用戶標(biāo)記的數(shù)據(jù)路由至影子庫(表)。影子庫(表)壓測功能可以讓線上壓測成為常態(tài),用戶無需在關(guān)心壓測數(shù)據(jù)的清理。此項(xiàng)功能也正在高速的孵化中。

4 線路規(guī)劃

如您所見,Apache ShardingSphere 正處于高速發(fā)展的軌道中,越來越多與“分庫分表”這條曾經(jīng)主線并無強(qiáng)關(guān)聯(lián)的功能被加入其中。但這些產(chǎn)品功能卻并不突兀,它們反而能助力 Apache ShardingSphere 成為更加多元化的分布式數(shù)據(jù)庫解決方案。Apache ShardingSphere 未來的線路主要會(huì)集中在以下幾點(diǎn)。

可插拔平臺(tái)

越來越多的零散功能需要進(jìn)一步梳理。Apache ShardingSphere 現(xiàn)有的架構(gòu)還不足以完全吸收如此廣泛的產(chǎn)品功能。彈性化的功能可插拔平臺(tái)是 Apache ShardingSphere 未來架構(gòu)的調(diào)整方向。

可插拔平臺(tái)會(huì)將 Apache ShardingSphere 從技術(shù)和功能兩方面完全拆開。Apache ShardingSphere 的全景圖如下所示:

我們是怎樣打造一款分布式數(shù)據(jù)庫的

Apache ShardingSphere 會(huì)根據(jù)技術(shù)架構(gòu)橫向分為 4 層,分別是接入層、SQL 解析層、內(nèi)核處理層和存儲(chǔ)訪問層;并且將功能以可插拔的形態(tài)融入至 4 層架構(gòu)中。

Apache ShardingSphere 對(duì)數(shù)據(jù)庫類型的支持將完全開放,除了關(guān)系型數(shù)據(jù)庫,NoSQL 也會(huì)完全開放支持,數(shù)據(jù)庫方言互不影響,完全解耦。在功能方面,Apache ShardingSphere 采用疊加式架構(gòu)模型,使各個(gè)功能可以靈活的組合使用。每個(gè)功能模塊只需關(guān)注自身的核心功能,由 Apache ShardingSphere 架構(gòu)負(fù)責(zé)功能的疊加組合使用。即使沒有任何功能,Apache ShardingSphere 也可以作為一個(gè)空白的接入端直接啟動(dòng),為開發(fā)者的定制化開發(fā)提供腳手架以及 SQL 解析等基礎(chǔ)設(shè)施。融入 Apache ShardingSphere 生態(tài)的數(shù)據(jù)庫,將直接獲得平臺(tái)提供的所有基礎(chǔ)能力;在 Apache ShardingSphere 平臺(tái)上開發(fā)的功能,也將直接獲得已接入平臺(tái)的數(shù)據(jù)庫類型的全部支持。數(shù)據(jù)庫類型和功能類型將以相乘的方式排列組合,基礎(chǔ)設(shè)施 + 樂高的組合,將為 Apache ShardingSphere 提供各種想象和提升的空間。

查詢引擎

目前 Apache ShardingSphere 只是將 SQL 通過正確的路由和改寫,分發(fā)至相應(yīng)的數(shù)據(jù)庫以操作數(shù)據(jù)。計(jì)算下發(fā)能夠充分利用的數(shù)據(jù)庫的查詢引擎,但無法有效的支持復(fù)雜關(guān)聯(lián)查詢和子查詢。基于關(guān)系代數(shù)實(shí)現(xiàn)的 SQL on KV 查詢引擎隨著 JDTX 的開發(fā)日臻成熟,將其積累的經(jīng)驗(yàn)反哺于 SQL 查詢引擎,能夠讓 Apache ShardingSphere 更好的支持子查詢和跨庫關(guān)聯(lián)查詢等復(fù)雜查詢。

多數(shù)據(jù)副本

分布式數(shù)據(jù)庫所需要的多數(shù)據(jù)副本能力目前的 Apache ShardingSphere 還未具備。未來 Apache ShardingSphere 將提供基于 Raft 的多副本寫入能力。

Database Mesh

上文中提到的 Sharding-Sidecar 接入端,是 Apache ShardingSphere 未來的第三個(gè)接入端形態(tài),旨在更好的與 Kubernetes 配合,打造云原生數(shù)據(jù)庫。

Database Mesh 的關(guān)注重點(diǎn)在于如何將分布式的數(shù)據(jù)訪問應(yīng)用與數(shù)據(jù)庫有機(jī)串聯(lián)起來,它更加關(guān)注的是交互,是將雜亂無章的應(yīng)用與數(shù)據(jù)庫之間的交互有效的梳理。使用 Database Mesh,訪問數(shù)據(jù)庫的應(yīng)用和數(shù)據(jù)庫終將形成一個(gè)巨大的網(wǎng)格體系,應(yīng)用和數(shù)據(jù)庫只需在網(wǎng)格體系中對(duì)號(hào)入座即可,它們都是被嚙合層所治理的對(duì)象。

Data Federation

支持更多的數(shù)據(jù)庫類型之后,Apache ShardingSphere 會(huì)將工作重點(diǎn)放在多元異構(gòu)的數(shù)據(jù)庫類型的統(tǒng)一查詢引擎之上。除此之外,Apache ShardingSphere 還將配合 JDTX,將更加多元的數(shù)據(jù)存儲(chǔ)介質(zhì)納入到同一事務(wù)中。

5 開源與社區(qū)

Apache ShardingSphere 在 2016 年 1 月 17 日在 GitHub 平臺(tái)首次開源,開源項(xiàng)目的初始名稱是 Sharding-JDBC。在 2018 年 11 月 10 日,ShardingSphere 改名并正式進(jìn)入 Apache 軟件基金會(huì)的孵化器。

在開源至今走過的 4 年里程中,Apache ShardingSphere 的架構(gòu)模型在不斷的演進(jìn)的同時(shí),整體產(chǎn)品的功能范圍也在急速地?cái)U(kuò)張。它從開源之初的分庫分表 Java 開發(fā)框架,逐漸演化為分布式數(shù)據(jù)庫解決方案。

隨著 Apache ShardingSphere 的生態(tài)圈的擴(kuò)張,由少數(shù)開發(fā)者掌控項(xiàng)目的狀態(tài)早已被打破。目前的 Apache ShardingSphere 有近百名貢獻(xiàn)者,以及近 20 名核心提交者,他們共同打造著這個(gè)遵循著 Apache Way 的社區(qū)。Apache ShardingSphere 是一個(gè)標(biāo)準(zhǔn)的 Apache 軟件基金會(huì)開源項(xiàng)目,并不受某一商業(yè)公司或某幾位核心開發(fā)者掌控。

目前有超過 100 家公司明確的聲明他們在使用 Apache ShardingSphere,讀者可以從官方網(wǎng)站找到采用公司的用戶墻。

隨著社區(qū)的成熟,Apache ShardingSphere 的成長也越來越迅速。我們誠邀感興趣的開發(fā)者一同參與到 Apache ShardingSphere 社區(qū)中,完善不斷擴(kuò)大的生態(tài)。

項(xiàng)目地址:

https://github.com/apache/incubator-shardingsphere

責(zé)任編輯:張燕妮 來源: 架構(gòu)頭條
相關(guān)推薦

2018-06-05 14:21:33

NewSQLMySQLRadonDB

2021-04-27 10:17:42

數(shù)據(jù)庫工具技術(shù)

2022-06-09 10:19:10

分布式數(shù)據(jù)庫

2023-07-31 08:27:55

分布式數(shù)據(jù)庫架構(gòu)

2023-04-26 06:56:31

分布式數(shù)據(jù)庫偽需求

2021-12-20 15:44:28

ShardingSph分布式數(shù)據(jù)庫開源

2023-12-05 07:30:40

KlustronBa數(shù)據(jù)庫

2023-07-28 07:56:45

分布式數(shù)據(jù)庫SQL

2023-11-14 08:24:59

性能Scylla系統(tǒng)架構(gòu)

2022-03-10 06:36:59

分布式數(shù)據(jù)庫排序

2011-05-19 09:18:48

分布式數(shù)據(jù)庫

2023-03-07 09:49:04

分布式數(shù)據(jù)庫

2020-06-23 09:35:13

分布式數(shù)據(jù)庫網(wǎng)絡(luò)

2024-09-09 09:19:57

2022-08-01 18:33:45

關(guān)系型數(shù)據(jù)庫大數(shù)據(jù)

2022-12-01 07:36:40

2021-04-27 19:24:22

PingCAPHTAP數(shù)據(jù)庫

2020-04-14 11:14:02

PostgreSQL分布式數(shù)據(jù)庫

2024-03-11 08:57:02

國產(chǎn)數(shù)據(jù)庫證券

2022-12-14 08:00:00

數(shù)據(jù)庫分布式數(shù)據(jù)庫隔離
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲一区二区久久 | 天堂资源| 99亚洲精品 | 久久极品| 一区二区三区欧美 | 国产二区精品视频 | 无毛av| 精品久久伊人 | 久久精品免费 | 成人精品一区亚洲午夜久久久 | 国产伦精品一区二区三区在线 | 亚洲国产成人av | 九九国产在线观看 | 成人精品国产免费网站 | 欧美一级黄色网 | 久久99精品久久久久子伦 | 人妖av| 亚洲欧美日韩精品久久亚洲区 | 一区二区三区免费观看 | 91污在线 | 亚洲色图婷婷 | 成人小视频在线观看 | 欧美综合久久久 | www.9191.com| 亚洲毛片网站 | 亚洲精品国产综合区久久久久久久 | 久久久无码精品亚洲日韩按摩 | 国产精品2区 | 国产精品久久久亚洲 | 国产精品久久久久久吹潮 | 成人在线视频网址 | 成人在线免费观看 | 高清人人天天夜夜曰狠狠狠狠 | 精品伊人 | 亚洲精品久| 国产乱码精品一区二区三区忘忧草 | 国产剧情一区 | 亚洲欧美激情精品一区二区 | 国产黄色精品 | 欧美日韩亚洲一区 | 成人欧美一区二区三区1314 |