概述
今天主要介紹一下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 發往後端的真實資料庫,並將返回的結果做適當的處理,最終再返回給使用者。
上述圖片裡,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 發展到現在,適用的場景已經很豐富,而且不斷有新使用者給出新的創新性的方案,以下是幾個典型的應用場景:
單純的讀寫分離,此時配置最為簡單,支援讀寫分離,主從切換;分表分庫,對於超過 1000 萬的表進行分片,最大支援 1000 億的單表分片;多租戶應用,每個應用一個庫,但應用程式只連線 Mycat,從而不改造程式本身,實現多租戶化;報表系統,藉助於 Mycat 的分表能力,處理大規模報表的統計;替代 Hbase,分析大資料;作為海量資料實時查詢的一種簡單有效方案,比如 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 社群。