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