mycat數據庫中間件之--概述作用與使用場景(一)

1、 mycat概述

       前身是阿里的cobar,MyCat是一個開源的分佈式數據庫系統,是一個實現了MySQL協議的服務器,前端用戶可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令行訪問,而其後端可以用MySQL原生協議與多個MySQL服務器通信,也可以用JDBC協議與大多數主流數據庫服務器通信,其核心功能是分表分庫,即將一個大表水平分割爲N個小表,存儲在後端MySQL服務器裏或者其他數據庫裏。

        MyCat發展到目前的版本,已經不是一個單純的MySQL代理了,它的後端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流數據庫,也支持MongoDB這種新型NoSQL方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是那種存儲方式,在MyCat裏,都是一個傳統的數據庫表,支持標準的SQL語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度。

2、 中間件mycat的作用

       目前雖然傳統關係數據庫存在一些列的先天弊端,但NoSQL數據庫又將其替代,但是如果傳統數據庫易於擴展和分拆就可以極大的避免單機單庫在數據增刪改查方面的缺陷。MyCat就是爲了解決數據庫的分拆和擴展而生的開源分佈式數據庫系統。其最終的目標就是低成本地將現有的單機數據庫和應用平滑遷移到“雲”端,解決數據存儲和業務規模迅速增長情況下的數據瓶頸問題。

舉個簡單的例子:

       如果你只是開一個小賣鋪(小項目) ,那麼你一個人(數據庫)就可以了,但是如果你開一個大型購物中心(大項目),如果不分部門的話,人員(數據)就很難管理,所以按人員不同分了很多部門(數據庫),但是光有部門,沒有一個統一的管理者(mycat),那麼各個部門的配合和協調能力就大大降低了,超市的健康運營就會受到影響。而mycat就是這個管理者,它是對數據庫層做一個抽象,來管理這些數據庫,而最上面的應用只需要面對一個數據庫層的抽象或者說數據庫中間件就好了,這就是Mycat的核心作用。 

       所以可以這樣理解:數據庫是對底層存儲文件的抽象,而Mycat是對數據庫的抽象。

1)、 讀寫分離

2)、 數據分片

垂直拆分

  垂直拆分就是要把表按模塊劃分到不同數據庫表中(當然原則還是不破壞第三範式),這種拆分在大型網站的演變過程中是很常見的。當一個網站還在很小的時候,只有小量的人來開發和維護,各模塊和表都在一起,當網站不斷豐富和壯大的時候,也會變成多個子系統來支撐,這時就有按模塊和功能把表劃分出來的需求。其實,相對於垂直切分更進一步的是服務化改造,說得簡單就是要把原來強耦合的系統拆分成多個弱耦合的服務,通過服務間的調用來滿足業務需求看,因此表拆出來後要通過服務的形式暴露出去,而不是直接調用不同模塊的表,淘寶在架構不斷演變過程,最重要的一環就是服務化改造,把用戶、交易、店鋪、寶貝這些核心的概念抽取成獨立的服務,也非常有利於進行局部的優化和治理,保障核心模塊的穩定性

  垂直拆分:單表大數據量依然存在性能瓶頸

水平拆分

  上面談到垂直切分只是把表按模塊劃分到不同數據庫,但沒有解決單表大數據量的問題,而水平切分就是要把一個表按照某種規則把數據劃分到不同表或數據庫裏。例如像計費系統,通過按時間來劃分表就比較合適,因爲系統都是處理某一時間段的數據。而像SaaS應用,通過按用戶維度來劃分數據比較合適,因爲用戶與用戶之間的隔離的,一般不存在處理多個用戶數據的情況,簡單的按user_id範圍來水平切分

  通俗理解:水平拆分行,行數據拆分到不同表中, 垂直拆分列,表數據拆分到不同表中

垂直與水平聯合切分

  由上面可知垂直切分能更清晰化模塊劃分,區分治理,水平切分能解決大數據量性能瓶頸問題,因此常常就會把兩者結合使用,這在大型網站裏是種常見的策略

  案例:

  以mysql爲例,簡單購物系統暫設涉及如下表:

  1.產品表(數據量10w,穩定)

  2.訂單表(數據量200w,且有增長趨勢)

  3.用戶表 (數據量100w,且有增長趨勢)

  以mysql爲例講述下水平拆分和垂直拆分,mysql能容忍的數量級在百萬靜態數據可以到千萬

  垂直拆分:

          解決問題:表與表之間的io競爭

          產生問題:單表中數據量增長出現的壓力

  方案:

  把產品表和用戶表放到一個server

  訂單表單獨放到一個server上

  水平拆分:

          解決問題: 單表中數據量增長出現的壓力

          產生問題: 表與表之間的io爭奪

  方案:

  用戶表通過性別拆分爲男用戶表和女用戶表

  訂單表通過已完成和完成中拆分爲已完成訂單和未完成訂單

  產品表 未完成訂單放一個server上

  已完成訂單表盒男用戶表放一個server上

  女用戶表放一個server上(女的愛購物)

 

3、 mycat的工作原理

        Mycat 的原理中最重要的一個動詞是“攔截”,它攔截了用戶發送過來的 SQL 語句,首先對 SQL 語句做了

一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然後將此 SQL 發往後端的真實數據庫,

並將返回的結果做適當的處理,最終再返回給用戶

這種方式把數據庫的分佈式從代碼中解耦出來,程序員察覺不出來後臺使用mycat還是mysql。

4、mycat對比其他途徑

如有披露或問題歡迎留言或者入羣探討

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章