ShardingSphere - 分佈式數據庫中間層
官網地址: http://shardingsphere.io/
文檔支持
概覽
ShardingSphere是一個分佈式數據庫中間件解決方案的開源項目,包含了3個獨立的產品,分別爲Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar.它們一起提供了數據分片、分佈式事務和數據庫編排等功能,適用於Java同構、異構語言和本地雲等多種情況。
爲了合理利用分佈式系統中數據庫的計算和存儲能力,ShardingSphere將自己定義爲中間件,而不是一種全新的數據庫類型。關係數據庫作爲許多企業的基石,仍然佔據着巨大的市場份額。因此,在現階段,我們更傾向於關注它的增量而不是完全顛覆。
Sharding-JDBC
Sharding-JDBC將自己定義爲一個輕量級Java框架,它在Java JDBC層提供額外的服務。
由於客戶端直接連接到數據庫,它以jar的形式提供服務,不需要額外的部署和依賴。
它可以看作是一種增強的JDBC驅動程序,完全兼容JDBC和各種ORM框架。
適用於任何基於Java的ORM框架,如JPA、Hibernate、Mybatis、Spring JDBC模板或JDBC的直接使用。
基於任何第三方數據庫連接池,如DBCP, C3P0, BoneCP, Druid, HikariCP。
*支持任何類型的數據庫JDBC標準:符合MySQL,Oracle和PostgreSQL狀態"置疑"。
Sharding-Proxy
Sharding-Proxy將自己定義爲一個透明的數據庫代理,提供一個封裝數據庫二進制協議以支持異構語言的數據庫服務器。
對DBA更友好的是,現在提供的MySQL版本可以使用任何一種與MySQL協議兼容的客戶端訪問(如MySQL命令客戶端、MySQL Workbench等)來操作數據。
對應用程序完全透明,可以直接作爲MySQL使用。
適用於任何一種兼容MySQL協議的客戶端兼容。
Sharding-Sidecar(TBD)
Sharding-Sidecar (TBD)將自己定義爲Kubernetes或Mesos環境的雲本地數據庫代理,負責以DaemonSet的形式對數據庫的所有訪問。通過分散化和零成本的解決方案,它提供了一個與數據庫交互的網格層,即,數據庫網格,又稱數據庫網格。
Database Mesh強調如何將分佈式數據庫訪問應用程序與數據庫連接起來。它專注於交互,有效地組織混亂的應用程序和數據庫之間的交互。使用database Mesh訪問數據庫的應用程序和數據庫會形成一個大的網格系統,只需要將它們放到相應的位置即可。它們都是由網格層控制的。
Sharding-JDBC | Sharding-Proxy | Sharding-Sidecar | |
---|---|---|---|
Database | Any | MySQL | MySQL |
Connections Cost Number | High | Low | High |
Heterogeneous Language | Java Only | Any | Any |
Performance | Low loss | Relatively High loss | Low loss |
Decentralization | Yes | No | No |
Static Entry | No | Yes | No |
Hybrid Architecture
Sharding-JDBC採用分散式架構,適用於Java開發的高性能輕量級OLTP應用;
sharding - proxy提供靜態入口和異構語言支持,適用於OLAP應用和分片數據庫的管理和運行情況。
ShardingSphere是一個生態球,由多個端點組成。ShardingSphere通過一個註冊中心對sharding - jdbc和sharding - proxy的混合使用和統一的sharding策略,可以構建適用於各種情況的應用系統。
架構師可以更自由地將系統體系結構調整爲最適合當前業務的體系結構。
Features
數據切片
- Database sharding & Table sharding(分庫分表)
- Read-write splitting:讀寫分離
- Distributed primary key: 分佈式主鍵
分佈式事務
- XA transaction
- BASE transaction
Database Orchestration
- Dynamic configuration
- Fusing & Disabling
- Tracing
- Elastic scaling out (Planing)