MySQL 數(shù)據(jù)庫(kù)中間件

1>Cobar 是提供關(guān)系型數(shù)據(jù)庫(kù)(MySQL)分布式服務(wù)的中間件,它可以讓傳統(tǒng)的數(shù)據(jù)庫(kù)得到良好的線(xiàn)性擴(kuò)展,并看上去還是一個(gè)數(shù)據(jù)庫(kù),對(duì)應(yīng)用保持透明。

Cobar以Proxy的形式位于前臺(tái)應(yīng)用和實(shí)際數(shù)據(jù)庫(kù)之間,對(duì)前臺(tái)的開(kāi)放的接口是MySQL通信協(xié)議,將前臺(tái)SQL語(yǔ)句變更并按照數(shù)據(jù)分布規(guī)則發(fā)到合適的后臺(tái)數(shù)據(jù)分庫(kù),再合并返回結(jié)果,模擬單庫(kù)下的數(shù)據(jù)庫(kù)行為。

Cobar屬于中間層方案,在應(yīng)用程序和MySQL之間搭建一層Proxy。中間層介于應(yīng)用程序與數(shù)據(jù)庫(kù)間,需要做一次轉(zhuǎn)發(fā),而基于JDBC協(xié)議并無(wú)額外轉(zhuǎn)發(fā),直接由應(yīng)用程序連接數(shù)據(jù)庫(kù),

性能上有些許優(yōu)勢(shì)。這里并非說(shuō)明中間層一定不如客戶(hù)端直連,除了性能,需要考慮的因素還有很多,中間層更便于實(shí)現(xiàn)監(jiān)控、數(shù)據(jù)遷移、連接管理等功能。

Cobar屬于阿里B2B事業(yè)群,始于2008年,在阿里服役3年多,接管3000+個(gè)MySQL數(shù)據(jù)庫(kù)的schema,集群日處理在線(xiàn)SQL請(qǐng)求50億次以上。

由于Cobar發(fā)起人的離職,Cobar停止維護(hù)。后續(xù)的類(lèi)似中間件,比如MyCAT建立于Cobar之上,包括現(xiàn)在阿里服役的RDRS其中也復(fù)用了Cobar-Proxy的相關(guān)代碼。

2>MyCAT是社區(qū)愛(ài)好者在阿里cobar基礎(chǔ)上進(jìn)行二次開(kāi)發(fā),解決了cobar當(dāng)時(shí)存 在的一些問(wèn)題,并且加入了許多新的功能在其中。目前MyCAT社區(qū)活 躍度很高,

目前已經(jīng)有一些公司在使用MyCAT??傮w來(lái)說(shuō)支持度比 較高,也會(huì)一直維護(hù)下去,發(fā)展到目前的版本,已經(jīng)不是一個(gè)單純的MySQL代理了,

它的后端可以支持MySQL, SQL Server, Oracle, DB2, PostgreSQL等主流數(shù)據(jù)庫(kù),也支持MongoDB這種新型NoSQL方式的存儲(chǔ),未來(lái)還會(huì)支持更多類(lèi)型的存儲(chǔ)。

MyCAT是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)中間件,不僅僅可以用作讀寫(xiě)分離,以及分表分庫(kù)、容災(zāi)管理,而且可以用于多租戶(hù)應(yīng)用開(kāi)發(fā)、云平臺(tái)基礎(chǔ)設(shè)施,讓你的架構(gòu)具備很強(qiáng)的適應(yīng)性和靈活性,

借助于即將發(fā)布的MyCAT只能優(yōu)化模塊,系統(tǒng)的數(shù)據(jù)訪問(wèn)瓶頸和熱點(diǎn)一目了然,根據(jù)這些統(tǒng)計(jì)分析數(shù)據(jù),你可以自動(dòng)或手工調(diào)整后端存儲(chǔ),將不同的表隱射到不同存儲(chǔ)引擎上,而整個(gè)應(yīng)用的代碼一行也不用改變。

MyCAT是在Cobar基礎(chǔ)上發(fā)展的版本,兩個(gè)顯著提高:后端由BIO改為NIO,并發(fā)量有大幅提高; 增加了對(duì)Order By, Group By, Limit等聚合功能

