做者 陳彩華 貝聊Java後端工程師
文章轉載交流請聯繫 caison@aliyun.com
複製代碼
最近學習了阿里資深技術專家李運華的架構設計關於讀寫分離的教程,很有收穫,總結一下。前端
本文主要介紹高性能數據庫集羣讀寫分離相關理論,基本架構,涉及的複雜度問題以及常看法決方案。mysql
基本架構圖: sql
讀寫分離不是銀彈,並非一有性能問題就上讀寫分離,而是應該先優化,例如優化慢查詢,調整不合理的業務邏輯,引入緩存查詢等只有肯定系統沒有優化空間後才考慮讀寫分離集羣數據庫
如何將讀寫操做區分開來,而後訪問不一樣的數據庫服務器?後端
基本架構圖 緩存
業界開源實現bash
基本架構圖服務器
業界開源實現架構
MySQL Router是輕量級的中間件,可在應用程序和任何後端MySQL服務器之間提供透明路由。它能夠用於各類各樣的用例,例如經過有效地將數據庫流量路由到適當的後端MySQL服務器來提供高可用性和可伸縮性。可插拔架構還使開發人員可以擴展MySQL Router以用於自定義用例。負載均衡
基於MySQL Router能夠實現讀寫分離,故障自動切換,負載均衡,鏈接池等功能。
MySQL官方提供的MySQL Proxy
360開源的Atlas
Atlas是由平臺部基礎架構團隊開發維護的一個基於MySQL協議的數據中間層項目。它是在mysql-proxy的基礎上,對其進行了優化,增長了一些新的功能特性。
功能 | Sharding-JDBC | TDDL | Amoeba | Cobar | MyCat |
---|---|---|---|---|---|
基於客戶端仍是服務端 | 客戶端 | 客戶端 | 服務端 | 服務端 | 服務端 |
分庫分表 | 有 | 有 | 有 | 有 | 有 |
MySQL交互協議 | JDBC Driver | JDBC Driver | 前端用NIO,後端用JDBC Driver | 前端用NIO,後端用BIO | 先後端均用NIO |
支持的數據庫 | 任意 | 任意 | 任意 | MySQL | 任意 |
參考