DRDS簡介
分布式關系型數據庫服務(Distributed Relational Database Service,簡稱 DRDS)是阿里巴巴致力於解決單機數據庫服務瓶頸問題而自主研發推出的分布式數據庫產品。DRDS 高度兼容 MySQL 協議和語法,支持自動化水平拆分、在線平滑擴縮容、彈性擴展、透明讀寫分離,具備數據庫全生命周期運維管控能力。DRDS 前身為淘寶 TDDL,是近千核心應用首選組件。
DRDS的架構圖:
這里我們不對DRDS做詳細介紹,畢竟我們沒有阿里雲提供商!我們只對Sharding-JDBC、Mycat做分析區別!DRDS簡單介紹。
Mycat和Sharding-jdbc的區別
1)mycat是一個中間件的第三方應用,sharding-jdbc是一個jar包
2)使用mycat時不需要改代碼,而使用sharding-jdbc時需要修改代碼
Mycat(proxy中間件層):
Sharding-jdbc(TDDL為代表的應用層):
可以看出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/PostgreSQL | MySQL/PostgreSQL |
Connections Count Cost | High | Low | High |
Supported Languages | Java Only | Any | Any |
Performance | Low loss | Relatively High loss | Low loss |
Decentralization | Yes | No | No |
Static Entry | No | Yes | No |
來源:https://github.com/sharding-sphere/sharding-sphere
mycat是支持SQL92標准,遵守Mysql原生協議,跨語言,跨平台,跨數據庫的通用中間件代理。作為對比可以參考上表中的Sharding-Proxy,需要單獨部署,由於遵守Mysql原生協議,應用時不需要特殊處理,和使用MySQL是一樣的,所以應用場景不受限制;但是mycat不支持二維路由,僅支持單庫多表或多庫單表,同時由於自定義連接池,這樣就會存在mycat自身維護一個連接池,MySQL也有一個連接池,任何一個連接池上限都會成為性能的瓶頸,而mycat的連接池設計也略顯粗暴,當請求鏈接數大於設置連接池上限時直接拋出異常,因此在配置mycat連接池的大小是,需要結合場景做合理設置。總的來說,mycat以邏輯表的形式屏蔽掉應用處理分庫分表的復雜邏輯,遵守Mysql原生協議,跨語言,跨平台,有着更為通用的應用場景。
DRDS 兼容 MySQL 協議和語法,支持分庫分表、平滑擴容、服務升降配、透明讀寫分離和分布式事務等特性,具備分布式數據庫全生命周期的運維管控能力。可以看成mycat的商業化產品,也就是mycat所有的優點它都有,而且作為一個商業化產品使用上更為簡單透明,功能也更為豐富;如果不差錢而且正准備對數據做重構,那么drds是一個不錯的選擇,之所以說准備做數據重構時考慮用drds,是因為drds不是一個簡單的做sharding路由,即使原來使用的是rds,也無法通過drds做路由,唯一的辦法新建drds實例,定義路由規則(drds支持二維路由),導入歷史數據,然后就可以開心的使用drds了。
然后做個簡單總結
Sharding-JDBC | mycat | drds | |
---|---|---|---|
性能 | 高 | 中 | 高 |
應用場景限制 | java應用 | 無 | 無 |
是否支持自定義sharding路由 | 是 | 是 | 是 |
最大支持sharding路由維度 | 2 | 1 | 2 |
分布式事務 | 開發中(4.0.0支持) | 支持弱xa、支持XA分布式事務(1.6.5) | 支持以下分布式事務策略:FREE、2PC、XA、FLEXIBLE |
限制 | 不支持子語句,不支持UNION 和 UNION ALL,不支持批量插入,不支持DISTINCT聚合 | 詳見《MYCAT權威指南》——5.6 Mycat 目前存在的限制 | 未明確說明 |
是否開源 | 是 | 是 | 否 |
至此我們總結了這三個的區別!下一篇我們開始讀寫分離demo例子!
參考文獻: