Apache ShardingSphere 定位爲開源的分佈式數據庫中間件解決方案組成的生態圈,旨在充分合理地在分佈式的場景下利用關係型數據庫的計算和存儲能力,而並不是實現一個全新的關係型數據庫。它經過關注不變,進而抓住事物本質。關係型數據庫當今依然佔有巨大市場,是各個公司核心業務的基石,將來也難於撼動,Apache ShardingSphere 目前階段更加關注在原有基礎上的增量,而非顛覆。git
在聊起 Apache ShardingSphere 歷史時,還要從它的前身—— Sharding-JDBC 開始。2015 年,現任 Apache ShardingSphere 項目 VP 的張亮和他的團隊決定在 Java 的 JDBC 層植入代碼,來達成開發成本最小化,自研開源的分佈式數據庫中間件項目 Sharding-JDBC。github
在那以後,Sharding-JDBC 隨着市場的需求不斷更新,完成到ShardingSphere,再到 Apache ShardingSphere 的轉變,產品自己也從分庫分表的 Java 開發框架演化爲了分佈式數據庫生態體系。數據庫
2016 年開始 Apache ShardingSphere 正式開源,不斷升級開發新功能、重構穩定微內核,並於2018 年 11 月進入 Apache 基金會孵化器。apache
2020 年4月16日,Apache ShardingSphere 正式從Apache 軟件基金會(Apache Software Foundation,ASF)畢業,並成爲 Apache 頂級項目(Top Level Project,TLP),這也是目前 ASF 首個分佈式數據庫中間件項目。緩存
Apache ShardingSphere 從成爲孵化器項目,到畢業成爲頂級項目用時17個月。期間,完成了產品從分庫分表中間件轉變爲了分佈式數據庫生態平臺的升級。目前已在 gitHub 上收穫 11000+ 關注度、140+ 公司落地的成功案例。社區運營方面,從孵化前的30+貢獻者,到如今有超過130個貢獻者。安全
Apache ShardingSphere 並非一款產品的名稱,它是_一套開源的分佈式數據庫中間件解決方案組成的生態圈,_由 JDBC、Proxy 和 Sidecar(規劃中) 3 款相互獨立,卻又可以混合部署配合使用的產品組成。它們均提供標準化的數據分片、分佈式事務和數據庫治理功能,可適用於如 _Java 同構、異構語言、_雲原生等各類多樣化的應用場景。服務器
Apache ShardingSphere 生態圈架構以下圖所示:
架構
總體核心功能將組成一個閉環,它不只爲你們提供最爲基礎和核心的數據分片和分佈式事務功能,同時針對以 ShardingSphere 爲中心的整個分佈式數據庫系統,提供數據庫治理的功能,例如配置信息動態_統一管理、調用鏈與拓撲圖、高可用管理、數據脫敏安全、權限控制_等強大的管理功能。併發
此外,ShardingSphere 針對不一樣的數據庫,例如 MySQL、Oracle、PostgreSQL、SQL Server 提供多模式鏈接的支持,真正屏蔽底層數據庫選型的影響,作到不管使用何種數據庫均可在用戶無感知狀況下進行數據分片、分佈式事務、數據庫治理的功能操做。框架
管控界面模塊旨在爲用戶提供清晰可見的信息查看、配置更新管理、統計報表等功能。
在接入端部分,爲了知足不一樣用戶針對不一樣場景的需求,ShardingSphere 提供了多款接入端,包括Sharding-JDBC、Sharding-Proxy 和 _Sharding-Sidecar__(規劃中)_:
- Sharding-JDBC 是一款輕量級的 Java 框架,在 JDBC 層提供上述核心功能,使用方式與正常的 JDBC 方式一模一樣,面向 Java 開發的用戶。
- Sharding-Proxy 是一款實現了 MySQL 二進制協議的服務器端版本,你們能夠把它當成升級版的 MySQL 數據庫使用。獨立部署後,便可按照正常 MySQL 操做方式來使用上述全部的核心功能。
- Sharding-Sidecar 從 Service Mesh 的理念中應用而生,面向於雲原生架構。
Apache ShardingSphere 是一個生態,它的開源基因註定它的發展開放自由、社區參與貢獻。因此在設計它的架構時,會更加註意營造微內核與開發生態。
咱們提供各個方面的開放接口,以方便全部對此感興趣的朋友能參與其中,貢獻代碼,成爲 Apache 基金會項目的提交者。
Github地址:
https://github.com/apache/sha...
當前, ShardingSphere 已在京東落地不少大小業務,涉及到的業務場景複雜多樣,這裏只列舉較爲大型的系統,這些業務系統有的是重要程度較高,有的是業務較爲新穎,以下圖所示:
其中,_京東白條是京東金融的殺手級應用。_因爲業務體量巨大,數據庫不可避免地進行了水平拆分。拆分以後的數據節點規模達到了十萬級別,是極度少見的金融級、高併發、海量數據並存的應用系統。爲了追求性能極致以及代碼的可控性,京東白條以前是在業務框架中,根據分片鍵替換數據庫和表名稱進行分片的。
隨着業務的發展,經過業務框架進行分片的方式,使得代碼的維護成本不斷攀升。ShardingSphere 在通過了大量系統的驗證以後,理所固然的成爲了京東白條的數據分片中間件的首選方案,ShardingSphere 團隊也很是願意幫助京東白條團隊解耦業務和底層技術代碼,緩解開發工程師肩上的重擔。
雖然 ShardingSphere 經歷了大量系統的檢驗,項目已經相對成熟,但面對國內乃至世界上屈指可數的京東金融王牌級產品,仍將是一次嚴峻的考驗。面對京東白條這個量級的應用,ShardingSphere 爲了知足白條業務對 TPS/QPS 的強制要求,作了多方面優化,主要爲:
- SQL 解析結果緩存;
- JDBC 元數據信息緩存;
- Bind 表 & 廣播表的使用;
- 自動化執行引擎 & 流式歸併;
通過了一次次的優化與重構,如今 ShardingSphere 已經平穩地在白條生產環境運行,性能與原生 JDBC 幾乎一致,GC 次數、資源消耗也未見異常。經歷了京東白條的挑戰,ShardingSphere 的穩定性也獲得了進一步的提高。關注 ShardingSphere 的小夥伴們,大家對 ShardingSphere 更有興趣了嗎?
2020 年 7 月 30 日- 8月 1 日,2020 年Cloud Native + Open Source Virtual Summit China 中國峯會將首次以線上形式召開。做爲 CNCF 雲原生基金會白金會員,今年京東智聯雲將繼續在大會中亮相,不只帶來多場精彩演講,還將經過京東智聯云云上展廳,近一步展現_京東雲原生技術動態與前沿技術。_您能夠來雲上展廳更近一步瞭解 ShardingSphere 以及京東在雲原生方面的技術實踐。
參考資料:
https://www.oschina.net/quest..._2316036?sort=time
https://github.com/apache/sha...
點擊"閱讀原文",瞭解更多京東雲原生之路