您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)ShardingSphere的發(fā)展歷程是什么,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
說到 ShardingSphere 的起源,我們不得不提 Sharding-JDBC 框架,該框架是一款起源于當(dāng)當(dāng)網(wǎng)內(nèi)部的應(yīng)用框架,并于 2017 年初正式開源。從 Sharding-JDBC 到 Apache 頂級項目,ShardingSphere 的發(fā)展經(jīng)歷了不同的演進(jìn)階段。縱觀整個 ShardingSphere 的發(fā)展歷史,我們可以得到時間線與階段性里程碑的演進(jìn)過程圖:
ShardingSphere 的定位非常明確,就是一種關(guān)系型數(shù)據(jù)庫中間件,而并非一個全新的關(guān)系型數(shù)據(jù)庫。ShardingSphere 認(rèn)為,在當(dāng)下,關(guān)系型數(shù)據(jù)庫依然占有巨大市場,但凡涉及數(shù)據(jù)的持久化,關(guān)系型數(shù)據(jù)庫仍然是系統(tǒng)的標(biāo)準(zhǔn)配置,也是各個公司核心業(yè)務(wù)的基石,在可預(yù)見的未來中,這點很難撼動。所以,ShardingSphere 在當(dāng)前階段更加關(guān)注在原有基礎(chǔ)上進(jìn)行兼容和擴展,而非顛覆。
ShardingSphere 構(gòu)建了一個生態(tài)圈,這個生態(tài)圈由一套開源的分布式數(shù)據(jù)庫中間件解決方案所構(gòu)成。按照目前的規(guī)劃,ShardingSphere 由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar 這三款相互獨立的產(chǎn)品組成,其中前兩款已經(jīng)正式發(fā)布,而 Sharding-Sidecar 正在規(guī)劃中。我們可以從這三款產(chǎn)品出發(fā),分析 ShardingSphere 的設(shè)計理念。
Sharding-JDBC
Sharding-JDBC 一開始的設(shè)計就完全兼容 JDBC 規(guī)范,Sharding-JDBC 對外暴露的一套分片操作接口與 JDBC 規(guī)范中所提供的接口完全一致。開發(fā)人員只需要了解 JDBC,就可以使用 Sharding-JDBC 來實現(xiàn)分庫分表,Sharding-JDBC 內(nèi)部屏蔽了所有的分片規(guī)則和處理邏輯的復(fù)雜性。顯然,這種方案天生就是一種具有高度兼容性的方案,能夠為開發(fā)人員提供最簡單、最直接的開發(fā)支持。
在實際開發(fā)過程中,Sharding-JDBC 以 JAR 包的形式提供服務(wù)。開發(fā)人員可以使用這個 JAR 包直連數(shù)據(jù)庫,無需額外的部署和依賴管理。在應(yīng)用 Sharding-JDBC 時,需要注意到 Sharding-JDBC 背后依賴的是一套完整而強大的分片引擎:
由于 Sharding-JDBC 提供了一套與 JDBC 規(guī)范完全一致的 API,所以它可以很方便地與遵循 JDBC 規(guī)范的各種組件和框架進(jìn)行無縫集成。例如,用于提供數(shù)據(jù)庫連接的 DBCP、C3P0 等數(shù)據(jù)庫連接池組件,以及用于提供對象-關(guān)系映射的 Hibernate、MyBatis 等 ORM 框架。當(dāng)然,作為一款支持多數(shù)據(jù)庫的開源框架,Sharding-JDBC 支持 MySQL、Oracle、SQLServer 等主流關(guān)系型數(shù)據(jù)庫。
Sharding-Proxy
ShardingSphere 中的 Sharding-Proxy 組件定位為一個透明化的數(shù)據(jù)庫代理端,所以它是代理服務(wù)器分片方案的一種具體實現(xiàn)方式。在代理方案的設(shè)計和實現(xiàn)上,Sharding-Proxy 同樣充分考慮了兼容性
接下來,我們看一下 Sharding-Proxy 的整體架構(gòu)。對于應(yīng)用程序而言,這種代理機制是完全透明的,可以直接把它當(dāng)作 MySQL 或 PostgreSQL 進(jìn)行使用:
雖然 Sharding-JDBC 和 Sharding-Proxy 具有不同的關(guān)注點,但事實上,我們完全可以將它們整合在一起進(jìn)行使用,也就是說這兩個組件之間也存在兼容性。
Sharding-Sidecar
Sidecar 設(shè)計模式受到了越來越多的關(guān)注和采用,這個模式的目標(biāo)是把系統(tǒng)中各種異構(gòu)的服務(wù)組件串聯(lián)起來,并進(jìn)行高效的服務(wù)治理。ShardingSphere 也基于該模式設(shè)計了 Sharding-Sidecar 組件。截止到目前,ShardingSphere 給出了 Sharding-Sidecar 的規(guī)劃,但還沒有提供具體的實現(xiàn)方案,這里不做具體展開。作為 Sidecar 模式的具體實現(xiàn),我們可以想象 Sharding-Sidecar** 的作用就是以 Sidecar 的形式代理所有對數(shù)據(jù)庫的訪問**。這也是一種兼容性的設(shè)計思路,通過無中心、零侵入的方案將分布式的數(shù)據(jù)訪問應(yīng)用與數(shù)據(jù)庫有機串聯(lián)起來。
ShardingSphere 的整體功能拆分成四大部分,即基礎(chǔ)設(shè)施、分片引擎、分布式事務(wù)和治理與集成,這四大部分也構(gòu)成了本課程介紹 ShardingSphere 的整體行文結(jié)構(gòu),下面我們來分別進(jìn)行介紹:
基礎(chǔ)設(shè)施
微內(nèi)核結(jié)構(gòu)
ShardingSphere 在設(shè)計上采用了微內(nèi)核(MicroKernel)架構(gòu)模式,來確保系統(tǒng)具有高度可擴展性。微內(nèi)核架構(gòu)包含兩部分組件,即內(nèi)核系統(tǒng)和插件。使用微內(nèi)核架構(gòu)對系統(tǒng)進(jìn)行升級,要做的只是用新插件替換舊插件,而不需要改變整個系統(tǒng)架構(gòu):
在 ShardingSphere 中,抽象了一大批插件接口,包含用實現(xiàn) SQL 解析的 SQLParserEntry、用于實現(xiàn)配置中心的 ConfigCenter、用于數(shù)據(jù)脫敏的 ShardingEncryptor,以及用于數(shù)據(jù)庫治理的注冊中心接口 RegistryCenter 等。開發(fā)人員完全可以根據(jù)自己的需要,基于這些插件定義來提供定制化實現(xiàn),并動態(tài)加載到 ShardingSphere 運行時環(huán)境中。
分布式住建
ShardingSphere 同樣提供了分布式主鍵的實現(xiàn)機制,默認(rèn)采用的是 SnowFlake(雪花)算法。
分片引擎
對于分片引擎,ShardingSphere同時支持?jǐn)?shù)據(jù)分片和讀寫分離機制。
數(shù)據(jù)分片
數(shù)據(jù)分片是ShardingSphere的核心功能,常規(guī)的,基于垂直拆分和水平拆分的分庫分表操作它都支持。同時,ShardingSphere也預(yù)留了分片擴展點,開發(fā)人員也可以基于需要實現(xiàn)分片策略的定制化開發(fā)。
讀寫分離
在分庫分表的基礎(chǔ)上,ShardingSphere也實現(xiàn)了基于數(shù)據(jù)庫主從架構(gòu)的讀寫分離機制。而且,這種讀寫分離機制可以和數(shù)據(jù)分片完美地進(jìn)行整合。
分布式事務(wù)
分布式事務(wù)是分布式環(huán)境下確保數(shù)據(jù)一致性的基本功能,作為分布式數(shù)據(jù)庫的一種生態(tài)圈,ShardingSphere也提供了對分布式事務(wù)的全面支持。
標(biāo)準(zhǔn)化事務(wù)處理接口
ShardingSphere支持本地事務(wù)、基于XA兩階段提交的強一致性事務(wù)以及基于BASE的柔性最終一致性事務(wù)。同時,ShardingSphere抽象了一組標(biāo)準(zhǔn)化的事務(wù)處理接口,并通過分片事務(wù)管理器ShardingTransactionManager進(jìn)行統(tǒng)一管理。我們也可以根據(jù)需要實現(xiàn)自己的ShardingTransactionManager從而對分布式事務(wù)進(jìn)行擴展。
強一致性事務(wù)與柔性事務(wù)
ShardingSphere 內(nèi)置了一組分布式事務(wù)的實現(xiàn)方案,其中強一致性事務(wù)內(nèi)置集成了 Atomikos、Narayana 和 Bitronix 等技術(shù)來實現(xiàn) XA 事務(wù)管理器;另一方面,ShardingSphere 內(nèi)部也整合了 Seata 來提供柔性事務(wù)功能。
治理與集成
對于分布式數(shù)據(jù)庫而言,治理的范疇可以很廣,ShardingSphere 也提供了注冊中心、配置中心等一系列功能來支持?jǐn)?shù)據(jù)庫治理。另一方面,ShardingSphere 作為一款支持快速開發(fā)的開源框架,也完成了與其他主流框架的無縫集成。
數(shù)據(jù)脫敏
數(shù)據(jù)脫敏是確保數(shù)據(jù)訪問安全的常見需求,通常做法是對原始的SQL進(jìn)行改寫,從而實現(xiàn)對原文數(shù)據(jù)進(jìn)行加密。當(dāng)我們想要獲取數(shù)據(jù)時,在實現(xiàn)上就需要通過對數(shù)據(jù)庫中所存儲的密文數(shù)據(jù)進(jìn)行解密才能完成。我們可以根據(jù)需要實現(xiàn)一套類似的加解密機制,但ShardingSphere的強大之處在于,它將這套機制內(nèi)嵌到了SQL的執(zhí)行過程中,業(yè)務(wù)開發(fā)人員不需要關(guān)注具體的加解密實現(xiàn)細(xì)節(jié),而只要通過簡單的配置就能實現(xiàn)數(shù)據(jù)的自動脫敏。
配置中心
關(guān)于配置信息的管理,我們可以基于 YAML 格式或 XML 格式的配置文件完成配置信息的維護,這在 ShardingSphere 中都得到了支持。更進(jìn)一步,在 ShardingSphere 中,它還提供了配置信息動態(tài)化的管理機制,可以支持?jǐn)?shù)據(jù)源、表與分片及讀寫分離策略的動態(tài)切換。
注冊中心
ShardingSphere 中的注冊中心提供了基于 Nacos 和 ZooKeeper 的兩種實現(xiàn)方式。而在應(yīng)用場景上,我們可以基于注冊中心完成數(shù)據(jù)庫實例管理、數(shù)據(jù)庫熔斷禁用等治理功能。
鏈路追蹤
SQL 解析與 SQL 執(zhí)行是數(shù)據(jù)分片的最核心步驟,ShardingSphere 在完成這兩個步驟的同時,也會將運行時的數(shù)據(jù)通過標(biāo)準(zhǔn)協(xié)議提交到鏈路跟蹤系統(tǒng)。ShardingSphere 使用 OpenTracing API 發(fā)送性能追蹤數(shù)據(jù)。像 SkyWalking、Zipkin 和 Jaeger 等面向 OpenTracing 協(xié)議的具體產(chǎn)品都可以和 ShardingSphere 自動完成對接。
系統(tǒng)集成
這里所謂的系統(tǒng)集成,指的是ShardingSphere和Spring系列框架的集成。到目前為止,ShardingSphere實現(xiàn)了兩種系統(tǒng)的集成機制,一種是命名空間機制,即通過擴展Spring Schema來實現(xiàn)與Spring框架的集成;而另一種則是通過編寫自定義的stater組件來完成與Spring Boot的集成。
看完上述內(nèi)容,你們對ShardingSphere的發(fā)展歷程是什么有進(jìn)一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。