首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 大流量架構演進三部曲:讀寫分離 → 垂直分庫 → 水平分表

     編輯:MySQL 資料庫相關知識

演進路線圖

單機 MySQL
    │
    ▼ (QPS 瓶頸、寫入壓力)
讀寫分離 (主從複制)
    │
    ▼ (寫入單庫瓶頸、同步延遲)
垂直分庫 (業務解耦)
    │
    ▼ (單表數據量/寫入超限)
水平分表 (分片演算法)

第一階段:讀寫分離

架構

  • 1 主 (Master) 負責寫入 + 核心讀
  • N 從 (Slave) 負責非核心讀 (報表、查詢、備份)
  • 中間層:ProxySQL / MyCat / ShardingSphere / 應用層路由

適用場景

讀寫比 > 3:1,寫入壓力尚可,主要瓶頸在讀並發。

關鍵挑戰

  • 主從同步延遲 (秒級) 導致讀舊數據 → 關鍵業務強制走主庫
  • 從庫故障自動剔除、權重動態調整
  • 事務一致性:跨庫事務不支援,業務層拆分

第二階段:垂直分庫

核心思想

將高頻寫入、核心業務表拆分到獨立庫/實例:

  • user_db:用戶、認證、配置 (高寫、高查)
  • order_db:訂單、交易、流水 (高寫、強一致)
  • log_db:日誌、審計、行為 (超高寫、可降級)

代價與收益

維度分庫前分庫後
寫入並發單庫瓶頸分散到多實例
同步延遲全庫影響故障域隔離
跨庫查詢JOIN 直接可用應用層組裝 / 冗餘字段
事務本地事務分布式事務 (TCC/Seata) 或 避免跨庫
運維複雜度低高 (多實例監控、備份、變更)

第三階段:水平分表

觸發條件

  • 單表 > 2000 萬行 / 20GB
  • 單表寫入 QPS > 5000
  • 熱點數據集中導致鎖爭用

四大分片演算法對比

演算法原理優點缺點擴容難度
取模 Hashuser_id % N簡單、均勻擴容需全量重分片極高 (全量遷移)
範圍分片1-1000→分片1, 1001-2000→分片2範圍查詢快、擴容只遷移邊界熱點傾斜 (新用戶集中新分片)中
映射表獨立表存 user_id → shard_id完全可控、業務無關額外查詢開銷、映射表本身擴容低 (只擴映射表)
一致性 Hash環狀分佈、虛擬節點擴容只影響相鄰節點實現複雜、需中間件支援低

分片鍵選擇原則

  1. 高基數、均勻分佈 (user_id、order_id、device_id)
  2. 業務查詢高頻帶分片鍵 (避免廣播查詢)
  3. 不可變 (避免分片鍵更新導致數據遷移)

中間件選型建議

  • ShardingSphere (原 Sharding-JDBC):Java 生態最完善、支援分布式事務、治理台
  • MyCat:成熟、社區活躍、支援多租戶、但開發語言限制
  • Vitess:Google 開源、Kubernetes 原生、超大規模驗證 (Slack、JD)
  • 自研 Proxy:極致定制、團隊強時選擇

總結:演進節奏把控

  1. 先優化 (索引、SQL、緩存) 再架構變更
  2. 讀寫分離 → 垂直分庫 → 水平分表,每階段驗證效果再進入下一階段
  3. 分片演算法選擇要考慮 3 年業務增長,預留擴容方案
  4. 監控先行:分片後必須有分片級 QPS、延遲、錯誤率儀表板
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved