10分布式關系型數據庫解決方案


前言

  伴隨着 IT 互聯網技術的發展,傳統的集中式數據庫愈發的暴露其弊端:集中式處理必然導致訪問瓶頸,系統的數據安全隱患比較大,機器的容災能力差,單點故障會造成整個業務系統癱瘓。所以分布式數據庫勢在必行,當下 HBASE 或者 HDFS 普遍被用來作為存儲介質。對於關系型數據庫,如何進行分布式管理與部署,本文對現有的開源解決方案進行了相關的調查。(以 mysql 為主)
  分布式關系型數據庫的關鍵主要有以下幾點:

  • 分庫
  • 分表
  • M-S
  • 集群
  • 負載均衡
  • 編程接口

    MyCat

    概述

  • 一個可以用於 MySQL 讀寫分離和高可用的中間件
  • 一個模擬為 MySQL Server 的超級數據庫
  • 一個能平滑擴展支持 1000 億大表的分布式數據庫系統
  • 一個可管控多種關系數據庫的數據庫路由器
  • 一個平滑從關系數據升級到大數據的應用中間件

  雖然雲計算時代,傳統數據庫存在着先天性的弊端,但是 NoSQL 數據庫又無法將其替代。如果傳統數據易於擴展,可切分,就可以避免單機(單庫)的性能缺陷。
  MyCat 的目標就是:低成本地將現有的單機數據庫和應用平滑遷移到 “雲” 端,解決數據存儲和業務規模迅速增長情況下的數據瓶頸問題。2014 年 MyCat 首次在上海的《中華架構師》大會上對外宣講引發圍觀,更多的人參與進來,隨后越來越多的項目采用了 MyCat。
  總結一下,mycat 是新一代的基於淘寶開源數據庫中間件 Cobar 的 Mysql 分布式集群,大數據處理中間件。當然,發展至今 mycat 不僅僅只支持 mysql,它同樣的也支持 Sql Server,Oracle,DB2,PostgreSQL 等主流數據,同時也支持 mongoDB 這種新型的 NoSQL 方式的存儲。對於上層用戶,mycat 始終是一個傳統數據,不需要去 care 具體的分布式細節,上層只需要執行普通的數據庫語句即可。

 

特點

  • 支持讀寫分離,支持 Mysql 雙主多從,以及一主多從的模式
  • 支持全局表,數據自動分片到多個節點,用於高效表關聯查詢
  • 支持獨有的基於 E-R 關系的分片策略,實現了高效的表關聯查詢
  • 自動故障切換,高可用性
  • 提供高可用性數據分片集群
  • 支持 JDBC 連接 ORACLE、DB2、SQL Server,將其模擬為 MySQL Server 使用
  • 支持 Mysql 集群,可以作為 Proxy 使用
  • 基於阿里開源的 Cobar 產品而研發,Cobar 的穩定性、可靠性、優秀的架構和性能

相關鏈接

Mycat 文檔地址:https://github.com/MyCATApache/Mycat-doc

Mycat 開源地址:https://github.com/MyCATApache/Mycat-download

 

Atlas

概述

  Atlas 是由 Qihoo360,Web 平台部基礎架構團隊開發維護的一個基於 MySQL 協議的數據中間層項目。它在 MySQL 官方推出的 MySQL-Proxy0.8.2 版本的基礎上,修改了大量 bug,添加了很多功能特性。目前該項目在 360 公司內部得到了廣泛應用,很多 MySQL 業務已經接入了 Atlas 平台,每天承載的讀寫請求數達幾十億條。

特點

  • 讀寫分離
  • 從庫負載均衡
  • IP 過濾
  • SQL 語句黑白名單
  • 自動分表

(與 mysql proxy 對比)

  • 用 c 替換了所有的 lua,僅僅在管理接口中保留了 lua。
  • 重寫了網絡模型和線程模型
  • 實現了連接池
  • 優化了鎖機制,並且顯著提高了性能

 

相關鏈接

