十五張圖帶你快速入門 shardingsphere-proxy

勇哥编程游记發表於2024-08-25

Apache ShardingSphere 是一款分散式的資料庫生態系統,它包含兩大產品:

  • ShardingSphere-Proxy
  • ShardingSphere-JDBC

很多同學對於 ShardingSphere-JDBC 已經能非常熟悉的使用了,但關於網上關於 ShardingSphere-Proxy 5.5 的使用教程卻非常少。

所以這篇文章,筆者嘗試帶大家快速入門 ShardingSphere-Proxy 5.5 ,理解它的基本原理以及實戰流程。

1 理解 Proxy 模式

ShardingSphere-Proxy 定位為透明化的資料庫代理端,透過實現資料庫二進位制協議,對異構語言提供支援。 目前提供 MySQL 和 PostgreSQL 協議,透明化資料庫操作,對 DBA 更加友好。

  • 嚮應用程式完全透明,可直接當做 MySQL/PostgreSQL 使用;
  • 相容 MariaDB 等基於 MySQL 協議的資料庫,以及 openGauss 等基於 PostgreSQL 協議的資料庫;
  • 適用於任何相容 MySQL/PostgreSQL 協議的的客戶端,如:MySQL Command Client, MySQL Workbench, Navicat 等。

代理層介於應用程式與資料庫間,每次請求都需要做一次轉發,請求會存在額外的時延。

這種方式對於應用非常友好,應用基本零改動,和語言無關,可以透過連線共享減少連線數消耗。

2 Proxy 模式 VS JDBC 模式

當我們在 Proxy 和 JDBC 兩種模式選擇時,可以參考下表對照:

JDBC Proxy
資料庫 任意 MySQL/PostgreSQL
連線消耗數
異構語言 僅Java 任意
效能 損耗低 損耗略高
無中心化
靜態入口

ShardingSphere-Proxy 提供靜態入口以及異構語言的支援,獨立於應用程式部署,適用於 OLAP 應用以及對分片資料庫進行管理和運維的場景。

ShardingSphere-JDBC 採用無中心化架構,與應用程式共享資源,適用於 Java 開發的高效能的輕量級 OLTP 應用;

在業務相對複雜的場景裡,可以採用混合部署的模式。

透過混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,並採用同一註冊中心統一配置分片策略,能夠靈活的搭建適用於各種場景的應用系統,使得架構師更加自由地調整適合於當前業務的最佳系統架構。

3 快速啟動

ShardingSphere-Proxy 的啟動方式有三種:二進位制包、Docker 和 Helm,可以選擇單機部署叢集部署

本文將介紹如何透過單機二進位制包方式啟動 ShardingSphere-Proxy 版本號:v 5.5.0 。

1、下載

訪問 下載頁面,獲取 ShardingSphere-Proxy 二進位制安裝包, 解壓縮的檔案目錄如下:

2、將 MySQL 的 JDBC 驅動複製到 ext-lib 目錄

下載驅動 mysql-connector-java-5.1.49.jar 或者 mysql-connector-java-8.0.11.jar 放入 lib 包。

3、進入 conf 目錄 , 內容如下圖:

4、模式配置 global.yaml

因為預設檔案內容被註釋掉了,所以去掉註釋,如下圖:

5、驗證啟動 proxy 服務

在 Linux 作業系統上,執行 bin/start.sh;在 Windows 作業系統上,執行 bin/start.bat,以啟動 ShardingSphere-Proxy。

然後使用 MySQL 終端命令連線 ShardingSphere-Proxy 服務端:

# 將 {xx} 替換為實際引數
mysql -h {ip} -u {username} -p{password} -P 3307
# 示例命令
mysql -h 127.0.0.1 -u root -proot -P 3307

4 配置訂單分片策略

現在我們需要展示新的訂單庫(8個分片),需要修改分片策略 。

ShardingSphere-Proxy 支援配置多個邏輯資料來源,每個以database- 字首命名的 YAML 配置檔案,即為一個邏輯資料來源。

因為我們是自定義分片演算法,shardingsphere 內建演算法並不滿足,所以我們必須先編寫自定義演算法類。

1、 實現 ShardingAlgorithm 介面定義的演算法實現類 HashSlotAlgorithm ;

2、在專案 resources 目錄下建立 META-INF/services 目錄 ;

3、在 META-INF/services 目錄下新建檔案 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm

4、 將實現類的全限定類名寫入至檔案 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm

5、將上述 Java 檔案打包成 jar 包, 將上述 jar 包複製至 ext-lib 目錄;

6、配置分片檔案 database-myorder.yaml , 該檔案用來定義訂單的 4 個分片的路由策略;

最後,我們啟動 Proxy 服務 , 我們發現透過 MySQL Client 查詢資料庫時,出現了我們配置的訂單庫 : myorder ,以及訂單庫裡的三個邏輯表 。如下圖:

4 Navicat 連線 shardingsphere proxy

透過 shardingjdbc5-spring 模組,插入多條記錄到 4 個分片裡,可以透過 navicat 連線 proxy 檢視效果:

然後我們模擬在 myorder 邏輯資料庫中新增一條訂單記錄,執行成功並且查詢頁正常的情況下,發現分片 ds0 中儲存了剛插入的那條資料。


筆者將 proxy 演算法模組也新增到了分庫分表實戰專案 shardingsphere-jdbc-demo 裡,有興趣的同學,可以看看這個專案。

Github 地址:https://github.com/makemyownlife/shardingsphere-jdbc-demo


相關文章