概述
ShardingSphere是一套開源的分布式數據庫中間件解決方案組成的生態圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(計劃中)這3款相互獨立的產品組成。 他們均提供標準化的數據分片、分布式事務和數據庫治理功能,可適用于如JAVA同構、異構語言、容器、云原生等各種多樣化的應用場景。
ShardingSphere定位為關系型數據庫中間件,旨在充分合理地在分布式的場景下利用關系型數據庫的計算和存儲能力,而并非實現一個全新的關系型數據庫。 它與NoSQL和NewSQL是并存而非互斥的關系。NoSQL和NewSQL作為新技術探索的前沿,放眼未來,擁抱變化,是非常值得推薦的。反之,也可以用另一種思路看待問題,放眼未來,關注不變的東西,進而抓住事物本質。 關系型數據庫當今依然占有巨大市場,是各個公司核心業務的基石,未來也難于撼動,我們目前階段更加關注在原有基礎上的增量,而非顛覆。
ShardingSphere目前已經進入Apache孵化器, 歡迎通過shardingsphere的dev郵件列表與我們討論。
目前所有的可用發布都是進入Apache孵化器之前的發布版本,Apache官方發布將從4.0.0版本開始。

Sharding-JDBC
定位為輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連數據庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。
- 適用于任何基于Java的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
- 基于任何第三方的數據庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
- 支持任意實現JDBC規范的數據庫。目前支持MySQL,Oracle,SQLServer和PostgreSQL。

Sharding-Proxy
定位為透明化的數據庫代理端,提供封裝了數據庫二進制協議的服務端版本,用于完成對異構語言的支持。 目前先提供MySQL和PostgreSQL版本,它可以使用任何兼容MySQL和PostgreSQL協議的訪問客戶端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數據,對DBA更加友好。
- 向應用程序完全透明,可直接當做MySQL或PostgreSQL使用。
- 適用于任何兼容MySQL或PostgreSQL協議的的客戶端。

Sharding-Sidecar(TBD)
定位為Kubernetes或Mesos的云原生數據庫代理,以DaemonSet的形式代理所有對數據庫的訪問。 通過無中心、零侵入的方案提供與數據庫交互的的嚙合層,即Database Mesh,又可稱數據庫網格。
Database Mesh的關注重點在于如何將分布式的數據訪問應用與數據庫有機串聯起來,它更加關注的是交互,是將雜亂無章的應用與數據庫之間的交互有效的梳理。 使用Database Mesh,訪問數據庫的應用和數據庫終將形成一個巨大的網格體系,應用和數據庫只需在網格體系中對號入座即可,它們都是被嚙合層所治理的對象。

Sharding-JDBCSharding-ProxySharding-Sidecar數據庫任意MySQL/PostgreSQLMySQL/PostgreSQL連接消耗數高低高異構語言僅Java任意任意性能損耗低損耗略高損耗低無中心化是否是靜態入口無有無
混合架構
Sharding-JDBC采用無中心化架構,適用于Java開發的高性能的輕量級OLTP應用;Sharding-Proxy提供靜態入口以及異構語言的支持,適用于OLAP應用以及對分片數據庫進行管理和運維的場景。
ShardingSphere是多接入端共同組成的生態圈。 通過混合使用Sharding-JDBC和Sharding-Proxy,并采用同一注冊中心統一配置分片策略,能夠靈活的搭建適用于各種場景的應用系統,使得架構師更加自由的調整適合與當前業務的最佳系統架構。

功能列表
數據分片
- 分庫 & 分表
- 讀寫分離
- 分片策略定制化
- 無中心化分布式主鍵
分布式事務
- 標準化事務接口
- XA強一致事務
- 柔性事務
數據庫治理
- 配置動態化
- 編排 & 治理
- 數據脫敏
- 可視化鏈路追蹤
- 彈性伸縮(規劃中)
Roadmap
