04.04 MySQL分佈式中間件MYCAT解析

在應用系統用戶量不斷增加之後,帶來性能上的瓶頸,此時通過在應用的服務端添加負載均衡即可提升性能,但是系統訪問數量還在不斷增加,有一天發現再增加應用層的負載均衡已經達不到預期的效果了,此時的性能瓶頸很可能在數據庫,單臺數據庫已經達到了性能上限,但是將數據庫進行負載均衡是非常麻煩的,此時應該考慮使用數據庫的分佈式中間件產品MYCAT,它為數據庫訪問量不斷增大時出現性能瓶頸提供瞭解決問題思路。

1、MYCAT的起源

阿里巴巴在2008年推出了Amoeba,當時正好是在阿里去IOE的浪潮中,Amoeba提供了負載均衡,SQL過濾等功能,在2012年隨著阿里業務量增長,Amoeba也越來越不適應當時不斷增長的需求,同年在Amoeba的基礎上阿里開源了替代Amoeba的產品Cobar,不過後來就沒進行維護了,Cobar本身也存在不少問題,在2013年阿里推出了開源產品MYCAT,MYCAT在Cobar系統的基礎上進行了升級和改造,修復了很多問題(例如在高併發下回導致Cobar假死),同時開源社區非常活躍,在2017年,MYCAT推出了1.6版本。

2、什麼是MYCAT?

MYCAT是基於Java的一個分佈式數據庫系統中間層,為高併發下數據庫的分佈式提供解決方案。

3、MYCAT的主要作用是什麼?

數據庫中間層是位於前端應用和後端數據庫之間的一個層。

  1. 傳統Java項目使用數據庫連接池的形式連接數據庫,這樣多個項目連接同一個數據庫,冗餘的連接會隨著項目的增加而出現線性增長,這不利於數據庫連接數量的控制,但是當使用中間層之後,前端應用統一通過中間層獲取連接,將不用自己維護連接池,可避免連接數不斷增加的問題。

  2. 數據庫中間層還可以屏蔽後端數據庫的一些變更,使前臺應用不受影響,例如對數據庫進行了水平或者垂直切分。

  3. MYCAT原生實現了對MySQL的支持,也可以通過jdbc形式連接其它關係型數據庫 如 Oracle,Sqlserver,也可以連接非關係型數據庫 如 mongodb,這個功能其他同類型產品沒有。

  4. 可實現數據庫的讀寫分離,在後端的主從複製數據庫集群中,通過MYCAT配置,將前臺的寫操作路由到主數據庫中,將讀操作路由到從數據庫上。

  5. MYCAT可以實現讀寫分離下的讀操作負載均衡,將大量的讀操作均衡到不同的從庫上,主要出現在一主多從情形下。

  6. MYCAT可實現數據庫的高可用,在數據庫主節點可用的情況下,配置一臺可寫從節點,這兩個節點都配置在MYCAT中,當主節點宕機時,MyCAT會自動將寫操作路由到備用節點上,但並不支持在切換之後的繼續主從同步。

  7. 當讀寫分離已經不能滿足持續增加的訪問量時,MYCAT可實現數據庫的垂直拆分,將所有的數據庫表按照模塊劃分,不同類型的表拆分到不同的數據庫服務器。

  8. 隨著業務量的增長,垂直拆分之後如果又出現了數據庫性能問題,則需要進行水平切分,這就是俗稱的分庫分表。將數據量很大的表數據切分到不同的服務器庫中,表結構是一樣的,而使用MYCAT實現水平切分,對前端應用是完全透明的,不用調整前臺邏輯。

4、MYCAT使用場景

當業務系統的讀寫操作都在一臺數據庫,數據庫出現了性能問題,而且對數據庫的所有操作中讀負載明顯高於寫負載時,此時應使用MYCAT讀寫分離方案。

當數據表數據量達到1000萬以後,所有的優化操作都已經用完了,此時應使用MYCAT的分庫分表功能。

在統計報表系統中,也可以使用MYCAT加速數據的統計分析。

MYCAT還可以使用在需要同時查詢多種數據庫的場景,MYCAT支持通過JDBC連接到不同類型的數據庫。

5、MYCAT的優勢

MYCAT是基於阿里巴巴Cobar進行開發,經歷了Alibaba大數據業務的考驗。

MYCAT是基於Java進行開發,開源免費,資料文檔相對容易找到,跨平臺移植更方便。

MYCAT社區活躍,使用人數多,說明功能相對穩定。

支持多種關係型和非關係性數據庫。

6、MYCAT 其他概念

邏輯庫,邏輯庫是存在於MYCAT中的一個數據庫定義,相當於後端數據庫分片之後的一個集合視圖,前端應用只需要關注邏輯庫而並不需要關注它的分片結構,MYCAT會保存邏輯庫的定義,而不會保存邏輯庫數據,同理的概念還有邏輯表,數據庫表進行水平切分後分布在不同的服務器中,前端應用只需要對邏輯表進行操作。

ER關係分片策略,在進行數據庫表的垂直切分時,MYCAT可按照ER關係,將相互關聯的表切分到相同的數據庫中,提升查詢效率。

全局序列號,數據庫分片之後,相同的表可能產生相同的ID,全局序列號可是提供跨分片的序列號。


分享到:


相關文章: