Apache ShardingSphere分布式數(shù)據(jù)庫中間層生態(tài)圈
Apache ShardingSphere 是一套開源的分布式數(shù)據(jù)庫中間件解決方案組成的生態(tài)圈,它由 JDBC、Proxy 和 Sidecar(規(guī)劃中)這 3 款相互獨(dú)立,卻又能夠混合部署配合使用的產(chǎn)品組成。 它們均提供標(biāo)準(zhǔn)化的數(shù)據(jù)分片、分布式事務(wù)和數(shù)據(jù)庫治理功能,可適用于如 Java 同構(gòu)、異構(gòu)語言、云原生等各種多樣化的應(yīng)用場(chǎng)景。
Apache ShardingSphere 定位為關(guān)系型數(shù)據(jù)庫中間件,旨在充分合理地在分布式的場(chǎng)景下利用關(guān)系型數(shù)據(jù)庫的計(jì)算和存儲(chǔ)能力,而并非實(shí)現(xiàn)一個(gè)全新的關(guān)系型數(shù)據(jù)庫。 它通過關(guān)注不變,進(jìn)而抓住事物本質(zhì)。關(guān)系型數(shù)據(jù)庫當(dāng)今依然占有巨大市場(chǎng),是各個(gè)公司核心業(yè)務(wù)的基石,未來也難于撼動(dòng),我們目前階段更加關(guān)注在原有基礎(chǔ)上的增量,而非顛覆。
Apache ShardingSphere 5.x 版本開始致力于可插拔架構(gòu),項(xiàng)目的功能組件能夠靈活的以可插拔的方式進(jìn)行擴(kuò)展。 目前,數(shù)據(jù)分片、讀寫分離、多數(shù)據(jù)副本、數(shù)據(jù)加密、影子庫壓測(cè)等功能,以及對(duì) MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 與協(xié)議的支持,均通過插件的方式織入項(xiàng)目。 開發(fā)者能夠像使用積木一樣定制屬于自己的獨(dú)特系統(tǒng)。Apache ShardingSphere 目前已提供數(shù)十個(gè) SPI 作為系統(tǒng)的擴(kuò)展點(diǎn),而且仍在不斷增加中。
ShardingSphere 已于2020年4月16日成為 Apache 軟件基金會(huì)的頂級(jí)項(xiàng)目。 歡迎通過郵件列表參與討論。
ShardingSphere-JDBC
定位為輕量級(jí) Java 框架,在 Java 的 JDBC 層提供的額外服務(wù)。 它使用客戶端直連數(shù)據(jù)庫,以 jar 包形式提供服務(wù),無需額外部署和依賴,可理解為增強(qiáng)版的 JDBC 驅(qū)動(dòng),完全兼容 JDBC 和各種 ORM 框架。
- 適用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。
- 支持任何第三方的數(shù)據(jù)庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。
- 支持任意實(shí)現(xiàn) JDBC 規(guī)范的數(shù)據(jù)庫,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 標(biāo)準(zhǔn)的數(shù)據(jù)庫。
ShardingSphere-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 更加友好。
- 向應(yīng)用程序完全透明,可直接當(dāng)做 MySQL/PostgreSQL 服務(wù)端使用。
- 適用于任何兼容 MySQL/PostgreSQL 協(xié)議的的客戶端。
ShardingSphere-Sidecar(TODO)
定位為 Kubernetes 的云原生數(shù)據(jù)庫代理,以 Sidecar 的形式代理所有對(duì)數(shù)據(jù)庫的訪問。 通過無中心、零侵入的方案提供與數(shù)據(jù)庫交互的的嚙合層,即 Database Mesh,又可稱數(shù)據(jù)庫網(wǎng)格。
Database Mesh 的關(guān)注重點(diǎn)在于如何將分布式的數(shù)據(jù)訪問應(yīng)用與數(shù)據(jù)庫有機(jī)串聯(lián)起來,它更加關(guān)注的是交互,是將雜亂無章的應(yīng)用與數(shù)據(jù)庫之間的交互進(jìn)行有效地梳理。 使用 Database Mesh,訪問數(shù)據(jù)庫的應(yīng)用和數(shù)據(jù)庫終將形成一個(gè)巨大的網(wǎng)格體系,應(yīng)用和數(shù)據(jù)庫只需在網(wǎng)格體系中對(duì)號(hào)入座即可,它們都是被嚙合層所治理的對(duì)象。
| ShardingSphere-JDBC | ShardingSphere-Proxy | ShardingSphere-Sidecar | |
|---|---|---|---|
| 數(shù)據(jù)庫 | 任意 | MySQL/PostgreSQL | MySQL/PostgreSQL |
| 連接消耗數(shù) | 高 | 低 | 高 |
| 異構(gòu)語言 | 僅 Java | 任意 | 任意 |
| 性能 | 損耗低 | 損耗略高 | 損耗低 |
| 無中心化 | 是 | 否 | 是 |
| 靜態(tài)入口 | 無 | 有 | 無 |
混合架構(gòu)
ShardingSphere-JDBC 采用無中心化架構(gòu),適用于 Java 開發(fā)的高性能的輕量級(jí) OLTP 應(yīng)用;ShardingSphere-Proxy 提供靜態(tài)入口以及異構(gòu)語言的支持,適用于 OLAP 應(yīng)用以及對(duì)分片數(shù)據(jù)庫進(jìn)行管理和運(yùn)維的場(chǎng)景。
Apache ShardingSphere 是多接入端共同組成的生態(tài)圈。 通過混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注冊(cè)中心統(tǒng)一配置分片策略,能夠靈活的搭建適用于各種場(chǎng)景的應(yīng)用系統(tǒng),使得架構(gòu)師更加自由地調(diào)整適合與當(dāng)前業(yè)務(wù)的最佳系統(tǒng)架構(gòu)。
功能列表
數(shù)據(jù)分片
- 分庫 & 分表
- 讀寫分離
- 分片策略定制化
- 無中心化分布式主鍵
分布式事務(wù)
- 標(biāo)準(zhǔn)化事務(wù)接口
- XA 強(qiáng)一致事務(wù)
- 柔性事務(wù)
數(shù)據(jù)庫治理
- 分布式治理
- 彈性伸縮
- 可觀測(cè)性(分布式跟蹤、指標(biāo)度量)
- 數(shù)據(jù)加解密
- 影子表壓測(cè)
