分庫分表後,測試人員如何面對多庫多表中數據

最近工作的重心是容量規劃,當系統數據量上來之後。對系統就需要使用分庫分表了,分庫分表選型的是 apache sharding jdbc,他是通過客戶端來對數據源進行分庫分表的。

1、遇到問題

但是在分庫分表之後,不管是開發還是測試,當遇到問題需要查詢數據庫的時候面對多個庫多個表那就比較痛苦了。

在這裏插入圖片描述
如何透明化分庫分表所帶來的影響,讓使用方儘量像使用一個數據庫一樣使用水平分片之後的數據庫集羣。我們需要解決這個問題。

我們在開發的時候使用了 ShardingSphere 的客戶端中間件,sharding-jdbc 來開發。當我們需要查詢數據的時候可以使用它裏面的另外一箇中間件,基於服務端的中間件 sharding-proxy。

2、sharding proxy

ShardingSphere-Proxy是ShardingSphere的第二個產品。 它定位爲透明化的數據庫代理端,提供封裝了數據庫二進制協議的服務端版本,用於完成對異構語言的支持。 目前先提供MySQL/PostgreSQL版本,它可以使用任何兼容MySQL/PostgreSQL協議的訪問客戶端(如:MySQL Command Client, MySQL Workbench, Navicat等)操作數據,對DBA更加友好。

  • 嚮應用程序完全透明,可直接當做MySQL/PostgreSQL使用。
  • 適用於任何兼容MySQL/PostgreSQL協議的的客戶端。
    在這裏插入圖片描述
~ ShardingSphere-JDBC ShardingSphere-Proxy ShardingSphere-Sidecar
數據庫 任意 MySQL/PostgreSQL MySQL/PostgreSQL
連接消耗數
異構語言 僅Java 任意 任意
性能 損耗低 損耗略高 損耗低
無中心化
靜態入口

ShardingSphere-Proxy的優勢在於對異構語言的支持,以及爲DBA和測試人員提供可操作入口。

3、安裝和配置

可以通過 官方下載路徑 下載最新的 sharding-proxy 目錄。
在這裏插入圖片描述
不過我們可以在本地從 github下載 sharding-sphere 項目.sharding-proxy 包含這個項目當中。在本地進行調試好了再把配置上文件上放置到 sharding proxy 裏面這樣就特別方便。因爲 sharding proxy 是基於 spring boot 的項目,它可以很方便的進行啓動。

3.1 sharding proxy 項目結構

下面就是 sharding proxy 的項目結構,其實和下載的啓動配置類似,只不過這個是以 spring boot 的形式啓動,而它是以 bat 或者 shell 文件啓動。

sharding-proxy
	--sharding-proxy-bootstrap
		--src
			--main
				--java
					--org.apache.shardingsphere.shardingproxy.Bootstrap // 啓動類
				--resources
					-conf
						--config-xxx.yaml // 配置分庫分表規則
						--server.yaml       // 配置服務器信息
				

3.2 分片配置

下面是分庫分表規則,這裏只配置了從庫,沒有配置主庫,因爲在分片庫裏面的 id 都是基於數據庫的自增生成的。當我們通過 navicat 進行修改數據的時候是通過 Id 修改的,所以當修改一個數據的時候其實是修改了很多數據。如果你的 ID 能夠保證全局唯一可以配置主從規則。

config-pay-engine.yml

schemaName: pay-engine

dataSources:
  pay_engine_0:
    url: jdbc:mysql://localhost:3306/pay_engine_0?characterEncoding=utf8&useSSL=false
    username: carl
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50
  pay_engine_1:
    url: jdbc:mysql://localhost:3306/pay_engine_1?characterEncoding=utf8&useSSL=false
    username: carl
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50

shardingRule:
  tables:
    tb_collect_pay_order:
      actualDataNodes: pay_engine_${0..1}.tb_collect_pay_order_${0..49}
      databaseStrategy:
        complex:
          shardingColumns: pay_order_no,request_no
          algorithmClassName: cn.carl.pay.engine.sharding.rule.CollectPayOrderModuloShardingDatabaseAlgorithm
      tableStrategy:
        complex:
          shardingColumns: pay_order_no,request_no
          algorithmClassName: cn.carl.pay.engine.sharding.rule.CollectPayOrderModuloShardingTableAlgorithm

sharding-proxy 的分庫分表規則可以 sharding-proxy 官網配置手冊。因爲它的分片規則 demo 只是使用了 hint 分片,所以如果你遇到其它分片算法的話還需要參考 sharding-jdbc 官網配置手冊

3.3 服務端配置

server.yml

authentication:
  users:
    root:
      password: root
    sharding:
      password: sharding
props:
  executor.size: 16
  sql.show: true

通過 sharding proxy 對分庫分表的數據源進行代理之後,DBA 或者 測試人員連接代理服務器只會看到一個庫一張表了。

服務端配置同樣要參考 sharding-proxy 官方配置手冊

3.4 本地啓動

本地啓動成功之後可以使用 navicat 連接服務器。

在這裏插入圖片描述
連接數據源發現只會存在一個庫一張表:

在這裏插入圖片描述

4、服務器啓動

其實服務器啓動和本地啓動類似,你可以把你本地啓動的 sharing-proxy 打包成 jar 文件然後通過 java -jar sharding-proxy.jar 啓動。

同時也可以使用 sharding-proxy 官方下載的壓縮包啓動,在 linux 上是以 shell 腳本啓動的。只需要把我們剛纔測試好的配置文件寫入到:

  • 下載ShardingSphere-Proxy的最新發行版。
  • 解壓縮後修改conf/server.yaml和以config-前綴開頭的文件,如:conf/config-xxx.yaml文件,進行分片規則、讀寫分離規則配置
  • Linux操作系統請運行bin/start.sh,Windows操作系統請運行bin/start.bat啓動ShardingSphere-Proxy。如需配置啓動端口、配置文件位置

如果後端連接PostgreSQL數據庫,不需要引入額外依賴。
如果後端連接MySQL數據庫,需要將mysql-connector-java-5.1.47.jar拷貝到 {shardingsphere-proxy}\lib目錄。
如果算法類需要自己實現,也需要把算法類打成 jar 包拷貝到 {shardingsphere-proxy}\lib目錄。

啓動服務

使用默認配置項

${shardingsphere-proxy}\bin\start.sh

配置端口

${shardingsphere-proxy}\bin\start.sh ${port}

引用文章:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章