1. 程式人生 > >MySQL系列之八:中介軟體

MySQL系列之八:中介軟體

360 Atlas

    較為活躍,Atlas 是由 360 Web平臺部基礎架構團隊開發維護的一個基於 MySQL 協議的資料中間層專案。它是在mysql-proxy 0.8.2版本的基礎上,對其進行了優化,增加了一些新的功能特性。360內部使用 Atlas 執行的 MySQL 務,每天承載的讀寫請求數達幾十億條。

    主要功能:
    1. 讀寫分離
    2. 從庫負載均衡
    3. IP過濾
    4. SQL語句黑白名單
    5. 自動分表(只能在同一個庫中進行分表)

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資料節點。

這裡寫圖片描述

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開發版)。

這裡寫圖片描述

    參考有道:MySQL 中介軟體 Mycat【Blog】.note ,Blog:MySQL 中介軟體 Mycat

TDDL

    已經不再使用,下一代是 DDRS。


淘寶根據自己的業務特點開發了 TDDL (Taobao Distributed Data Layer 外號:頭都大了 )框架,主要解決了分庫分表對應用的透明化以及異構資料庫之間的資料複製,它是一個基於集中式配置的 jdbc datasource 實現,具有主備,讀寫分離,動態資料庫配置等功能。

    TDDL 通過部署在客戶端的 jar 包,將使用者的 SQL 路由到指定的資料庫中。

    功能:

    資料庫主備和動態切換
    帶權重的讀寫分離
    單執行緒讀重試
    集中式資料來源資訊管理和動態變更
    剝離的穩定 jboss 資料來源
    支援 MySQL 和 Oracle 資料庫
    基於 JDBC 規範,很容易擴充套件支援實現 JDBC 規範的資料來源
    無 Server,Client,Jar 形式存在,應用直連資料庫
    讀寫次數,併發度流程控制,動態變更
    可分析的日誌列印,日誌流控,動態變更

這裡寫圖片描述

Heisenberg

    整合 Cobar、TDDL,目前並不活躍,由百度員工個人編寫。

    功能:

    分庫分表與應用脫離,分庫表如同使用單庫表一樣
    —減少 DB 連線數壓力—
    熱重啟配置—
    可水平擴容
    —遵守 MySQL 原生協議
    —無語言限制,MySQLClient,C,Java等都可以使用

這裡寫圖片描述
Heisenberg伺服器通過管理命令可以檢視,如連線數,執行緒池,結點等,並可以調整

Oceanus

    用得較少,58同城 Oceanus 致力於打造一個功能簡單、可依賴、易於上手、易於擴充套件、易於整合的解決方案,甚至是平臺化系統。擁抱開源,提供各類外掛機制整合其他開源專案,新手可以在幾分鐘內上手程式設計,分庫分表邏輯不再與業務緊密耦合,擴容有標準模式,減少意外錯誤的發生 datanode:資料來源節點。為一個數據源命名,配置連結屬性、報警實現。

    主要概念:

    namenode:資料來源的簇。為一組資料來源命名,指定這組資料來源的負載方式、訪問模式、權重
    table:對映表。匹配解析sql中的table名稱,命中table標籤的name屬性值後,會執行約定的路由邏輯
    bean:實體。由其他標籤引用,實體類必須有無參的建構函式
    tracker:監控埋點。涉及到計算和IO的功能點都有監控點,自定義一個埋點實現類,當功能耗時超出預期時會執行其中的回撥函式,便於監控和優化系統

    ![這裡寫圖片描述](https://img-blog.csdn.net/20170415102258383?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWR5YW5nMTEyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

Vitess

    較全 高大上,和開發中的 Mycat2.0 類似。谷歌開發的資料庫中介軟體,叢集基於 ZooKeeper 管理,通過 RPC 方式進行資料處理,總體分為,server,command line,gui監控 3部分。
   ![這裡寫圖片描述](https://img-blog.csdn.net/20170415102309018?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWR5YW5nMTEyNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) 

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,是近千個應用首選元件,已穩定服務了七年以上。

這裡寫圖片描述