學(xué)習(xí)
mycat
mysql
Mycat學(xué)習(xí)實(shí)戰(zhàn)-Mycat初識(shí)
1. Mycat是什么
2. Mycat與其他中間件的區(qū)別
2.1 Mango
2.2 Cobar
2.3 Heisenberg
2.4 Atlas
2.5 Ameoba
3. Mycat能解決的問題
4. Mycat核心概念
4.2.1 分片表
4.2.2 非分片表
4.2.3 ER表
4.2.4 全局表
4.1 邏輯庫(kù)(schema)
4.2 邏輯表(table)
4.3 分片節(jié)點(diǎn)(dataNode)
4.4 節(jié)點(diǎn)主機(jī)(dataHost)
5. Mycat文件夾以及文件介紹
Mycat是一個(gè)徹底開源的面向企業(yè)應(yīng)用開發(fā)的大數(shù)據(jù)庫(kù)集群,支持事務(wù)、ACID,是可以替代MySQL的加強(qiáng)版數(shù)據(jù)庫(kù)。Mycat被視為MySQL集群的企業(yè)級(jí)數(shù)據(jù)庫(kù),用來替代昂貴的Oracle集群,它是融合了內(nèi)存緩存技術(shù)、NoSQL技術(shù)、HDFS大數(shù)據(jù)的新型SQL Server,是結(jié)合了傳統(tǒng)數(shù)據(jù)庫(kù)和新型分布式數(shù)據(jù)倉(cāng)庫(kù)的新一代的企業(yè)級(jí)數(shù)據(jù)庫(kù)產(chǎn)品,也是一個(gè)優(yōu)秀的數(shù)據(jù)庫(kù)中間件。
目前的數(shù)據(jù)庫(kù)中間件有很多。
Mango的中文名是“芒果”,它是一個(gè)輕量級(jí)的極速數(shù)據(jù)層訪問框架,目前已有十多個(gè)大型線上項(xiàng)目在使用它。據(jù)稱,某一支付系統(tǒng)利用Mango承載了每秒12萬的支付下單請(qǐng)求,其超高的性能及超快的響應(yīng)速度幾乎相當(dāng)于直接使用JDBC。它采用接口與注解的形式定義DAO,完美地結(jié)合了db與cache操作;支持動(dòng)態(tài)SQL,可以構(gòu)造任意復(fù)雜的SQL語(yǔ)句;支持多數(shù)據(jù)源、分表、分庫(kù)、事務(wù);內(nèi)嵌“函數(shù)式調(diào)用”功能,能將任意復(fù)雜的對(duì)象映射到數(shù)據(jù)庫(kù)的表中。但是從整體上看Mango是一個(gè)Java Dao Framework,是一個(gè)jar包,它的運(yùn)行依賴于應(yīng)用系統(tǒng)的項(xiàng)目代碼和服務(wù)器,采用了JDBC Shard思想,與TDDL是同款產(chǎn)品。
Cobar是阿里巴巴研發(fā)的關(guān)系型數(shù)據(jù)的分布式處理系統(tǒng)(Amoeba的升級(jí)版,該產(chǎn)品成功替代了原先基于Oracle的數(shù)據(jù)存儲(chǔ)方案,目前已經(jīng)接管了3000多個(gè)MySQL數(shù)據(jù)庫(kù)的scheme,平均每天處理近50億次的SQL執(zhí)行請(qǐng)求。
Heisenberg源于Cobar,結(jié)合了Cobar和TDDL的優(yōu)勢(shì),讓其分片策略變?yōu)榉謳?kù)分表策略,節(jié)約了大量的連接。優(yōu)點(diǎn)是分庫(kù)分表與應(yīng)用脫離,分庫(kù)分表如同使用單庫(kù)表一樣,減少了db連接數(shù)的壓力,采用熱重啟配置,可水平擴(kuò)容,并遵循 MySQL原生協(xié)議,采用讀寫分離,無語(yǔ)言限制。MySQL Client、C、Java等都可以使用Heisenberg服務(wù)器通過管理命令查看和調(diào)整連接數(shù)、線程池、節(jié)點(diǎn)等。Heisenberg采用velocity的分庫(kù)分表腳本進(jìn)行自定義分庫(kù)分表,相當(dāng)靈活。
Atlas是由奇虎360的Web平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)庫(kù)中間層項(xiàng)目。它在MySQL-proxy 0.8.2版本的基礎(chǔ)上進(jìn)行了優(yōu)化,增加了一些新的功能和特性。奇虎360內(nèi)部使用Atlas運(yùn)行的MySQL業(yè)務(wù),每天承載的讀寫請(qǐng)求數(shù)達(dá)幾十億條。Atlas位于應(yīng)用程序與MySQL之間,實(shí)現(xiàn)了MySQL的客戶端與服務(wù)端協(xié)議,作為服務(wù)端與應(yīng)用程序通信,同時(shí)作為客戶端與MySQL通信。它對(duì)應(yīng)用程序屏蔽了db的細(xì)節(jié),同時(shí)為了降低MySQL的負(fù)擔(dān),維護(hù)了連接池。
Ameoba是一個(gè)以MySQL為底層數(shù)據(jù)存儲(chǔ),并對(duì)應(yīng)用提供MySQL協(xié)議接口的Proxy。它集中響應(yīng)應(yīng)用的請(qǐng)求,依據(jù)用戶事先設(shè)置的規(guī)則,將SQL請(qǐng)求發(fā)送到特定的數(shù)據(jù)庫(kù)上執(zhí)行,基于此可以實(shí)現(xiàn)負(fù)載均衡、讀寫分離、高可用性等需求。與MySQL官方的MySQL Proxy相比,Ameoba的作者強(qiáng)調(diào)的是Amoeba配置的便捷性(基于XML的配置文件,用SQLJEP語(yǔ)法書寫規(guī)則,比基于Lua腳本的MySQL Proxy簡(jiǎn)單)。
Mycat與以上中間件的對(duì)比如下表所示。
對(duì)比項(xiàng)目 | Mycat | Mango | Coba | Heisenberg | Atlas | Amoeba |
---|---|---|---|---|---|---|
數(shù)據(jù)切片 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
讀寫分離 | 支持 | 支持 | 支持 | 支持 | 支持 | 支持 |
宕機(jī)自動(dòng)切換 | 支持 | 不支持 | 支持 | 不支持 | 半支持,影響寫 | 不支持 |
MySQL協(xié)議 | 前后端支持 | JDBC | 前端支持 | 前后端支持 | 前后端支持 | JDBC |
支持的數(shù)據(jù)庫(kù) | MySQL、Oracle、MongoDB、PostgreSQL | MySQL | MySQL | MySQL | MySQL | MySQL、MongoDB |
社區(qū)活躍度 | 高 | 活躍 | 停滯 | 低 | 中等 | 停滯 |
文檔資料 | 極豐富 | 較齊全 | 較齊全 | 缺少 | 中等 | 缺少 |
是否開源 | 開源 | 開源 | 開源 | 開源 | 開源 | 開源 |
是否支持事務(wù) | 弱XA | 支持 | 單庫(kù)強(qiáng)一致、分布式弱事務(wù) | 單庫(kù)強(qiáng)一致、多庫(kù)弱事務(wù) | 單庫(kù)強(qiáng)一致、分布式弱事務(wù) | 不支持 |
業(yè)務(wù)開發(fā)人員通常在實(shí)際應(yīng)用中并不需要知道中間件的存在,只需要關(guān)注數(shù)據(jù)庫(kù),所以數(shù)據(jù)庫(kù)中間件可以被當(dāng)作一個(gè)或多個(gè)數(shù)據(jù)庫(kù)集群構(gòu)成的邏輯庫(kù)。
在云計(jì)算時(shí)代,數(shù)據(jù)庫(kù)中間件可以以多租戶的形式為一個(gè)或多個(gè)應(yīng)用提供服務(wù),每個(gè)應(yīng)用訪問的可能是一個(gè)獨(dú)立或者共享的物理庫(kù)。
分片表是將指數(shù)據(jù)量很大的表切分到多個(gè)數(shù)據(jù)庫(kù)實(shí)例中,所有分片組合起來構(gòu)成了一張完整的表。
并非所有的表在數(shù)據(jù)量很大時(shí)都需要進(jìn)行分片,某些表可以不用分片。非分片表是相對(duì)于分片表而言的不需要進(jìn)行數(shù)據(jù)切片的表。
關(guān)系型數(shù)據(jù)庫(kù)是基于實(shí)體關(guān)系模型(Entity Relationship Model)的,Mycat中的ER表便來源于此。基于此思想,Mycat提出了基于E-R關(guān)系的數(shù)據(jù)分片策略,子表的記錄與其所關(guān)系的父表的記錄存放在同一個(gè)數(shù)據(jù)分片上,即子表依賴于父表,通過表分組(Table Group)保證數(shù)據(jù)關(guān)聯(lián)查詢不會(huì)跨庫(kù)操作。
表分組(Table Group)是解決跨分片數(shù)據(jù)關(guān)聯(lián)查詢的一種很好的思路,也是數(shù)據(jù)切分的一條重要規(guī)則。
在一個(gè)真實(shí)的業(yè)務(wù)場(chǎng)景中往往存在大量類似的字典表,這些字典表中的數(shù)據(jù)變動(dòng)不頻繁,而且數(shù)據(jù)規(guī)模不大,很少有超過數(shù)十萬條的記錄。
當(dāng)業(yè)務(wù)表因?yàn)橐?guī)模進(jìn)行分片后,業(yè)務(wù)表這些附屬的字典表之間的關(guān)聯(lián)查詢就成了比較棘手的問題,所以在Mycat中通過數(shù)據(jù)冗余來解決這類表的關(guān)聯(lián)查詢,即所有分片都復(fù)制了一份數(shù)據(jù),我們把這些冗余數(shù)據(jù)的表定義為全局表。
數(shù)據(jù)冗余是解決跨分片數(shù)據(jù)關(guān)聯(lián)查詢的一種很好的思路,也是數(shù)據(jù)切分規(guī)劃的另一條重要規(guī)則。
將數(shù)據(jù)切分后,一個(gè)多大個(gè)被分到不同的分片數(shù)據(jù) 庫(kù)上,每個(gè)表分片所在的數(shù)據(jù)庫(kù)就是分片節(jié)點(diǎn)。
將數(shù)據(jù)切分后,每個(gè)分片節(jié)點(diǎn)不一定會(huì)獨(dú)占一臺(tái)機(jī)器,同一臺(tái)機(jī)器上可以有多個(gè)分片數(shù)據(jù)庫(kù),這樣一個(gè)或多個(gè)分片節(jié)點(diǎn)所在的機(jī)器就是節(jié)點(diǎn)主機(jī)。為了規(guī)避單節(jié)點(diǎn)主機(jī)并發(fā)數(shù)量的限制,盡量將讀寫壓力高的分片節(jié)點(diǎn)均勻地放在不同的節(jié)點(diǎn)主機(jī)上。
參考資料:
[1] http://mycat.io/
[2] 《分布式數(shù)據(jù)庫(kù)架構(gòu)及企業(yè)實(shí)踐——基于Mycat中間件》
[3] 龍哥官方課程課件
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。