傳統集中式 vs MySQL Share-Nothing
| 維度 | 傳統 (Oracle RAC 等) | MySQL 架構 |
| 核心思想 | Share Everything (共享存儲) | Share Nothing (無共享) |
| 擴展方式 | 縱向 (大型機、昂貴存儲) | 橫向 (PC Server 集群) |
| 高可用 | 共享存儲故障切換 | Replication + HA 管理/Cluster |
| 成本 | 高、廠商鎖定 | 低、開源、硬體不可知 |
可擴展性三大支柱
1. Replication 讀寫分離
- Master 寫、多 Slave 讀,查詢能力線性擴展
- 異步/半同步/GTID 多種模式,按業務一致性選型
- 異構硬體、混合 OS、跨機房部署零障礙
2. 第三方/自研增強複製
- Tungsten Replicator、Galera Cluster、自研 Binlog 解析
- 解決原生 Replication 延遲、衝突、DDL 阻塞等痛點
3. 資料切分
| 切分維度 | 策略 | 實現層 |
| 縱向 (功能) | 業務模塊拆庫:用戶庫、訂單庫、日誌庫 | 應用路由 / Proxy |
| 橫向 (Sharding) | Hash/Range/一致性 Hash:user_id % 1024 | 中間件 / MySQL Partition |
| 混合 | 縱向拆庫 + 橫向分表 | Proxy + 應用協同 |
高可用性四層防線
- 寫入雙主 (Master-Master) + VIP 漂移:Keepalived/MHA/Orchestrator 秒級切換
- 讀節點多副本 + 自動摘除:Proxy 健康檢查、連接池隔離
- MySQL Cluster (NDB):真正分布式、同步複製、資料分片自動均衡、無單點
- 應用層熔斷/降級:Hystrix/Sentinel,資料庫不可用時快速失敗、保護核心鏈路
全方位分布式數據服務層:DB + Cache + Search
┌─────────────┐
│ Data Proxy │ ← 統一訪問層:路由、熔斷、雙寫、一致性修復
└──────┬──────┘
┌────────────┼────────────┐
▼ ▼ ▼
┌───────┐ ┌─────────┐ ┌──────────┐
│ MySQL │ │ Cache │ │ Search │
│ 持久化 │ │ Redis/ │ │ Elastic/ │
│ 核心業務│ │ Memcached│ │ Sphinx │
└───────┘ └─────────┘ └──────────┘
同步策略選型
- 異步佇列 (Kafka/RocketMQ):延遲可接受、邏輯解耦、峰值削峰
- Proxy 雙寫:強一致要求低、延遲敏感
- Trigger + UDF:極低延遲、侵入性強、維護成本高
架構演進原則
- 無最好,只有最合適:業務量級、一致性要求、團隊能力三角決策
- 演進而非大爆炸:單體 → 讀寫分離 → 垂直拆庫 → 水平分表 → 服務層抽象
- 可觀測性先行:Metrics、Tracing、Logging 三位一體,盲目擴展是災難
- 災備演練常態化:混沌工程、故障注入、恢復時間目標 (RTO) 驗證
結語
MySQL 的 Share-Nothing 基因,配合開源生態 (Replication、Proxy、Cache、Search),讓團隊能以極低成本構建彈性可擴展的數據底座。關鍵在於:業務驅動架構、演進優於設計、可觀測性貫穿始終。