(雖然Cobar也可以支持Order By, Group By, Limit語(yǔ)法,但是結(jié)果沒(méi)有進(jìn)行聚合,只是簡(jiǎn)單返回給前端,聚合功能還是需要業(yè)務(wù)系統(tǒng)自己完成)

3>TDDL是Tabao根據(jù)自己的業(yè)務(wù)特點(diǎn)開(kāi)發(fā)了(Tabao Distributed Data Layer, 外號(hào):頭都大了)。主要解決了分庫(kù)分表對(duì)應(yīng)用的透明化以及異構(gòu)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)復(fù)制,

它是一個(gè)基于集中式配置的jdbc datasourcce實(shí)現(xiàn),具有主備,讀寫(xiě)分離,動(dòng)態(tài)數(shù)據(jù)庫(kù)配置等功能。

TDDL并非獨(dú)立的中間件,只能算作中間層,處于業(yè)務(wù)層和JDBC層中間,是以Jar包方式提供給應(yīng)用調(diào)用,屬于JDBC Shard的思想。

TDDL源碼:https://github.com/alibaba/tb_tddl

TDDL復(fù)雜度相對(duì)較高。當(dāng)前公布的文檔較少,只開(kāi)源動(dòng)態(tài)數(shù)據(jù)源,分表分庫(kù)部分還未開(kāi)源,還需要依賴(lài)diamond,不推薦使用。

4>DRDS是阿里巴巴自主研發(fā)的分布式數(shù)據(jù)庫(kù)服務(wù)(此項(xiàng)目不開(kāi)源),DRDS脫胎于阿里巴巴開(kāi)源的Cobar分布式數(shù)據(jù)庫(kù)引擎,吸收了Cobar核心的Cobar-Proxy源碼,

實(shí)現(xiàn)了一套獨(dú)立的類(lèi)似MySQL-Proxy協(xié)議的解析端,能夠?qū)魅氲腟QL進(jìn)行解析和處理,對(duì)應(yīng)用程序屏蔽各種復(fù)雜的底層DB拓?fù)浣Y(jié)構(gòu),獲得單機(jī)數(shù)據(jù)庫(kù)一樣的使用體驗(yàn),

同時(shí)借鑒了淘寶TDDL豐富的分布式數(shù)據(jù)庫(kù)實(shí)踐經(jīng)驗(yàn),實(shí)現(xiàn)了對(duì)分布式Join支持,SUM/MAX/COUNT/AVG等聚合函數(shù)支持以及排序等函數(shù)支持,

通過(guò)異構(gòu)索引、小表廣播等解決分布式數(shù)據(jù)庫(kù)使用場(chǎng)景下衍生出的一系列問(wèn)題,最終形成了完整的分布式數(shù)據(jù)庫(kù)方案。

5>Atlas是一個(gè)位于應(yīng)用程序與MySQL之間的基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目,它是在mysql-proxy 0.8.2版本上對(duì)其進(jìn)行優(yōu)化,360團(tuán)隊(duì)基于mysql proxy 把lua用C改寫(xiě),

它實(shí)現(xiàn)了MySQL的客戶(hù)端和服務(wù)端協(xié)議,作為服務(wù)端與應(yīng)用程序通訊,同時(shí)作為客戶(hù)端與MySQL通訊。它對(duì)應(yīng)用程序屏蔽了DB的細(xì)節(jié)。

Altas不能實(shí)現(xiàn)分布式分表,所有的字表必須在同一臺(tái)DB的同一個(gè)DataBase里且所有的字表必須實(shí)現(xiàn)建好,Altas沒(méi)有自動(dòng)建表的功能。

原有版本是不支持分庫(kù)分表, 目前已經(jīng)放出了分庫(kù)分表版本。在網(wǎng)上看到一些朋友經(jīng)常說(shuō)在高并 發(fā)下會(huì)經(jīng)常掛掉,如果大家要使用需要提前做好測(cè)試。

