這些開源的分庫(kù)分表中間件,你們都知道嗎?
當(dāng)我們的數(shù)據(jù)達(dá)到一定的量級(jí)之后,單表甚至單庫(kù)都無法支撐之時(shí),那么,便會(huì)涉及到分庫(kù)分表。分庫(kù)分表的方式有多種,開源的解決方案也很多,都是圍繞客戶端和代理兩種模式來處理的。
客戶端的組件比較多,很多人也在用,這里就分享一些代理模式的開源中間件
Apache ShardingSphere
Apache ShardingSphere 是一款分布式的數(shù)據(jù)庫(kù)生態(tài)系統(tǒng), 可以將任意數(shù)據(jù)庫(kù)轉(zhuǎn)換為分布式數(shù)據(jù)庫(kù),并通過數(shù)據(jù)分片、彈性伸縮、加密等能力對(duì)原有數(shù)據(jù)庫(kù)進(jìn)行增強(qiáng)。由 ShardingSphere-JDBC 和 ShardingSphere-Proxy 這 2 款既能夠獨(dú)立部署,又支持混合部署配合使用的產(chǎn)品組成。 它們均提供標(biāo)準(zhǔn)化的基于數(shù)據(jù)庫(kù)作為存儲(chǔ)節(jié)點(diǎn)的增量功能,可適用于如 Java 同構(gòu)、異構(gòu)語言、云原生等各種多樣化的應(yīng)用場(chǎng)景。
ShardingSphere-JDBC 定位為輕量級(jí) Java 框架,在 Java 的 JDBC 層提供的額外服務(wù)。 它使用客戶端直連數(shù)據(jù)庫(kù),以 jar 包形式提供服務(wù),無需額外部署和依賴。
ShardingSphere-Proxy 定位為透明化的數(shù)據(jù)庫(kù)代理端,通過實(shí)現(xiàn)數(shù)據(jù)庫(kù)二進(jìn)制協(xié)議,對(duì)異構(gòu)語言提供支持。 目前提供 MySQL 和 PostgreSQL 協(xié)議,透明化數(shù)據(jù)庫(kù)操作,對(duì) DBA 更加友好。
開源地址:https://github.com/apache/shardingsphere.git。
Vitess
Vitess是一個(gè)用于部署、擴(kuò)展和管理大型MySQL實(shí)例集群的數(shù)據(jù)庫(kù)解決方案。Vitess集Mysql數(shù)據(jù)庫(kù)的很多重要特性和NoSQL數(shù)據(jù)庫(kù)的可擴(kuò)展性于一體。它的架構(gòu)設(shè)計(jì)使得您可以像在物理機(jī)上一樣在公共云或私有云架構(gòu)中有效運(yùn)行。它結(jié)合并擴(kuò)展了許多重要的MySQL功能,同時(shí)兼具NoSQL數(shù)據(jù)庫(kù)的可擴(kuò)展性。
代碼地址:https://github.com/vitessio/vitess.git。
Gaea
Gaea是小米中國(guó)區(qū)電商研發(fā)部研發(fā)的基于mysql協(xié)議的數(shù)據(jù)庫(kù)中間件,目前在小米商城大陸和海外得到廣泛使用,包括訂單、社區(qū)、活動(dòng)等多個(gè)業(yè)務(wù)。
具備的功能:
開源地址:https://github.com/XiaoMi/Gaea.git。
MaxScale
MaxScale是MariDB開發(fā)的一個(gè)數(shù)據(jù)中間件,能夠?qū)崿F(xiàn)讀寫分離,并且可以根據(jù)主從狀態(tài)實(shí)現(xiàn)寫庫(kù)的自動(dòng)切換。
開源地址:https://github.com/mariadb-corporation/MaxScale.git。
Mycat
Mycat是基于開源cobar演變而來,支持SQL92標(biāo)準(zhǔn),遵守Mysql原生協(xié)議,跨語言,跨平臺(tái),跨數(shù)據(jù)庫(kù)的通用中間件代理。
源碼地址:https://github.com/MyCATApache/Mycat-Server.git。
除了上面幾個(gè)目前還是維護(hù)的幾個(gè)項(xiàng)目外,也還有一些其他公司開源的解決方案:
阿里巴巴Cobar:https://github.com/alibaba/cobar.git。
360Atlas::https://github.com/Qihoo360/Atlas.git。
另外,也還有很多開源的客戶端的解決方案。當(dāng)然,在分庫(kù)分表之后,又會(huì)衍生出其它問題,現(xiàn)在如今,也有很多廠家提供了強(qiáng)大的分布式數(shù)據(jù)庫(kù),來幫我處理了分庫(kù)分表的麻煩。