天天看點

ShardingSphere詳解-詳解ShardingSphere整體架構設計?

作者:架構師面試寶典
ShardingSphere詳解-詳解ShardingSphere整體架構設計?

Apache ShardingSphere 是一套開源的分布式資料庫中間件解決方案組成的生态圈,它由 JDBC、Proxy 和 Sidecar(規劃中)這 3 款互相獨立,卻又能夠混合部署配合使用的産品組成。 它們均提供标準化的資料分片、分布式事務和資料庫治理功能,可适用于如 Java 同構、異構語言、雲原生等各種多樣化的應用場景。

Apache ShardingSphere 定位為關系型資料庫中間件,旨在充分合理地在分布式的場景下利用關系型資料庫的計算和存儲能力,而并非實作一個全新的關系型資料庫。 它通過關注不變,進而抓住事物本質。關系型資料庫當今依然占有巨大市場,是各個公司核心業務的基石,未來也難于撼動,我們目前階段更加關注在原有基礎上的增量,而非颠覆。

ShardingSphere詳解-詳解ShardingSphere整體架構設計?
ShardingSphere詳解-詳解ShardingSphere整體架構設計?

ShardingSphere 已于2020年4月16日成為 Apache 軟體基金會的頂級項目。

ShardingSphere 的組成簡介

Apache ShardingSphere 由 JDBC、Proxy 和 Sidecar(規劃中)這 3 款既能夠獨立部署,又支援混合部署配合使用的産品組成。 它們均提供标準化的基于資料庫作為存儲節點的增量功能,可适用于如 Java 同構、異構語言、雲原生等各種多樣化的應用場景。

ShardingSphere詳解-詳解ShardingSphere整體架構設計?

Sharding-JDCB

定位為輕量級Java架構,在Java的JDBC層提供的額外服務。 它使用用戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可了解為增強版的JDBC驅動,完全相容JDBC和各種ORM架構;如圖所示

ShardingSphere詳解-詳解ShardingSphere整體架構設計?

Sharding-Proxy

定位為透明化的資料庫代理端,提供封裝了資料庫二進制協定的服務端版本,用于完成對異構語言的支援。 目前先提供MySQL/PostgreSQL版本,它可以使用任何相容MySQL/PostgreSQL協定的通路用戶端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作資料,對DBA更加友好。

ShardingSphere詳解-詳解ShardingSphere整體架構設計?

Sharding-Sidecar

定位為Kubernetes的雲原生資料庫代理,以Sidecar的形式代理所有對資料庫的通路。 通過無中心、零侵入的方案提供與資料庫互動的的齧合層,即Database Mesh,又可稱資料網格。

Database Mesh的關注重點在于如何将分布式的資料通路應用與資料庫有機串聯起來,它更加關注的是互動,是将雜亂無章的應用與資料庫之間的互動有效的梳理。使用Database Mesh,通路資料庫的應用和資料庫終将形成一個巨大的網格體系,應用和資料庫隻需在網格體系中對号入座即可,它們都是被齧合層所治理的對象。

ShardingSphere詳解-詳解ShardingSphere整體架構設計?

混合架構模式

Apache ShardingSphere 是多接入端共同組成的生态圈。 通過混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注冊中心統一配置分片政策,能夠靈活的搭建适用于各種場景的應用系統,使得架構師更加自由地調整适合于目前業務的最佳系統架構。ShardingSphere-JDBC 采用無中心化架構,與應用程式共享資源,适用于 Java 開發的高性能的輕量級 OLTP 應用;ShardingSphere-Proxy 提供靜态入口以及異構語言的支援,獨立于應用程式部署,适用于 OLAP 應用以及對分片資料庫進行管理和運維的場景。

ShardingSphere詳解-詳解ShardingSphere整體架構設計?

ShardingSphere可插拔架構

在 Apache ShardingSphere 中,很多功能實作類的加載方式是通過 SPI(Service Provider Interface) 注入的方式完成的。 SPI 是一種為了被第三方實作或擴充的 API,它可以用于實作架構擴充或元件替換。

Apache ShardingSphere 5.x 版本開始緻力于可插拔架構,項目的功能元件能夠靈活的以可插拔的方式進行擴充。 目前,資料分片、讀寫分離、多資料副本、資料加密、影子庫壓測等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 與協定的支援,均通過插件的方式織入項目。 開發者能夠像使用積木一樣定制屬于自己的獨特系統。Apache ShardingSphere 目前已提供數十個 SPI 作為系統的擴充點,仍在不斷增加中。

實作

Apache ShardingSphere 的可插拔架構劃分為 3 層,它們是:L1 核心層、L2 功能層、L3 生态層。

核心層是資料庫基本能力的抽象,其所有元件均必須存在,但具體實作方式可通過可插拔的方式更換。 主要包括查詢優化器、分布式事務引擎、分布式執行引擎、權限引擎和排程引擎等。

功能層用于提供增量能力,其所有元件均是可選的,可以包含零至多個元件。元件之間完全隔離,互無感覺,多元件可通過疊加的方式互相配合使用。 主要包括資料分片、讀寫分離、資料庫高可用、資料加密、影子庫等。使用者自定義功能可完全面向 Apache ShardingSphere 定義的頂層接口進行定制化擴充,而無需改動核心代碼。

生态層用于對接和融入現有資料庫生态,包括資料庫協定、SQL 解析器和存儲擴充卡,分别對應于 Apache ShardingSphere 以資料庫協定提供服務的方式、SQL 方言操作資料的方式以及對接存儲節點的資料庫類型。

總結

上面我們主要介紹了關于Apache ShardingSphere架構相關的知識,介紹了ShardingSphere的發展曆程,介紹ShardingSphere的核心三大元件。了解了ShardingSphere生态後續我們還會為大家帶來ShardingSphere相關的更多内容,希望大家多多關注。

繼續閱讀