十五張圖帶你快速入門 Shardingsphere-Proxy
Apache ShardingSphere 是一款分布式的數(shù)據(jù)庫生態(tài)系統(tǒng),它包含兩大產(chǎn)品:
- ShardingSphere-Proxy
- ShardingSphere-JDBC
很多同學對于 ShardingSphere-JDBC 已經(jīng)能非常熟悉的使用了,但關于網(wǎng)上關于 ShardingSphere-Proxy 5.5 的使用教程卻非常少。
所以這篇文章,筆者嘗試帶大家快速入門 ShardingSphere-Proxy 5.5 ,理解它的基本原理以及實戰(zhàn)流程。
圖片
1 理解 Proxy 模式
ShardingSphere-Proxy 定位為透明化的數(shù)據(jù)庫代理端,通過實現(xiàn)數(shù)據(jù)庫二進制協(xié)議,對異構(gòu)語言提供支持。目前提供 MySQL 和 PostgreSQL 協(xié)議,透明化數(shù)據(jù)庫操作,對 DBA 更加友好。
- 向應用程序完全透明,可直接當做 MySQL/PostgreSQL 使用;
- 兼容 MariaDB 等基于 MySQL 協(xié)議的數(shù)據(jù)庫,以及 openGauss 等基于 PostgreSQL 協(xié)議的數(shù)據(jù)庫;
- 適用于任何兼容 MySQL/PostgreSQL 協(xié)議的的客戶端,如:MySQL Command Client, MySQL Workbench, Navicat 等。
圖片
代理層介于應用程序與數(shù)據(jù)庫間,每次請求都需要做一次轉(zhuǎn)發(fā),請求會存在額外的時延。
這種方式對于應用非常友好,應用基本零改動,和語言無關,可以通過連接共享減少連接數(shù)消耗。
2 Proxy 模式 VS JDBC 模式
當我們在 Proxy 和 JDBC 兩種模式選擇時,可以參考下表對照:
JDBC | Proxy | |
數(shù)據(jù)庫 |
| MySQL/PostgreSQL |
連接消耗數(shù) |
| 低 |
異構(gòu)語言 |
| 任意 |
性能 |
| 損耗略高 |
無中心化 |
| 否 |
靜態(tài)入口 |
| 有 |
ShardingSphere-Proxy 提供靜態(tài)入口以及異構(gòu)語言的支持,獨立于應用程序部署,適用于 OLAP 應用以及對分片數(shù)據(jù)庫進行管理和運維的場景。
ShardingSphere-JDBC 采用無中心化架構(gòu),與應用程序共享資源,適用于 Java 開發(fā)的高性能的輕量級 OLTP 應用;
在業(yè)務相對復雜的場景里,可以采用混合部署的模式。
圖片
通過混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注冊中心統(tǒng)一配置分片策略,能夠靈活的搭建適用于各種場景的應用系統(tǒng),使得架構(gòu)師更加自由地調(diào)整適合于當前業(yè)務的最佳系統(tǒng)架構(gòu)。
3 快速啟動
ShardingSphere-Proxy 的啟動方式有三種:二進制包、Docker 和 Helm,可以選擇單機部署或集群部署。
本文將介紹如何通過單機二進制包方式啟動 ShardingSphere-Proxy 版本號:v 5.5.0 。
- 下載
訪問 下載頁面,獲取 ShardingSphere-Proxy 二進制安裝包, 解壓縮的文件目錄如下:
圖片
- 將 MySQL 的 JDBC 驅(qū)動復制到 ext-lib 目錄
下載驅(qū)動 mysql-connector-java-5.1.49.jar 或者 mysql-connector-java-8.0.11.jar 放入 lib 包。
圖片
- 進入 conf 目錄 , 內(nèi)容如下圖:
圖片
- 模式配置 global.yaml
因為默認文件內(nèi)容被注釋掉了,所以去掉注釋,如下圖:
圖片
- 驗證啟動 proxy 服務
在 Linux 操作系統(tǒng)上,運行 bin/start.sh;在 Windows 操作系統(tǒng)上,運行 bin/start.bat,以啟動 ShardingSphere-Proxy。
圖片
然后使用 MySQL 終端命令連接 ShardingSphere-Proxy 服務端:
# 將 {xx} 替換為實際參數(shù)
mysql -h {ip} -u {username} -p{password} -P 3307
# 示例命令
mysql -h 127.0.0.1 -u root -proot -P 3307
圖片
4 配置訂單分片策略
現(xiàn)在我們需要展示新的訂單庫(8個分片),需要修改分片策略 。
ShardingSphere-Proxy 支持配置多個邏輯數(shù)據(jù)源,每個以database- 前綴命名的 YAML 配置文件,即為一個邏輯數(shù)據(jù)源。
圖片
因為我們是自定義分片算法,shardingsphere 內(nèi)置算法并不滿足,所以我們必須先編寫自定義算法類。
圖片
- 實現(xiàn) ShardingAlgorithm 接口定義的算法實現(xiàn)類 HashSlotAlgorithm ;
- 在項目 resources 目錄下創(chuàng)建 META-INF/services 目錄 ;
- 在 META-INF/services 目錄下新建文件 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm ;
- 將實現(xiàn)類的全限定類名寫入至文件 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm ;
- 將上述 Java 文件打包成 jar 包, 將上述 jar 包拷貝至 ext-lib 目錄;
圖片
- 配置分片文件 database-myorder.yaml , 該文件用來定義訂單的 4 個分片的路由策略;
圖片
最后,我們啟動 Proxy 服務 , 我們發(fā)現(xiàn)通過 MySQL Client 查詢數(shù)據(jù)庫時,出現(xiàn)了我們配置的訂單庫 :myorder ,以及訂單庫里的三個邏輯表 。如下圖:
圖片
4 Navicat 連接 shardingsphere proxy
通過 shardingjdbc5-spring 模塊,插入多條記錄到 4 個分片里,可以通過 navicat 連接 proxy 查看效果:
圖片
然后我們模擬在 myorder 邏輯數(shù)據(jù)庫中新增一條訂單記錄,執(zhí)行成功并且查詢頁正常的情況下,發(fā)現(xiàn)分片 ds0 中存儲了剛插入的那條數(shù)據(jù)。
圖片
筆者將 proxy 算法模塊也添加到了分庫分表實戰(zhàn)項目 shardingsphere-jdbc-demo 里,有興趣的同學,可以看看這個項目。
圖片
Github 地址:https://github.com/makemyownlife/shardingsphere-jdbc-demo