淺談高性能數據庫集羣——讀寫分離

做者 陳彩華 貝聊Java後端工程師
文章轉載交流請聯繫 caison@aliyun.com
複製代碼

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

本文主要介紹高性能數據庫集羣讀寫分離相關理論,基本架構,涉及的複雜度問題以及常看法決方案。mysql

1 讀寫分離概述

讀寫分離概述

基本架構圖: sql

基本架構圖.jpg

2 適用場景

適用場景.png

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

3 引入的系統複雜度問題

問題一 主從複製延遲

主從複製延遲.png

問題二 分配機制

如何將讀寫操做區分開來,而後訪問不一樣的數據庫服務器?後端

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

基本架構圖 緩存

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

程序代碼封裝

業界開源實現bash

  • 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架構分析

相關文章
相關標籤/搜索