歡迎光臨
每天分享高質量文章

淺談高性能資料庫集群 —— 讀寫分離

點擊上方“芋道原始碼”,選擇“置頂公眾號”

技術文章第一時間送達!

原始碼精品專欄

 

來源:http://t.cn/EZK3vPU

  • 1. 讀寫分離概述

  • 2. 適用場景

  • 3. 引入的系統複雜度問題


最近學習了阿裡資深技術專家李運華的架構設計關於讀寫分離的教程,頗有收穫,總結一下。

本文主要介紹高性能資料庫集群讀寫分離相關理論,基本架構,涉及的複雜度問題以及常見解決方案。

1. 讀寫分離概述

讀寫分離概述

基本架構圖:

基本架構圖.jpg

2. 適用場景

適用場景.png

讀寫分離不是銀彈,並不是一有性能問題就上讀寫分離,而是應該先優化,例如優化慢查詢,調整不合理的業務邏輯,引入快取查詢等只有確定系統沒有優化空間後才考慮讀寫分離集群

3. 引入的系統複雜度問題

問題一 主從複製延遲

主從複製延遲.png

問題二 分配機制

如何將讀寫操作區分開來,然後訪問不同的資料庫服務器?

解決方案1 客戶端程式代碼封裝實現

基本架構圖

程式代碼封裝實現分配基本架構圖
程式代碼封裝

業界開源實現

  • Sharding-JDBC 定位為輕量級Java框架,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動,完全兼容JDBC和各種ORM框架。

Sharding-JDBC基本架構圖
  • 淘寶TDDL 淘寶根據自身業務需求研發了 TDDL ( Taobao Distributed Data Layer )框架,主要用於解決 分庫分表場景下的訪問路由(持久層與資料訪問層的配合)以及異構資料庫之間的資料同步 ,它是一個基於集中式配置的 JDBC DataSource 實現,具有分庫分表、 Master/Salve 、動態資料源配置等功能。

淘寶TDDL基本架構圖

解決方案2 服務端中間件封裝

基本架構圖

服務端中間件封裝實現分配基本架構圖
服務端中間件封裝

業界開源實現

  • MySQL官方推薦的MySQL Router

MySQL Router架構圖

MySQL Router是輕量級的中間件,可在應用程式和任何後端MySQL服務器之間提供透明路由。它可以用於各種各樣的用例,例如通過有效地將資料庫流量路由到適當的後端MySQL服務器來提供高可用性和可伸縮性。可插拔架構還使開發人員能夠擴展MySQL Router以用於自定義用例。

基於MySQL Router可以實現讀寫分離,故障自動切換,負載均衡,連接池等功能。

  • MySQL官方提供的MySQL Proxy

    MySQL Proxy
  • 360開源的Atlas

Atlas架構圖形象表示
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+ 篇


原始碼不易↓↓↓

點贊支持老艿艿↓↓

赞(0)

分享創造快樂