資料庫系列: 主流分庫分表中介軟體介紹(圖文總結)

Hello-Brand發表於2024-08-02

相關文章

資料庫系列:MySQL慢查詢分析和效能最佳化
資料庫系列:MySQL索引最佳化總結(綜合版)
資料庫系列:高併發下的資料欄位變更
資料庫系列:覆蓋索引和規避回表
資料庫系列:資料庫高可用及無損擴容
資料庫系列:使用高區分度索引列提升效能
資料庫系列:字首索引和索引長度的取捨
資料庫系列:MySQL引擎MyISAM和InnoDB的比較
資料庫系列:InnoDB下實現高併發控制
資料庫系列:事務的4種隔離級別
資料庫系列:RR和RC下,快照讀的區別
資料庫系列:MySQL InnoDB鎖機制介紹
資料庫系列:MySQL不同操作分別用什麼鎖?
資料庫系列:業內主流MySQL資料中介軟體梳理
資料庫系列:巨量資料表的分頁效能問題

1 介紹

物理服務機的CPU、記憶體、儲存裝置、連線數等資源有限,某個時段大量連線同時執行操作,會導致資料庫在處理上遇到效能瓶頸。為了解決這個問題,行業先驅門充分發揚了分而治之的思想,對大庫表進行分割,
然後實施更好的控制和管理,同時使用多臺機器的CPU、記憶體、儲存,提供更好的效能。而分治有兩種實現方式:垂直拆分和水平拆分。

  • 垂直拆分(Scale Up)分為垂直分庫和垂直分表,主要按功能模組拆分,以解決各個庫或者各個表之間的資源競爭。比如分為訂單庫、商品庫、使用者庫...這種方式,多個資料庫之間的表結構是不同的。
  • 水平拆分(Scale Out)又分為庫內分表和分庫分表,來解決單表中資料量增長出現的壓力,這些資料庫中的表結構完全相同。

詳細可以參考筆者的這兩篇文章:
MySQL全面瓦解28:分庫分表
MySQL全面瓦解29:分庫分表之Partition功能詳解

2 常見主流中介軟體介紹

既然已經是實現了分庫分表的方案,那麼就需要有便捷的元件來支援管理.
分庫分表中介軟體是資料庫架構中用於解決高併發、大資料量等問題的關鍵元件。這些中介軟體透過資料分片、路由、負載均衡等功能,提高了資料庫的效能和擴充套件性。以下是一些常見的分庫分表中介軟體介紹:

2.1 ShardingSphere

概述

  • ShardingSphere是一款開源的分散式資料庫中介軟體,提供了分庫分表、讀寫分離、分散式事務等功能。
  • 它支援多種資料庫,如MySQL、PostgreSQL、Oracle、SQL Server等,並且可以與現有的資料庫系統無縫整合。

架構與原理

ShardingSphere由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar三個主要元件組成。

  • Sharding-JDBC:用於實現分庫分表功能的模組,它可以在應用層透過簡單的配置實現透明的分庫分表操作。
  • Sharding-Proxy:用於實現資料庫代理功能的模組,它可以將資料庫請求路由到不同的資料庫節點上,實現讀寫分離和負載均衡。
  • Sharding-Sidecar(規劃中):定位為Kubernetes的雲原生資料庫代理,以Sidecar的形式代理所有對資料庫的訪問。

image

其原理是透過資料分片和路由來實現分庫分表。資料分片是將資料劃分為多個片段,每個片段儲存在不同的資料庫例項或資料表中;路由則是根據資料的分片規則將請求路由到對應的資料庫例項或資料表上。

優勢與適用場景

  • 靈活的擴充套件性:支援水平擴充套件和垂直擴充套件,可以根據業務需求靈活調整資料庫的規模和效能。
  • 高可用性:支援主從複製和多活架構,提供高可用的資料庫訪問和資料保護。
  • 簡化開發和維護:提供了簡單易用的介面和配置,可以減少開發人員的工作量和維護成本。
  • 適用於高併發訪問、大資料量儲存、跨地域部署等場景。

2.2 MyCAT

概述

  • MyCAT是一個開源的分散式資料庫中介軟體,基於Java編寫,支援MySQL協議,可以作為MySQL的代理伺服器使用。
  • 它支援分庫分表、讀寫分離、全域性序列號等功能,並且具有跨語言、跨平臺、跨資料庫的通用性。

架構與原理

  • MyCAT採用代理模式來實現資料庫的路由和分片。
  • 它包括MyCAT-Server和MyCAT-DataNode兩個主要部分。MyCAT-Server用於接收客戶端的資料庫請求,並將請求路由到不同的資料庫節點上;MyCAT-DataNode則用於實際儲存資料的資料庫節點。

image

優勢與適用場景

  • 易於部署和使用:對於專案來說是透明的,如果遇到升級之類的操作,只需要在中介軟體層面進行即可。
  • 適用於大規模MySQL叢集的管理和擴充套件問題。
  • 但是,MyCAT的SQL支援相對較弱,可能需要對SQL語句進行一定的改寫和最佳化。

2.3 Vitess

概述

  • Vitess是由YouTube開發的一個開源分散式資料庫中介軟體,主要用於解決大規模MySQL叢集的管理和擴充套件問題。

架構與原理

  • Vitess提供了資料分片、讀寫分離、水平擴充套件等功能,並且具有強大的負載均衡和故障恢復能力。
  • 它透過vtgate(Vitess的查詢路由器)來實現對資料庫的訪問控制和負載均衡。

優勢與適用場景

  • 適用於大規模MySQL叢集的場景,具有強大的水平擴充套件和負載均衡功能。
  • 但是,Vitess對於非MySQL資料庫的支援較弱,可能不適用於其他型別的資料庫系統。

2.4 其他中介軟體介紹

除了上述三種常見的分庫分表中介軟體外,還有其他一些中介軟體如Cobar(已逐漸被淘汰)、TDDL(淘寶分散式資料層)、Atlas(Qihoo 360開源)等。這些中介軟體在特定的歷史時期或特定的業務場景下有一定的應用價值,但隨著技術的發展和市場的變化,它們的使用範圍和影響力逐漸減弱。

3 總結

在選擇分庫分表中介軟體時,需要根據具體的業務需求、技術棧、效能要求等因素進行綜合考慮。ShardingSphere、MyCAT和Vitess是當前較為流行和成熟的中介軟體選擇,它們各自具有不同的優勢和適用場景。同時,也需要關注中介軟體的發展動態和社群支援情況,以便在後續的技術升級和維護中獲得更好的支援。

相關文章