sharding-jdbc(ShardingSphere )、mycat、DRDS 三個分佈式數據庫中間件的簡單介紹(純理論說明)

1、前言

一般對於業務記錄類隨時間會不斷增加的數據,當數據量增加到一定量(一般認爲整型值爲主的表達到千萬級,字符串爲主的表達到五百萬)的時候,性能將遇到瓶頸,同時調整表結構也會變得非常困難。爲了避免生產遇到這樣的問題,在做系統設計時需要預估可能產生的數據量:預估記錄主體個數預估記錄主體產生的記錄數(e.g.用戶訂單表預估數據量=預估用戶數單用戶產生訂單數),預估達到一定量時,就不得不考慮分庫分表了。

目前國內比較成熟的開源數據庫中間件有sharding-jdbc、mycat,而drds是阿里雲最近推出的商業產品,考慮到大部分公司都在使用阿里雲,做一個全家桶,也是一個不錯的選擇。接下來將對這三款產品的優缺點及適用場景做以介紹。

2、sharding-jdbc

在這裏插入圖片描述

可以看出 sharding-jdbc 作爲一個組件集成在應用內,而mycat則作爲一個獨立的應用需要單獨部署,drds則是阿里雲的一個獨立產品,不過需要結合rds一起使用。

從架構上看 sharding-jdbc 更符合分佈式架構的設計,直連數據庫,沒有中間應用,理論性能是最高的(實際性能需要結合具體的代碼實現,理論性能可以理解爲上限,通過不斷優化代碼實現,逐漸接近理論性能)。

同時缺點也很明顯,由於作爲組件存在,需要集成在應用內,意味着作爲使用方,必須要集成到代碼裏,使得開發成本相對較高;另一方面,由於需要集成在應用內,使得需要針對不同語言(java、C、PHP……)有不同的實現(事實上sharding-jdbc目前只支持java),這樣組件本身的維護成本也會很高。最終將應用場景限定在由java開發的應用這一種場景下。

sharding-jdbc 發展爲 Sharding-Sphere,包含 sharding-jdbc、Sharding-Proxy、Sharding-Sidecar。

- Sharding-JDBC Sharding-Proxy Sharding-Sidecar
Database Any MySQL MySQL
Connections Cost More Less More
Heterogeneous Language Java Only Any Any
Performance Low loss High loss Low loss
Centre-less Yes No No
Static Entry No Yes No

項目地址:

GitHub: https://github.com/apache/shardingsphere
碼雲: https://gitee.com/Sharding-Sphere/sharding-sphere

3、mycat

在這裏插入圖片描述

mycat 是支持SQL92標準,遵守Mysql原生協議,跨語言,跨平臺,跨數據庫的通用中間件代理。

作爲對比可以參考上表中的Sharding-Proxy,需要單獨部署,由於遵守Mysql原生協議,應用時不需要特殊處理,和使用MySQL是一樣的,所以應用場景不受限制;但是mycat不支持二維路由,僅支持單庫多表或多庫單表,同時由於自定義連接池,這樣就會存在mycat自身維護一個連接池,MySQL也有一個連接池,任何一個連接池上限都會成爲性能的瓶頸,而mycat的連接池設計也略顯粗暴,當請求鏈接數大於設置連接池上限時直接拋出異常,因此在配置mycat連接池的大小是,需要結合場景做合理設置。

總的來說,mycat以邏輯表的形式屏蔽掉應用處理分庫分表的複雜邏輯,遵守Mysql原生協議,跨語言,跨平臺,有着更爲通用的應用場景。

4、DRDS

在這裏插入圖片描述

DRDS 兼容 MySQL 協議和語法,支持分庫分表、平滑擴容、服務升降配、透明讀寫分離和分佈式事務等特性,具備分佈式數據庫全生命週期的運維管控能力。可以看成 mycat 的商業化產品,也就是mycat所有的優點它都有,而且作爲一個商業化產品使用上更爲簡單透明,功能也更爲豐富;如果不差錢而且正準備對數據做重構,那麼drds是一個不錯的選擇,之所以說準備做數據重構時考慮用drds,是因爲drds不是一個簡單的做 sharding 路由,即使原來使用的是rds,也無法通過drds做路由,唯一的辦法新建drds實例,定義路由規則(drds支持二維路由),導入歷史數據,然後就可以開心的使用drds了。

https://help.aliyun.com/product/29657.html

5、總結

- sharding-JDBC mycat drds
性能
應用場景限制 java應用
是否支持自定義sharding路由
最大支持sharding路由維度 2 1 2
分佈式事務 開發中 支持弱xa、支持XA分佈式事務(1.6.5) 支持以下分佈式事務策略:FREE、2PC、XA、FLEXIBLE
限制 不支持子語句,不支持UNION 和 UNION ALL,不支持批量插入,不支持DISTINCT聚合 詳見《MYCAT權威指南》——5.6 Mycat 目前存在的限制 未明確說明
是否開源
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章