點選上方“芋道原始碼”,選擇“置頂公眾號”
技術文章第一時間送達!
原始碼精品專欄
來源:http://t.cn/EZK3vPU
-
1. 讀寫分離概述
-
2. 適用場景
-
3. 引入的系統複雜度問題
最近學習了阿裡資深技術專家李運華的架構設計關於讀寫分離的教程,頗有收穫,總結一下。
本文主要介紹高效能資料庫叢集讀寫分離相關理論,基本架構,涉及的複雜度問題以及常見解決方案。
1. 讀寫分離概述
基本架構圖:
2. 適用場景
讀寫分離不是銀彈,並不是一有效能問題就上讀寫分離,而是應該先最佳化,例如最佳化慢查詢,調整不合理的業務邏輯,引入快取查詢等只有確定系統沒有最佳化空間後才考慮讀寫分離叢集
3. 引入的系統複雜度問題
問題一 主從複製延遲
問題二 分配機制
如何將讀寫操作區分開來,然後訪問不同的資料庫伺服器?
解決方案1 客戶端程式程式碼封裝實現
基本架構圖
業界開源實現
-
Sharding-JDBC 定位為輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全相容JDBC和各種ORM框架。
-
淘寶TDDL 淘寶根據自身業務需求研發了 TDDL ( Taobao Distributed Data Layer )框架,主要用於解決 分庫分表場景下的訪問路由(持久層與資料訪問層的配合)以及異構資料庫之間的資料同步 ,它是一個基於集中式配置的 JDBC DataSource 實現,具有分庫分表、 Master/Salve 、動態資料源配置等功能。
解決方案2 服務端中介軟體封裝
基本架構圖
業界開源實現
-
MySQL官方推薦的MySQL Router
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 | 任意 |
參考
從0開始學架構——李運華
Mycat原理解析-Mycat架構分析
如果你對 Dubbo / Netty 等等原始碼與原理感興趣,歡迎加入我的知識星球一起交流。長按下方二維碼噢:
目前在知識星球更新了《Dubbo 原始碼解析》目錄如下:
01. 除錯環境搭建
02. 專案結構一覽
03. 配置 Configuration
04. 核心流程一覽
05. 拓展機制 SPI
06. 執行緒池
07. 服務暴露 Export
08. 服務取用 Refer
09. 註冊中心 Registry
10. 動態編譯 Compile
11. 動態代理 Proxy
12. 服務呼叫 Invoke
13. 呼叫特性
14. 過濾器 Filter
15. NIO 伺服器
16. P2P 伺服器
17. HTTP 伺服器
18. 序列化 Serialization
19. 叢集容錯 Cluster
20. 優雅停機
21. 日誌適配
22. 狀態檢查
23. 監控中心 Monitor
24. 管理中心 Admin
25. 運維命令 QOS
26. 鏈路追蹤 Tracing
… 一共 69+ 篇
目前在知識星球更新了《Netty 原始碼解析》目錄如下:
01. 除錯環境搭建
02. NIO 基礎
03. Netty 簡介
04. 啟動 Bootstrap
05. 事件輪詢 EventLoop
06. 通道管道 ChannelPipeline
07. 通道 Channel
08. 位元組緩衝區 ByteBuf
09. 通道處理器 ChannelHandler
10. 編解碼 Codec
11. 工具類 Util
… 一共 61+ 篇
目前在知識星球更新了《資料庫物體設計》目錄如下:
01. 商品模組
02. 交易模組
03. 營銷模組
04. 公用模組
… 一共 17+ 篇
目前在知識星球更新了《Spring 原始碼解析》目錄如下:
01. 除錯環境搭建
02. IoC Resource 定位
03. IoC BeanDefinition 載入
04. IoC BeanDefinition 註冊
05. IoC Bean 獲取
06. IoC Bean 生命週期
… 一共 35+ 篇
原始碼不易↓↓↓↓↓
點贊支援老艿艿↓↓