04.09 淺談MySQL分佈式中間件MYCAT

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

Amoeba是阿里在2008年推出的,當時正好是在阿里去IOE的浪潮中,Amoeba提供了負載均衡,SQL過濾等功能,在2012年隨著阿里業務量增長,Amoeba也越來越不適應當時不斷增長的需求,同年在Amoeba的基礎上阿里開源了替代Amoeba的產品Cobar,不過後來就沒進行維護了,Cobar本身也存在不少問題,在2013年阿里推出了開源產品MYCAT,MYCAT在Cobar系統的基礎上進行了升級和改造,修復了很多問題。MYCAT是基於Java的一個分佈式數據庫系統中間層,為高併發下數據庫的分佈式提供解決方案。

MYCAT的主要作用是什麼?尚學堂•百戰程序員陳老師指出數據庫中間層是位於前端應用和後端數據庫之間的一個層。傳統Java項目使用數據庫連接池的形式連接數據庫,這樣多個項目連接同一個數據庫,冗餘的連接會隨著項目的增加而出現線性增長,這不利於數據庫連接數量的控制,但是當使用中間層之後,前端應用統一通過中間層獲取連接,將不用自己維護連接池,可避免連接數不斷增加的問題。數據庫中間層還可以屏蔽後端數據庫的一些變更,使前臺應用不受影響,例如對數據庫進行了水平或者垂直切分。

淺談MySQL分佈式中間件MYCAT

MYCAT原生實現了對MySQL的支持,也可以通過jdbc形式連接其它關係型數據庫 如 Oracle,Sqlserver,也可以連接非關係型數據庫 如 mongodb,這個功能其他同類型產品沒有。可實現數據庫的讀寫分離,在後端的主從複製數據庫集群中,通過MYCAT配置,將前臺的寫操作路由到主數據庫中,將讀操作路由到從數據庫上。

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

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

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

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

淺談MySQL分佈式中間件MYCAT


分享到:


相關文章: