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