常見一覽圖
【1】360 Atlas
網址:https://github.com/Qihoo360/Atlas
較為活躍,Atlas 是由 360 Web平台部基礎架構團隊開發維護的一個基於 MySQL 協議的數據中間層項目。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用 Atlas 運行的 MySQL 務,每天承載的讀寫請求數達幾十億條。
主要功能:
1. 讀寫分離
2. 從庫負載均衡
3. IP過濾
4. SQL語句黑白名單
5. 自動分表
【2】Mycat
前身 Cobar,開源,較為活躍。
特點:
遵守Mysql原生協議,跨語言,跨數據庫的通用中間件代理。
基於心跳的自動故障切換,支持讀寫分離,支持 MySQL 一雙主多從,以及一主多從
有效管理數據源連接,基於數據分庫,而不是分表的模式。
基於 NIO 實現,有效管理線程,高並發問題。
支持數據的多片自動路由與聚合,支持 sum , count , max 等常用的聚合函數。
支持2表 join,甚至基於 caltlet 的多表 join。
支持通過全局表,ER 關系的分片策略,實現了高效的多表 join 查詢。
支持多租戶方案。
支持分布式事務(弱xa)
支持全局序列號,解決分布式下的主鍵生成問題。
分片規則豐富,插件化開發,易於擴展。
強大的 web,命令行監控。
支持前端作為 MySQL 通用代理,后端 JDBC 方式支持 Oracle、DB2、SQL Server 、 mongodb 、巨杉。
集群基於 ZooKeeper 管理,在線升級,擴容,智能優化,大數據處理(2.0開發版)。
【3】Cobar (不維護了)
Cobar是阿里巴巴(B2B)部門開發的一種關系型數據的分布式處理系統,它可以在分布式的環境下看上去像傳統數據庫一樣為您提供海量數據服務。
Cobar的分布式主要是通過將表放入不同的庫來實現:
1. 支持將一張表水平拆分成多份分別放入不同的庫來實現表的水平拆分
2. 支持將不同的表放入不同的庫
3. 多數情況下,用戶會將以上兩種方式混合使用。
這里需要強調的是,Cobar 不支持將一張表,例如test表拆分成test_1, test_2, test_3.....放在同一個庫中,必須將拆分后的表分別放入不同的庫來實現分布式。
在用戶配置了 MySQL 心跳的情況下,Cobar 可以自動向后端連接的 MySQL 發送心跳,判斷 MySQL 運行狀況,一旦運行出現異常,Cobar 可以自動切換到備機工作。
但需要強調的是:
1. Cobar 的主備切換有兩種觸發方式,一種是用戶手動觸發,一種是 Cobar 的心跳語句檢測到異常后自動觸發。那么,當心跳檢測到主機異常,切換到備機,如果主機恢復了,需要用戶手動切回主機工作,Cobar不會在主機恢復時自動切換回主機,除非備機的心跳也返回異常。
2. Cobar 只檢查 MySQL 主備異常,不關心主備之間的數據同步,因此用戶需要在使用 Cobar 之前在 MySQL 主備上配置雙向同步,詳情可以參閱MySQL參考手冊。
其次,我們也需要注意Cobar的功能約束:
1. 不支持跨庫情況下的join、分頁、排序、子查詢操作。
2. SELECT 語句執行會被忽略,事務和字符集設置除外。
3. 分庫情況下,insert 語句必須包含拆分字段列名。
4. 分庫情況下,update 語句不能更新拆分字段的值。
5. 不支持 SAVEPOINT 操作。
6. 暫時只支持 MySQL數據節點。
【4】TDDL
已經不再使用,下一代是 DRDS。
淘寶根據自己的業務特點開發了 TDDL (Taobao Distributed Data Layer 外號:頭都大了 )框架,主要解決了分庫分表對應用的透明化以及異構數據庫之間的數據復制,它是一個基於集中式配置的 jdbc datasource 實現,具有主備,讀寫分離,動態數據庫配置等功能。
TDDL 通過部署在客戶端的 jar 包,將用戶的 SQL 路由到指定的數據庫中。
功能:
數據庫主備和動態切換
帶權重的讀寫分離
單線程讀重試
集中式數據源信息管理和動態變更
剝離的穩定 jboss 數據源
支持 MySQL 和 Oracle 數據庫
基於 JDBC 規范,很容易擴展支持實現 JDBC 規范的數據源
無 Server,Client,Jar 形式存在,應用直連數據庫
讀寫次數,並發度流程控制,動態變更
可分析的日志打印,日志流控,動態變更
【5】Heisenberg
整合 Cobar、TDDL,目前並不活躍,由百度員工個人編寫。
功能:
分庫分表與應用脫離,分庫表如同使用單庫表一樣
減少 DB 連接數壓力
熱重啟配置
可水平擴容
遵守 MySQL 原生協議
無語言限制,MySQLClient,C,Java等都可以使用
Heisenberg服務器通過管理命令可以查看,如連接數,線程池,結點等,並可以調整
【6】其他較為小眾
Oceanus
用得較少,58 Oceanus 致力於打造一個功能簡單、可依賴、易於上手、易於擴展、易於集成的解決方案,甚至是平台化系統。擁抱開源,提供各類插件機制集成其他開源項目,新手可以在幾分鍾內上手編程,分庫分表邏輯不再與業務緊密耦合,擴容有標准模式,減少意外錯誤的發生 datanode:數據源節點。為一個數據源命名,配置鏈接屬性、報警實現。
主要概念:
namenode:數據源的簇。為一組數據源命名,指定這組數據源的負載方式、訪問模式、權重
table:映射表。匹配解析sql中的table名稱,命中table標簽的name屬性值后,會執行約定的路由邏輯
bean:實體。由其他標簽引用,實體類必須有無參的構造函數
tracker:監控埋點。涉及到計算和IO的功能點都有監控點,自定義一個埋點實現類,當功能耗時超出預期時會執行其中的回調函數,便於監控和優化系統
Vitess
較全 高大上,和開發中的 Mycat2.0 類似。谷歌開發的數據庫中間件,集群基於 ZooKeeper 管理,通過 RPC 方式進行數據處理,總體分為,server,command line,gui監控 3部分。
OneProxy
商業、收費。
OneProxy 分布式中間件,是平民軟件完全自主開發的分布式數據訪問層,幫助用戶在 MySQL/PostgreSQL 集群上快速搭建支持分庫分表的分布式數據庫中間件,也是一款具有 SQ L白名單(防 SQL 注入)及 IP 白名單功能的 SQL 防火牆軟件。采用與 MySQL Proxy 一致的反向協議輸出模式,對應用非常簡單和透明易用,讓用戶畏懼的分庫分表(Horizontal Partitioning)工作變得極其簡單可控。基於 Libevent 機制實現,單個實例可以實現25萬的 SQL 轉發能力,用一個 OneProxy 節點可以帶動整個 MySQL 集群。
DRDS(推薦)
整合雲服務,收費、Cobar、TDDL整合,商用,首選。
阿里分布式關系型數據庫服務(Distribute Relational Database Service,簡稱DRDS)是一種水平拆分、可平滑擴縮容、讀寫分離的在線分布式數據庫服務。
前身為淘寶 TDDL,是近千個應用首選組件,已穩定服務了七年以上。
DBLE(愛可生,推薦)
官網:https://opensource.actionsky.com/
文檔:https://actiontech.github.io/dble-docs-cn/0.overview/0.0_overview.html