6>DBProxy是美團(tuán)點(diǎn)評(píng)DBA團(tuán)隊(duì)針對(duì)公司內(nèi)部需求,在奇虎360公司開(kāi)源的Atlas做了很多改進(jìn)工作,形成了新的高可靠、高可用企業(yè)級(jí)數(shù)據(jù)庫(kù)中間件

其特性主要有:讀寫(xiě)分離、負(fù)載均衡、支持分表、IP過(guò)濾、sql語(yǔ)句黑名單、DBA平滑下線(xiàn)DB、從庫(kù)流量配置、動(dòng)態(tài)加載配置項(xiàng)

項(xiàng)目的Github地址是https://github.com/Meituan-Dianping/DBProxy

7>sharding-JDBC是當(dāng)當(dāng)應(yīng)用框架ddframe中,從關(guān)系型數(shù)據(jù)庫(kù)模塊dd-rdb中分離出來(lái)的數(shù)據(jù)庫(kù)水平分片框架,實(shí)現(xiàn)透明化數(shù)據(jù)庫(kù)分庫(kù)分表訪問(wèn)。

Sharding-JDBC是繼dubbox和elastic-job之后,ddframe系列開(kāi)源的第3個(gè)項(xiàng)目。

Sharding-JDBC直接封裝JDBC API,可以理解為增強(qiáng)版的JDBC驅(qū)動(dòng),舊代碼遷移成本幾乎為零:

可適用于任何基于Java的ORM框架,如JPA、Hibernate、Mybatis、Spring JDBC Template或直接使用JDBC。

可基于任何第三方的數(shù)據(jù)庫(kù)連接池,如DBCP、C3P0、 BoneCP、Druid等。

理論上可支持任意實(shí)現(xiàn)JDBC規(guī)范的數(shù)據(jù)庫(kù)。雖然目前僅支持MySQL,但已有支持Oracle、SQLServer等數(shù)據(jù)庫(kù)的計(jì)劃。

Sharding-JDBC定位為輕量Java框架,使用客戶(hù)端直連數(shù)據(jù)庫(kù),以jar包形式提供服務(wù),無(wú)proxy代理層,無(wú)需額外部署,無(wú)其他依賴(lài),DBA也無(wú)需改變?cè)械倪\(yùn)維方式。

Sharding-JDBC分片策略靈活,可支持等號(hào)、between、in等多維度分片,也可支持多分片鍵。

SQL解析功能完善,支持聚合、分組、排序、limit、or等查詢(xún),并支持Binding Table以及笛卡爾積表查詢(xún)。

知名度較低的:

Heisenberg

Baidu.

其優(yōu)點(diǎn):分庫(kù)分表與應(yīng)用脫離,分庫(kù)表如同使用單庫(kù)表一樣,減少db連接數(shù)壓力,熱重啟配置,可水平擴(kuò)容,遵守MySQL原生協(xié)議,讀寫(xiě)分離,無(wú)語(yǔ)言限制,

