- Apache ShardingSphere權威指南
- 潘娟 張亮 (阿爾及利亞)亞幸·西·塔伊布
- 1438字
- 2024-10-25 14:08:44
1.4.3 可插拔
在ShardingSphere的整個發展過程中,通過逐步添加新功能的方式對其進行了擴展。為了避免陡峭的學習曲線嚇退新的用戶和開發人員,導致他們不敢在數據庫環境中集成ShardingSphere,ShardingSphere采用了可插拔架構。
ShardingSphere的核心價值不在于它能訪問多少數據庫、提供多少功能,而在于它的可插拔架構,這種架構的可擴展性極強,對開發人員非常友好。開發人員可在不修改源代碼的情況下,給ShardingSphere添加定制的功能。
ShardingSphere的可插拔架構由微內核和3層可插拔模塊組成。ShardingSphere架構之上是頂層API,因此內核根本不知道各種功能的存在。對于不需要的功能,只需將相關的依賴刪除即可,而這不會給系統帶來任何影響。圖1.3展示了ShardingSphere的內部結構。
可以看到,3層之間是彼此完全獨立的。面向插件的設計意味著內核和功能模塊提供了全面的可擴展性支持,讓你在構建ShardingSphere實例時,即便將某些功能模塊刪除(即選擇不安裝它們),也不會影響總體的使用體驗。
1.可供選擇的架構
數據庫中間件需要提供兩方面的支持:訪問數據庫的驅動程序和獨立的代理。考慮到任何架構適配器都存在缺陷,ShardingSphere選擇開發多個適配器。
ShardingSphere-JDBC和ShardingSphere-Proxy是兩款獨立的產品,但你可選擇采用混合模式(混合部署),即同時部署它們。這兩款產品都提供了數十個增強功能,它們將數據庫視為存儲節點,適用于Java同構、異構語言、云原生等場景。

圖1.3 ShardingSphere的內部結構
2.ShardingSphere-JDBC
ShardingSphere-JDBC是ShardingSphere的前身,它是ShardingSphere生態圈的第一款產品,是一個輕量級Java框架,在Java數據庫互連(Java database connectivity,JDBC)層提供額外的服務。ShardingSphere-JDBC提供了極大的靈活性。[1]
● 它適用于所有基于JDBC的對象關系映射(object relational mapping,ORM)框架,如JPA、Hibernate、MyBatis和Spring JDBC Template,我們還可直接將它與JDBC結合起來使用。
● 它支持所有的第三方數據庫連接池,如DBCP、C3P0、BoneCP和HikariCP。
● 它支持所有遵循JDBC標準的數據庫,當前ShardingSphere-JDBC支持MySQL、PostgreSQL、Oracle、SQL Server和其他所有支持JDBC接入的數據庫。
[1]TTL為存活時間(time to live)的縮寫。
上述的數據庫和ORM框架中可能很多都是你耳熟能詳的,那么ShardingSphere-Proxy又提供了哪些支持呢?下面來簡要介紹一下。
3.ShardingSphere-Proxy
ShardingSphere-Proxy是ShardingSphere生態圈的第二款產品。作為透明的數據庫代理,它提供了一個數據庫服務器,其中封裝了數據庫二進制協議,因此它支持異構語言。這個數據庫代理具有如下特征:
● 對應用來說是透明的,因此可直接用作MySQL/PostgreSQL;
● 支持所有與MySQL/PostgreSQL協議兼容的客戶端。
圖1.4是ShardingSphere-Proxy的典型系統的拓撲結構,展示了ShardingSphere-Proxy所處的位置。

圖1.4 ShardingSphere-Proxy的典型系統的拓撲結構
可以看到,ShardingSphere-Proxy是非侵入性的,很容易將其添加到系統中,這提供了極大的靈活性。[2]
你可能會問,這兩個適配器有什么不同?下面簡單比較它們。有關這兩款產品的更深入的對比,請參閱第5章。
[2]CLI為命令行界面(command line interface)的縮寫。
4.ShardingSphere-JDBC與ShardingSphere-Proxy比較
在簡單的數據庫中間件項目中,不同的接入端意味著不同的部署結構,但ShardingSphere是個例外,它支持大量的功能。因此,隨著大數據計算和資源需求的日益增長,不同的部署結構有不同的資源分配方案。
ShardingSphere-Proxy有一個可獨立部署的分布式計算模塊,適用于執行多維數據計算的應用(這些應用對延遲不那么敏感,但需要使用較多的計算資源)。有關ShardingSphere-JDBC和ShardingSphere-Proxy的更深入的對比,請參閱第5章或ShardingSphere官網文檔。
5.混合部署
ShardingSphere-JDBC采用非集中式架構,適用于基于Java的輕量級、高性能OLTP應用,而ShardingSphere-Proxy提供了靜態入口和異構語言支持,適用于聯機分析處理(online analytical processing,OLAP)應用,還適用于管理和操作分片數據庫。
因此,ShardingSphere生態圈提供了多個端點。我們通過混合部署ShardingSphere-JDBC和ShardingSphere-Proxy,并采用相同的分片策略,可以打造出適合多個應用場景的系統。圖1.5簡要展示了ShardingSphere混合部署(同時部署ShardingSphere-JDBC和ShardingSphere-Proxy)的拓撲結構。
通過像圖1.5那樣同時部署ShardingSphere-JDBC和ShardingSphere-Proxy,可獲得混合計算功能,這讓你能夠調整系統架構,使其更貼合需求。

圖1.5 ShardingSphere混合部署的拓撲結構