6 大分庫分表中間件詳解 -圖文全面總結-
大家好,我是 mikechen。
分庫分表是大型架構的必備技能,也是大廠經常考察的重點對象,下面我就全面來詳解分庫分表中間件 @mikechen
分庫分表
分庫分表:是數據庫水平擴展的一種常見策略,用於處理大規模數據、和高併發請求。
如下圖所示:
分庫分表,這裏分爲兩個方面,包含:分庫、和分表兩種策略。
1、分庫
分庫:就是將數據水平分散到多個數據庫實例中,每個數據庫實例可以部署在不同的服務器上,從而減輕單個數據庫的壓力。
還是舉一個例子,比如:數據按照某個字段的值範圍,分佈到不同的庫中。
例如:用戶 ID 爲 1-10000 的數據存儲在庫 A,10001-20000 的數據存儲在庫 B,這就是分庫。
2、分表
分表:就是在單個數據庫實例內,將數據水平分散到多個表中,從而減輕單表的壓力。
還是舉一個例子,比如:根據某個字段的值範圍分表。
例如:用戶 ID 爲 1-10000 的數據存儲在表 user_1,10001-20000 的數據存儲在表 user_2,這就是分表。
總之,分庫分表是數據庫擴展中常用的策略,目的是提高系統的併發處理能力、和數據存儲能力。
分庫分表中間件
在瞭解完分庫分表後,我們一起來看看目前市場主流的分庫分表中間件有哪些呢?let's go!
1.ShardingSphere
ShardingSphere 是一個開源的分佈式數據庫中間件解決方案,支持:分庫分表、讀寫分離、分佈式事務、數據加密...... 等多種功能。
ShardingSphere 通過統一的接口、和高性能的實現,爲開發者提供了透明的分庫分表支持,適用於 Java 等應用。
如下圖所示:
主要包括三個核心組件:
-
Sharding-JDBC:適用於 Java 應用程序,提供 JDBC 層的分庫分表支持;
-
Sharding-Proxy:基於 MySQL 協議的代理層,支持多語言應用,客戶端無需修改代碼,即可實現分庫分表;
-
**Sharding-Sidecar :**適用於 Kubernetes 環境下的微服務架構,提供與:Sharding-JDBC 類似的功能。
ShardingSphere 適用於各種需要分佈式數據庫管理的場景,比如:電商、社交網絡..... 等需要處理大規模數據,和高併發請求的場景。
2.TDDL
TDDL,全稱是 Taobao Distributed Data Layer,就是:淘寶分佈式數據層。
TDDL 是阿里巴巴集團內部開發的一款分佈式數據庫中間件,設計目標是:解決在電商業務中遇到的大規模數據、和高併發請求問題。
3.DRDS
阿里的 TDDL,後續升級爲:DRDS,全稱是 “Distributed Relational Database Service”,是一款:分佈式關係型數據庫服務。
DRDS 整體架構,如下圖所示:
DRDS 支持:分庫分表、讀寫分離、和分佈式事務... 等技術。
DRDS 廣泛應用於數據量大的場景,比如:電商、金融、遊戲... 等領域。
4.MyCAT
MyCAT 是基於阿里巴巴的 Cobar 項目開發的,是一個增強版的數據庫中間件,支持多種數據庫(如:MySQL、PostgreSQL...)等。
整體架構,如下圖所示:
MyCAT 支持將數據分散到多個數據庫實例、和多個表中,通過靈活的分片規則實現水平擴展。
比如:
-
範圍分片:根據某個字段的值範圍進行分片;
-
哈希分片:對某個字段進行哈希計算,然後按哈希值取模分片;
-
日期分片:根據日期字段進行分片,例如:按月、或按年分片;
5.Atlas
Atlas 是由 360 公司開發的一款開源 MySQL 數據庫中間件,可以實現 MySQL 數據庫的水平擴展、和高可用性。
Atlas 支持分庫分表,以及還支持讀寫分離,將寫請求發送到主庫,讀請求發送到從庫,從而提升系統的讀寫性能和可用性。
6.Vitess
Vitess 是一個開源的分佈式數據庫中間件系統,最初由 YouTube 開發,用於解決其在大規模 MySQL 集羣中的擴展性問題。
Vitess 通過分庫分表技術,將數據分散存儲到多個 MySQL 實例中,從而提升數據庫的存儲能力、和併發處理能力。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/sD_0CcM9ZseXRgM00CEYSg