Amoeba(變形蟲)是以 MySQL 為後端存儲、對外提供 MySQL 協議的輕量級 Proxy,專注於 SQL 路由、讀寫分離、負載均衡、高可用。不同於 MySQL Proxy 的 Lua 腳本配置,Amoeba 採用 XML + SQLJEP 語法,配置更直觀。本文系統介紹其架構、核心功能、產品矩陣與避坑指南。
定位與核心價值
Amoeba = SQL 路由器 + 連接池管理器 + 讀寫分離引擎 + 高可用監控器
- 對客戶端透明:應用連接 Amoeba 如連接單台 MySQL
- 降低客戶端連接數:後端連接複用,減少 MySQL 連接壓力
- 規則引擎:基於 SQLJEP 解析 SQL,按分片鍵路由至目標節點
- 不實現數據同步:需配合 MySQL Replication/Gtid 實現主備同步
產品矩陣
1. Amoeba for MySQL(核心產品)
- 專注 MySQL 分布式代理層
- 支援負載均衡、高可用、SQL 過濾、讀寫分離、多節點併發合併結果
- 廣泛用於生產環境
2. Amoeba for Aladdin
- 後端支援多種 JDBC 數據庫(Oracle、SQL Server、PostgreSQL 等)
- 前端統一 MySQL 協議,利用生態工具鏈
- 解決企業異構數據庫整合訪問問題
3. Amoeba for MongoDB
- 提供可控分片策略,彌補 MongoDB 自動分片不可控缺陷
- 保留心跳檢測、故障轉移、查詢聚合等核心能力
- 配置方式與 MySQL 版本一致,學習成本低
對比:Amoeba vs MySQL Proxy vs Mongos
Amoeba vs MySQL Proxy
| 維度 | Amoeba | MySQL Proxy |
| 配置方式 | XML + SQLJEP | Lua 腳本 |
| 讀寫分離+多節點 | 配置即用 | 需大量編碼 |
| 成熟度 | 生產驗證 | 早期版本不穩定 |
Amoeba for MongoDB vs Mongos
- Mongos 基於 Chunk Range 分片,分片鍵必須為單鍵,不適合無序 ID(手機號、會員卡號等)
- Amoeba 提供完全自主可控的分片規則(Hash、Range、映射表等)
Amoeba 不支援的場景
- ❌ 分佈式事務(兩階段提交)
- ❌ 預存過程(近期規劃支援)
- ❌ 大結果集導出(>10 萬行單次查詢)
- ❌ 分庫分表(僅支援分實例,分片節點結構必須一致)
技術架構亮點
- Java NIO 非阻塞:高併發下資源佔用低、擴展性強
- 後端連接複用:所有客戶端共享後端連接池,大幅降低 MySQL 連接數
- 可插拔策略:路由、負載均衡、故障檢測均可插拔擴展
- Sequence 服務:提供全局唯一遞增 ID,解決分庫分表主鍵生成問題
部署建議
- JVM 參數調優:
-Xms2g -Xmx2g -XX:+UseG1GC
- 連接池大小:根據後端 MySQL
max_connections 反推
- 監控指標:QPS、Latency、後端連接數、心跳失敗率
- 搭配 Keepalived 實現 Amoeba 自身高可用
Amoeba 以「輕量、易配置、專注代理層」佔據一席之地,雖社區活躍度不如 ShardingSphere,但在存量 MySQL 分片遷移、異構庫整合場景仍具獨特價值。