mysqlclient, c, java都可以使用Heisenberg服務(wù)器通過(guò)管理命令可以查看,如連接數(shù),線(xiàn)程池,結(jié)點(diǎn)等,并可以調(diào)整采用velocity的分庫(kù)分表腳本進(jìn)行自定義分庫(kù)表,相當(dāng)?shù)撵`活。

https://github.com/brucexx/heisenberg(開(kāi)源版已停止維護(hù))

CDS

JD. Completed Database Sharding.

CDS是一款基于客戶(hù)端開(kāi)發(fā)的分庫(kù)分表中間件產(chǎn)品,實(shí)現(xiàn)了JDBC標(biāo)準(zhǔn)API,支持分庫(kù)分表,讀寫(xiě)分離和數(shù)據(jù)運(yùn)維等諸多共,提供高性能,高并發(fā)和高可靠的海量數(shù)據(jù)路由存取服務(wù),

業(yè)務(wù)系統(tǒng)可近乎零成本進(jìn)行介入,目前支持MySQL, Oracle和SQL Server.

(架構(gòu)上和Cobar,MyCAT相似,直接采用jdbc對(duì)接,沒(méi)有實(shí)現(xiàn)類(lèi)似MySQL協(xié)議,沒(méi)有NIO,AIO,SQL Parser模塊采用JSqlParser, Sql解析器有:druid>JSqlParser>fdbparser.)

DDB

網(wǎng)易. Distributed DataBase.

DDB經(jīng)歷了三次服務(wù)模式的重大更迭:Driver模式->Proxy模式->云模式。

Driver模式:基于JDBC驅(qū)動(dòng)訪問(wèn),提供一個(gè)db.jar, 和TDDL類(lèi)似, 位于應(yīng)用層和JDBC之間. Proxy模式:在DDB中搭建了一組代理服務(wù)器來(lái)提供標(biāo)準(zhǔn)的MySQL服務(wù),

在代理服務(wù)器內(nèi)部實(shí)現(xiàn)分庫(kù)分表的邏輯。應(yīng)用通過(guò)標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)驅(qū)動(dòng)訪問(wèn)DDB Proxy, Proxy內(nèi)部通過(guò)MySQL解碼器將請(qǐng)求還原為SQL, 并由DDB Driver執(zhí)行得到結(jié)果。

私有云模式:基于網(wǎng)易私有云開(kāi)發(fā)的一套平臺(tái)化管理工具Cloudadmin, 將DDB原先Master的功能打散,一部分分庫(kù)相關(guān)功能集成到proxy中,

如分庫(kù)管理、表管理、用戶(hù)管理等,一部分中心化功能集成到Cloudadmin中,如報(bào)警監(jiān)控,此外,Cloudadmin中提供了一鍵部署、自動(dòng)和手動(dòng)備份,版本管理等平臺(tái)化功能。

OneProxy:

數(shù)據(jù)庫(kù)界大牛,前支付寶數(shù)據(jù)庫(kù)團(tuán)隊(duì)領(lǐng)導(dǎo)樓方鑫開(kāi)發(fā),基于mysql官方 的proxy思想利用c進(jìn)行開(kāi)發(fā)的,OneProxy是一款商業(yè)收費(fèi)的中間件, 樓總舍去了一些功能點(diǎn),

專(zhuān)注在性能和穩(wěn)定性上。有朋友測(cè)試過(guò)說(shuō)在 高并發(fā)下很穩(wěn)定。

Oceanus(58同城數(shù)據(jù)庫(kù)中間件)

Oceanus致力于打造一個(gè)功能簡(jiǎn)單、可依賴(lài)、易于上手、易于擴(kuò)展、易于集成的解決方案,甚至是平臺(tái)化系統(tǒng)。擁抱開(kāi)源,提供各類(lèi)插件機(jī)制集成其他開(kāi)源項(xiàng)目,

新手可以在幾分鐘內(nèi)上手編程,分庫(kù)分表邏輯不再與業(yè)務(wù)緊密耦合,擴(kuò)容有標(biāo)準(zhǔn)模式,減少意外錯(cuò)誤的發(fā)生。

Vitess:

這個(gè)中間件是Youtube生產(chǎn)在使用的,但是架構(gòu)很復(fù)雜。 與以往中間件不同,使用Vitess應(yīng)用改動(dòng)比較大要 使用他提供語(yǔ)言的API接口,我們可以借鑒他其中的一些設(shè)計(jì)思想。

Kingshard:

Kingshard是前360Atlas中間件開(kāi)發(fā)團(tuán)隊(duì)的陳菲利用業(yè)務(wù)時(shí)間 用go語(yǔ)言開(kāi)發(fā)的,目前參與開(kāi)發(fā)的人員有3個(gè)左右, 目前來(lái)看還不是成熟可以使用的產(chǎn)品,需要在不斷完善。

MaxScale與MySQL Route:

這兩個(gè)中間件都算是官方的吧,MaxScale是mariadb (MySQL原作者維護(hù)的一個(gè)版本)研發(fā)的,目前版本不支持分庫(kù)分表。

MySQL Route是現(xiàn)在MySQL 官方Oracle公司發(fā)布出來(lái)的一個(gè)中間件。

轉(zhuǎn)自:https://blog.csdn.net/xuheng8600/article/details/80336094

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容