分庫分表資料庫中介軟體對比
http://www.cnblogs.com/taoxinrui/p/6782791.html
http://www.tuicool.com/articles/A77R3m
http://blog.csdn.net/kingice1014/article/details/52344297
功能 | Cobar | Cobar-client | TDDL | Sharding-JDBC |
分庫 | 有 | 有 | 未開源 | 有 |
分表 | 無 | 無 | 未開源 | 有 |
中間層 | 是 | 否 | 否 | 否 |
ORM支援 | 任意 | 僅MyBatis | 任意 | 任意 |
資料庫支援 | 僅MySQL | 任意 | 任意 | 任意 |
異構語言 | 可 | 僅Java | 僅Java | 僅Java |
外部依賴 | 無 | 無 | Diamond | 無 |
(一)關鍵問題
1.讀寫分離
2.分庫分表
3.類別
- lib庫
1)業務直接到資料庫,少一層proxy效率更高
2)沒有proxy的lvs的單點問題
- proxy
1)統一管理所有到資料庫的連線,連線複用
2)基礎查詢功能抽象,減少程式碼耦合
3)易於實現監控、資料遷移、連線管理等功能
(二)sharding-jdbc(開源,lib)
噹噹應用框架ddframe中,從關係型資料庫模組dd-rdb中分離出來的資料庫水平分片框架
- 功能
1)以jar包形式提供服務
2)分片靈活,支援等號、between、in等多維度分片
3)sql解析,支援聚合、分組、排序、limit、or等
- 結構
- 特點
1)分片規則:策略自定義、複數分片數
2)JDBC規範重寫:針對DataSource、Connection、Statement、PreparedStatement和ResultSet介面封裝
3)sql解析:druid
4)sql改寫:修改邏輯表名->真實表名;替換不支援的功能,如:avg->sum和count
5)sql路由:單表路由、binding表路由、笛卡爾積路由
6)sql執行:多執行緒併發執行sql
7)結果歸併:遍歷類、排序類(歸併排序)、聚合類(比較型、累加型、平均型)、分組類
(三)mycat(開源,proxy)
社群愛好者在阿里cobar基礎上進行二次開發,解決了cobar的一些問題,且加入了新的功能。
- 功能
1)遵守mysql原生協議
2)基於心跳的自動故障切換
3)支援讀寫分離,支援mysql主從
4)支援sum、count、max等聚合,支援跨庫分頁
5)支援服務降級
6)安全,IP白名單、sql注入攻擊攔截、prepare預編譯
- 原理
攔截:分片分析、路由分析、讀寫分離分析、快取分析
(四)DBproxy(開源,proxy)
針對atlas進行改進,形成了新的高可靠、高可用企業級資料庫中介軟體DBProxy
- 功能
1)讀寫分離
2)負載均衡
3)slave故障感知&摘除
4)連線池
5)自定義sql攔截&過濾
6)流量分組&控制
7)監控狀態
(五)atlas
360團隊基於mysql proxy把lua用c改寫,在高併發下經常會掛掉。
(六)oneproxy(不開源,proxy)
基於mysql協議的資料庫中介軟體。利用c進行開發的,專注於效能和穩定性。
- 功能
透明sql路由(實現後端mysql資料庫的叢集化部署)和流量分析(為上層應用和底層資料庫叢集提供豐富的效能監控功能)。
1)複用資料庫連線,降低資料庫併發連線數
2)即時發現和剔除不可用的後端節點,轉發應用請求實現高效故障隔離
3)內建守護程序模式和ha vip機制,確保高可用
4)查詢語句分離,跨分片結果集合並,根據分片並行執行sql
5)讀寫分離
6)對sql語句進行安全檢查,拒絕危險的DDL操作
7)分別設定前端應用和後端資料庫的sql請求頻率,實現QoS控制
8)實時透明分析流量,實時統計sql和事務的執行時間,分析事務的sql結構
- 特點
語言:C&C++開發
網路事件:libevent框架
記憶體分配:jemalloc優化
QPS:單例項支援40W
連線池:透明連線池的功能,具備mysqk企業版連線池效果
主備:實現透明的讀寫分離路由
安全:sql請求類別;請求IP;每個sql請求實時檢查&攔截
流量分析:IP維度、事務維度展示&分析
穩定:內建高可用、也可與zookeeper等配合
(七)vitess
Youtube上產使用的,架構複雜
目前市面上中介軟體種類很多種 先看下各種中介軟體背景:
Cobar:
阿里巴巴B2B開發的關係型分散式系統,管理將近3000個mysql例項。 在阿里經受住了考驗,後面由於作者的走開的原因cobar沒有人維護 了,阿里也開發了tddl替代cobar。
MyCAT:
社群愛好者在阿里cobar基礎上進行二次開發,解決了cobar當時存 在的一些問題,並且加入了許多新的功能在其中。目前MyCAT社群活 躍度很高,目前已經有一些公司在使用MyCAT。總體來說支援度比 較高,也會一直維護下去,
OneProxy:
資料庫界大牛,前支付寶資料庫團隊領導樓總開發,基於mysql官方 的proxy思想利用c進行開發的,OneProxy是一款商業收費的中介軟體, 樓總捨去了一些功能點,專注在效能和穩定性上。有朋友測試過說在 高併發下很穩定。
Vitess:
這個中介軟體是Youtube生產在使用的,但是架構很複雜。 與以往中介軟體不同,使用Vitess應用改動比較大要 使用他提供語言的API介面,我們可以借鑑他其中的一些設計思想。
Kingshard:
Kingshard是前360Atlas中介軟體開發團隊的陳菲利用業務時間 用Go語言開發的,目前參與開發的人員有3個左右, 目前來看還不是成熟可以使用的產品,需要在不斷完善。
Atlas:
360團隊基於mysql proxy 把lua用C改寫。原有版本是支援分表, 目前已經放出了分庫分表版本。在網上看到一些朋友經常說在高並 發下會經常掛掉,如果大家要使用需要提前做好測試。
MaxScale與MySQL Route:
這兩個中介軟體都算是官方的吧,MaxScale是mariadb (MySQL原作者維護的一個版本)研發的,目前版本不支援分庫分表。
MySQL Route是現在MySQL 官方Oracle公司釋出出來的一箇中間件。
這兩個中介軟體後面也會跟進測試下,看下效果如何。