Apache ShardingSphere是一套開源的分散式資料庫中間件解決方案所組成的生態圈,它由JDBC、Proxy和Sidecar(規劃中)這3款相互獨立,卻又能夠混合部署配合使用的產品組成。它們均提供標準化的資料分片、分散式事務和資料庫治理功能,可適用於如Java同構、異質語言、雲端原生等各種多樣化的應用場景。
Apache ShardingSphere定位為關聯式資料庫中間件,旨在充分合理地在分散式的場景下利用關係型資料庫的運算和儲存能力,而並非實作一個全新的關係型資料庫。它藉由專注不變,進而抓住事物本質。關係型資料庫至今仍佔有龐大市場,是各家公司核心業務的基石,未來也難於撼動,我們目前階段更加關注在原有基礎上的增量,而非顛覆。
Apache ShardingSphere 5.x開始致力於可插拔架構,專案的功能元件能夠靈活的以可插拔的方式進行擴充。目前,資料分片、讀寫分離、多資料副本、資料加密、影子庫壓測等功能,以及對MySQL、PostgreSQL、SQLServer、Oracle等SQL與協定的支持,都透過插件的方式織入專案。開發者能夠像使用積木一樣客製化屬於自己的獨特系統。 Apache ShardingSphere目前已提供數十個SPI作為系統的擴充點,而且仍在增加中。
ShardingSphere-JDBC
定位為輕量級Java框架,在Java的JDBC層提供的額外服務。它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全相容於JDBC和各種ORM框架。
適用於任何基於JDBC的ORM框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template或直接使用JDBC。
支援任何第三方的資料庫連接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP等。
支援任意實作JDBC規範的資料庫,目前支援MySQL,Oracle,SQLServer,PostgreSQL以及任何遵循SQL92標準的資料庫。
ShardingSphere-Proxy
定位為透明化的資料庫代理端,提供封裝了資料庫二進位協定的服務端,用於完成對異質語言的支援。 目前提供MySQL和PostgreSQL,它可以使用任何相容MySQL/PostgreSQL協定的存取客戶端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數據,對DBA更加友善。
向應用程式完全透明,可直接當做MySQL/PostgreSQL服務端使用。
適用於任何相容MySQL/PostgreSQL協定的客戶端。
ShardingSphere-Sidecar(TODO)
定位為Kubernetes的雲端原生資料庫代理,以Sidecar的形式代理所有對資料庫的存取。透過無中心、零侵入的方案提供與資料庫互動的的嚙合層,即Database Mesh,又可稱為資料庫網格。
Database Mesh的關注重點在於如何將分散式的資料存取應用程式與資料庫有機串聯起來,它更加關注的是交互,是將雜亂無章的應用與資料庫之間的交互進行有效地梳理。使用Database Mesh,存取資料庫的應用程式和資料庫終將形成一個巨大的網格體系,應用和資料庫只需在網格體系中對號入座即可,它們都是被嚙合層所治理的物件。
混合架構
ShardingSphere-JDBC採用無中心化架構,適用於Java開發的高效能的輕量級OLTP應用;ShardingSphere-Proxy提供靜態入口以及異構語言的支持,適用於OLAP應用以及對分片資料庫進行管理和運維的場景。
Apache ShardingSphere是多重存取端共同組成的生態圈。 透過混合使用ShardingSphere-JDBC和ShardingSphere-Proxy,並採用同一註冊中心統一配置分片策略,能夠靈活的搭建適用於各種場景的應用系統,使得架構師更自由地調整適合與當前業務的最佳系統架構。
1.數據分片
分庫& 分錶
讀寫分離
分片策略客製化
無中心化分散式主鍵
2、分散式事務
標準化事務介面
XA 強一致事務
柔性事務
3、資料庫治理
分散式治理
彈性伸縮
可觀測性(分散式追蹤、指標度量)
資料加解密
影子表壓測