詳解分佈式數據庫中間件mycat功能、原理、場景及長期路線圖

概述

今天主要介紹一下mycat的一些概念和相關原理。

詳解分佈式數據庫中間件mycat功能、原理、場景及長期路線圖


功能

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

Mycat 發展到目前的版本,已經不是一個單純的 MySQL 代理了,它的後端可以支持 MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流數據庫,也支持 MongoDB 這種新型 NoSQL 方式的存儲,未來還會支持更多類型的存儲。而在最終用戶看來,無論是哪種存儲方式,在 Mycat 裡,都是一個傳統的數據庫表,支持標準的SQL 語句進行數據的操作,這樣一來,對前端業務系統來說,可以大幅降低開發難度,提升開發速度,在測試階段,可以將一個表定義為任何一種 Mycat 支持的存儲方式,比如 MySQL 的 MyASIM 表、內存表、或者MongoDB、LevelDB 以及號稱是世界上最快的內存數據庫 MemSQL 上。試想一下,用戶表存放在 MemSQL 上,大量讀頻率遠超過寫頻率的數據如訂單的快照數據存放於 InnoDB 中,一些日誌數據存放於 MongoDB 中,而且還能把 Oracle 的表跟 MySQL 的表做關聯查詢,你是否有一種不能呼吸的感覺?而未來,還能通過 Mycat 自動將一些計算分析後的數據灌入到 Hadoop 中,並能用 Mycat+Storm/Spark Stream 引擎做大規模數據分析,看到這裡,你大概明白了,Mycat 是什麼?Mycat 就是 BigSQL,Big Data On SQL Database。

對於 DBA 來說,可以這麼理解 Mycat:

Mycat 就是 MySQL Server,而 Mycat 後面連接的 MySQL Server,就是 MySQL 的存儲引擎,如InnoDB,MyISAM 等,因此,Mycat 本身並不存儲數據,數據是在後端的 MySQL 上存儲的,因此數據可靠性以及事務等都是 MySQL 保證的,簡單的說,Mycat 就是 MySQL 最佳伴侶,它在一定程度上讓 MySQL 擁有了能跟 Oracle PK 的能力。


Mycat 原理

Mycat 的原理中最重要的一個動詞是“攔截”,它攔截了用戶發送過來的 SQL 語句,首先對 SQL 語句做了 一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然後將此 SQL 發往後端的真實數據庫,並將返回的結果做適當的處理,最終再返回給用戶。

詳解分佈式數據庫中間件mycat功能、原理、場景及長期路線圖

上述圖片裡,Orders 表被分為三個分片 datanode(簡稱 dn),這三個分片是分佈在兩臺 MySQL Server 上(DataHost),即 datanode=database@datahost 方式,因此你可以用一臺到 N 臺服務器來分片,分片規則為(sharding rule)典型的字符串枚舉分片規則,一個規則的定義是分片字段(sharding column)+分片函數(rule function),這裡的分片字段為 prov 而分片函數為字符串枚舉方式。

當 Mycat 收到一個 SQL 時,會先解析這個 SQL,查找涉及到的表,然後看此表的定義,如果有分片規則, 則獲取到 SQL 裡分片字段的值,並匹配分片函數,得到該 SQL 對應的分片列表,然後將 SQL 發往這些分片去執 行 ,最後收集和處理所有分片返回的結果數據,並輸出到客戶端。以 select * from Orders where prov=?語句為例,查到 prov=wuhan,按照分片函數,wuhan 返回 dn1,於是 SQL 就發給了 MySQL1,去取 DB1 上的查詢 結果,並返回給用戶。

如果上述 SQL 改為 select * from Orders where prov in (‘wuhan’,‘beijing’),那麼,SQL 就會發給MySQL1 與 MySQL2 去執行,然後結果集合並後輸出給用戶。但通常業務中我們的 SQL 會有 Order By 以及Limit 翻頁語法,此時就涉及到結果集在 Mycat 端的二次處理,這部分的代碼也比較複雜,而最複雜的則屬兩個表的 Jion 問題,為此,Mycat 提出了創新性的 ER 分片、全局表、HBT(Human Brain Tech)人工智能的 Catlet、以及結合 Storm/Spark 引擎等十八般武藝的解決辦法,從而成為目前業界最強大的方案,這就是開源的力量!


應用場景

Mycat 發展到現在,適用的場景已經很豐富,而且不斷有新用戶給出新的創新性的方案,以下是幾個典型的應用場景:

詳解分佈式數據庫中間件mycat功能、原理、場景及長期路線圖

  1. 單純的讀寫分離,此時配置最為簡單,支持讀寫分離,主從切換;
  2. 分表分庫,對於超過 1000 萬的表進行分片,最大支持 1000 億的單表分片;
  3. 多租戶應用,每個應用一個庫,但應用程序只連接 Mycat,從而不改造程序本身,實現多租戶化;
  4. 報表系統,藉助於 Mycat 的分表能力,處理大規模報表的統計;
  5. 替代 Hbase,分析大數據;
  6. 作為海量數據實時查詢的一種簡單有效方案,比如 100 億條頻繁查詢的記錄需要在 3 秒內查詢出來結果, 除了基於主鍵的查詢,還可能存在範圍查詢或其他屬性查詢,此時 Mycat 可能是最簡單有效的選擇。

Mycat 長期路線圖

1、強化分佈式數據庫中間件的方面的功能

使之具備豐富的插件、強大的數據庫智能優化功能、全面的系統監控能力、以及方便的數據運維工具,實現在線數據擴容、遷移等高級功能。

2、進一步挺進大數據計算領域

深度結合 Spark Stream 和 Storm 等分佈式實時流引擎,能夠完成快速的巨表關聯、排序、分組聚合等 OLAP 方向的能力,並集成一些熱門常用的實時分析算法,讓工程師以及 DBA 們更容易用 Mycat 實現一些高級數據分析處理功能。

3、不斷強化 Mycat 開源社區的技術水平

吸引更多的 IT 技術專家,使得 Mycat 社區成為中國的 Apache, 並將 Mycat 推到 Apache 基金會,成為國內頂尖開源項目,最終能夠讓一部分志願者成為專職的 Mycat 開發者, 榮耀跟實力一起提升。

4、依託 Mycat 社區,聚集 100 個 CXO 級別的精英,眾籌建設親親山莊

Mycat 社區+親親山莊=中國最大IT O2O 社區。


覺得有用的朋友多幫忙轉發哦!後面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注下~

詳解分佈式數據庫中間件mycat功能、原理、場景及長期路線圖


分享到:


相關文章: