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