1, myscat是什么:
•一個用於MySQL讀寫分離和與數據切分的高可用中間件
•一個模擬為MySQLServer的超級數據庫代理
•一個能平滑擴展支持1000億大表的分布式數據庫系統 (普通單表1kw以下)
•一個可管控多種關系數據庫的數據庫路由器
2, mycat來自2013年阿里的Cobar的改良版, 截至2015年, 成為大多數公司的數據解決方案
•2013年阿里的Cobar在某大型項目中使用過程中發現存在一些比較嚴重的問題,於是第一代改良版——Mycat誕生。
•Mycat開源以后,一些Cobar的用戶參與了Mycat的開發,最終Mycat發展成為一個由眾多軟件公司的實力派架構師和資深開發人員維護的社區型開源軟件。
•2014年Mycat首次在上海的《中華架構師》大會上對外宣講,引發圍觀,更多的人參與進來,隨后越來越多的項目采用了Mycat
•2015年7月為止,Mycat項目總共有16個Committer,其中核心參與者的年薪總額超過200萬
•2015年5月,由核心參與者們一起編寫的第一本官方權威指南《Mycat權威指南》電子版發布,累計超過500本,成為開源項目中的首創。
•截至2015年7月,超過100個項目采用Mycat,涵蓋銀行、電信、電子商務、物流、移動應用、O2O的眾多領域和公司。
•截至2014年7月,Mycat官方QQ群已經超過2700人,大多數為資深IT工程師、架構師、DBA、以及一些CXO和高端獵頭,成為國內具有影響力的高端IT專業群
•Mycat社區首次提出BigSQL的概念,並逐步將大數據和實時計算等先進技術引入到Mycat里,從而吸引和聚集了一大批業內大數據和雲計算方面的資深工程師,Mycat社區成為名副其實的國內大數據領域實力派成員。
•Mycat社區里不斷有優秀工程師被創業公司挖走,為了能更好的支持創業公司並尋求更多的優秀工程師參與采用,Mycat社區目前已經開始開展在線高端IT培訓,培養高端Java架構師、工程師。
3, 系統切分及解決方案
數據切分:
簡單來說,就是指通過某種特定的條件,按照某個維度,將我們存放在同一個數據庫中的數據分散存放到多個數據庫(主機)上面以達到分散單庫(主機)負載的效果。
切分模式;
垂直切分,(單庫性能瓶頸, 治標不治本)
一個數據庫由很多表的構成,每個表對應着不同的業務,垂直切分是指按照業務將表進行分類,分布到不同的數據庫上面,這樣也就將數據或者說壓力分擔到不同的庫上面
優點:
--拆分后業務清晰,拆分規則明確。
--系統之間整合或擴展容易。
--數據維護簡單。
缺點;
--部分業務表無法join,只能通過接口方式解決,提高了系統復雜度。
--受每種業務不同的限制存在單庫性能瓶頸,不易數據擴展跟性能提高
--事務處理復雜。
水平切分
按照某個字段的某種規則來分散到多個庫之中,每個表中包含一部分數據。簡單來說,我們可以將數據的水平切分理解為是按照數據行的切分,就是將表中的某些行切分到一個數據庫,而另外的某些行又切分到其他的數據庫中,主要有分表,分庫兩種模式
優點;
不存在單庫大數據,高並發的性能瓶頸。
對應用透明,應用端改造較少。
按照合理拆分規則拆分,
join操作基本避免跨庫。提高了系統的穩定性跟負載能力。
缺點;
拆分規則難以抽象。
分片事務一致性難以解決。
數據多次擴展難度跟維護量極大。
跨庫join性能較差
4, 拆分處理:
客戶端拆分:

在每個應用程序模塊中配置管理自己需要的一個(或者多個)數據源,直接訪問各個數據庫,在模塊內完成數據的整合;
優點:相對簡單,無性能損耗。
缺點:不夠通用,數據庫連接的處理復雜,對業務不夠透明,處理復雜

通過中間代理層來統一管理所有的數據源,后端數據庫集群對前端應用程序透明;
優點:通用,對應用透明,改造少。
缺點:實現難度大,有二次轉發性能損失。單機損失30% 左右
5, mycat中間件架構:

1, application提交sql后, 經過sql解析, 優化, 路由, 解析為對應的sql指令, 交給具體的sql機器執行
2, 個節點的計算結果進行結果集合並,
3, manager負責master的集群管理, 內存管理等
6, 技術支持:
-遵守Mysql原生協議,跨語言,跨數據庫的通用中間件代理。
-基於心跳的自動故障切換,支持讀寫分離,支持MySQL一雙主多從,以及一主多從
-有效管理數據源連接,基於數據分庫,而不是分表的模式。
-基於Nio實現,有效管理線程,高並發問題。
-支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數。
-支持2表join,甚至基於caltlet的多表join。
-支持通過全局表,ER關系的分片策略,實現了高效的多表join查詢。
-支持多租戶方案。-支持分布式事務(弱xa)
-支持全局序列號,解決分布式下的主鍵生成問題。
-分片規則豐富,插件化開發,易於擴展。
-強大的web,命令行監控。
-支持前端作為mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉。
-集群基於ZooKeeper管理,在線升級,擴容,智能優化,大數據處理(2.0開發版)。
7, mycat概念:
邏輯庫, 邏輯表: 由於作為集群的master, 所以不存放數據, 只存放庫表的定義信息
分片規則; 對數據的分片存放
系列來自尚學堂視頻