文檔地址:https://github.com/Qihoo360/Atlas/wiki

開源地址:https://github.com/Qihoo360/Atlas

 

Cobar

概述

  Cobar 是提供關系型數據庫(MySQL)分布式服務的中間件,它可以讓傳統的數據庫得到良好的線性擴展,並看上去還是一個數據庫,對應用保持透明。

  • 產品在阿里巴巴穩定運行 3 年以上。
  • 接管了 3000+ 個 MySQL 數據庫的 schema。
  • 集群日處理在線 SQL 請求 50 億次以上。
  • 集群日處理在線數據流量 TB 級別以上。

 

相關鏈接

開源地址:https://github.com/alibaba/cobar

幫助文檔:https://github.com/alibaba/cobar/wiki

 

Amoeba

概述

  Amoeba 是一個以 MySQL 為底層數據存儲,並對應用提供 MySQL 協議接口的 proxy。它集中地響應應用的請求,依據用戶事先設置的規則,將 SQL 請求發送到特定的數據庫上執行。基於此可以實現負載均衡、讀寫分離、高可用性等需求。與 MySQL 官方的 MySQL Proxy 相比,作者強調的是 amoeba 配置的方便(基於 XML 的配置文件,用 SQLJEP 語法書寫規則,比基於 lua 腳本的 MySQL Proxy 簡單)。
  Amoeba for MySQL 致力於 MySQL 的分布式數據庫前端代理層,它主要在應用層訪問 MySQL 的時候充當 query 路由功能,專注分布式數據庫 proxy 開發。座落與 Client、DBServer(s) 之間。對客戶端透明。具有負載均衡、高可用性、Query 過濾、讀寫分離、可路由相關的 query 到目標數據庫、可並發請求多台數據庫合並結果。 在 Amoeba 上面你能夠完成多數據源的高可用、負載均衡、數據切片的功能。目前在很多企業的生產線上面使用。

特點

Amoeba 主要解決以下問題:

  • 數據切分后復雜數據源整合
  • 提供數據切分規則並降低數據切分規則給數據庫帶來的影響
  • 降低數據庫與客戶端連接
  • 讀寫分離路由

 

缺點

  • 目前還不支持事務
  • 暫時不支持存儲過程(近期會支持)
  • 不適合從 amoeba 導數據的場景或者對大數據量查詢的 query 並不合適(比如一次請求返回 10w 以上甚至更多數據的場合)
  • 暫時不支持分庫分表,amoeba 目前只做到分數據庫實例,每個被切分的節點需要保持庫表結構一致。

相關鏈接

文檔鏈接:http://docs.hexnova.com/amoeba/

下載地址:http://sourceforge.net/projects/amoeba/files/latest/download

 

Mysql proxy

概述

  MySQL Proxy 是一個處於你的 client 端和 MySQLserver 端之間的簡單程序,它可以監測、分析或改變它們的通信。它使用靈活,沒有限制,常見的用途包括:負載平衡,故障、查詢分析,查詢過濾和修改等等。MySQLProxy 就是這么一個中間層代理,簡單的說,MySQLProxy 就是一個連接池,負責將前台應用的連接請求轉發給后台的數據庫,並且通過使用 lua 腳本,可以實現復雜的連接控制和過濾,從而實現讀寫分離和負載平衡。對於應用來說,MySQLProxy 是完全透明的,應用則只需要連接到 MySQLProxy 的監聽端口即可。當然,這樣 proxy 機器可能成為單點失效,但完全可以使用多個 proxy 機器做為冗余,在應用服務器的連接池配置中配置到多個 proxy 的連接參數即可。MySQLProxy 更強大的一項功能是實現 “讀寫分離”,基本原理是讓主數據庫處理事務性查詢,讓從庫處理 SELECT 查詢。數據庫復制被用來把事務性查詢導致的變更同步到集群中的從庫。   

特點

    • 負載均衡
    • 讀寫分離
    • 不支持表的拆分
    • 代理層監控


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM