萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Cobar:阿里巴巴開源的 MySQL 分布式中間件架構與原理深度解析

Cobar 是阿里巴巴自研的關係型數據庫分布式中間件,已穩定支撐 3000+ Schema、日均 50 億+ SQL 請求、TB 級流量。它透過 SQL 路由、分片、讀寫分離、高可用切換,讓應用無感知地使用分布式 MySQL 叢集。

核心功能矩陣

Cobar核心功能架構

分布式分片

  • 水平拆分:單表按分片鍵(如 user_id%N)拆分至多個 Schema
  • 垂直拆分:不同表路由至不同 Schema
  • 混合模式:大表水平拆分,小表垂直分庫

硬性約束:拆分後的分片必須分佈在不同的物理庫,不支援同庫內分表(如 test_1、test_2 在同一 Schema)。

高可用(HA)

  • 心跳檢測:配置後自動向後端 MySQL 發送心跳
  • 自動切換:檢測到主庫異常自動切換備庫
  • 非自動切回:主庫恢復不自動切回,需人工干預或備庫也故障時才切回
  • 數據同步:Cobar 不管理主備同步,需用戶自行配置 MySQL 雙向複製

功能約束清單(必讀)

  • ❌ 跨庫 JOIN、分頁、排序、子查詢
  • ❌ SET 語句(事務/字符集設定除外)
  • ❌ 分片鍵缺失的 INSERT、更新分片鍵的 UPDATE
  • ❌ SAVEPOINT
  • ❌ 僅支援 MySQL 數據節點
  • ❌ JDBC 參數 rewriteBatchedStatements=true、useServerPrepStmts=true
  • ❌ BLOB/BINARY/VARBINARY 不支援 setBlob()/setBinaryStream()

邏輯架構層次

Cobar邏輯層次圖
層級概念說明
dataSource數據源物理數據庫連接,與 MySQL Schema 一一對應
dataNode數據節點主備 dataSource + HA + 連接池 = 一個分庫
table邏輯表含拆分表、非拆分表
tableRule路由規則決定 SQL 路由至哪些 dataNode
schema邏輯庫包含拆分表/非拆分表的邏輯命名空間

配置文件 schema.xml 定義上述層次關係,支援靈活的拓撲部署。

實現原理:SQL 處理流水線

Cobar SQL處理流程
  1. SQL Parser:解析 SQL,提取表、條件、分片鍵
  2. SQL Router:根據 tableRule 計算目標 dataNode 集合
  3. SQL Executor:並發向後端 dataNode 發送請求
  4. Result Merge:多節點結果集合併(排序、分頁、聚合)
  5. Response:封裝 MySQL 協議返回客戶端

網絡模型:Reactor + NIO

Cobar Reactor網絡模型
  • NIOAcceptor:前端請求接收
  • NIOConnector:後端連接管理
  • NIOProcessor:多線程事件處理
  • NIOReactor:底層事件驅動

採用主流 Reactor 模式,非阻塞 I/O 支撐高併發連接,架構類似 Netty/Mina。

適用場景與遷移建議

  • ✅ 讀寫分離、分庫分表、多租戶隔離
  • ✅ 應用無感知遷移(保持 MySQL 協議兼容)
  • ❌ 複雜跨分片事務、廣義 JOIN 查詢
  • ❌ 異構數據庫整合(僅支援 MySQL)

Cobar 以「簡單、高效、透明」著稱,雖已停止維護(後繼者为 MyCat、ShardingSphere),但其設計思想仍是分布式中間件的經典教材。

copyright © 萬盛學電腦網 all rights reserved