ShardingProxy分库分表实战及同类产品选型对比

一、ShardingProxy快速使用

ShardingProxy的功能同样是分库分表,但是它是一个独立部署的服务端,提供统一的数据库代理服务

注意,ShardingProxy目前只支持MySQL和PostgreSQL。并且,客户端连接ShardingProxy时,最好使用MySQL的JDBC客户端。下面我们来部署一个ShardingProxy服务。

1、ShardingProxy部署

【注意】ShardingSphere是用java写的,所以环境需要安装JDK!

ShardingProxy在windows和Linux上提供了一套统一的部署发布包。我们可以从ShardingSphere官网下载4.1.1版本的ShardingProxy发布包apache-shardingsphere-4.1.1-sharding-proxy-bin.tar.gz,解压到本地目录。

下载连接:https://archive.apache.org/dist/shardingsphere/

我们将下载后的zip包解压上传到linux服务器上,然后解压:

// yum install zip unzip
unzip apache-shardingsphere-4.1.1-sharding-proxy-bin-test.zip

// 重命名
mv ./apache-shardingsphere-4.1.1-sharding-proxy-bin ./sharding_proxy

在这里插入图片描述

解压完成之后,我们执行以下几个步骤来完成安装。

Step 1:
因为我们之前安装的mysql版本都是8.0.20,所以我们需要把MySQL的JDBC驱动包mysql-connector-java-8.0.20.jar手动复制到ShardingProxy的lib目录下。ShardingProxy默认只附带了PostgreSQL的JDBC驱动包,而不包含MySQL的JDBC驱动包。
在这里插入图片描述
注意,其实shardingproxy的lib包下是有一个自带的mysql驱动包的,我们上传完和自己版本复合的驱动包后,需要把自带的8.0.13的这个驱动包删除掉,否则后面启动proxy的时候会报错:

[root@localhost bin]# sh start.sh 3316
Starting the Sharding-Proxy ...
The port is 3316
The classpath is /usr/software/sharding_sphere/sharding_proxy/conf:.:..:/usr/software/sharding_sphere/sharding_proxy/lib/*:/usr/software/sharding_sphere/sharding_proxy/lib/*:/usr/software/sharding_sphere/sharding_proxy/ext-lib/*
Please check the STDOUT file: /usr/software/sharding_sphere/sharding_proxy/logs/stdout.log

Step 2:
我们修改conf目录下的config-sharding.yaml,这个配置文件就是shardingProxy关于分库分表部分的配置。整个配置和之前我们使用ShardingJDBC时的配置大致相同,我们在最下面按照自己的数据库环境增加以下配置:

schemaName: sharding_db

dataSources:
  m1:
    url: jdbc:mysql://192.168.131.171:3306/ShardingJdbcDemo?serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: 123456
    connectionTimeoutMilliseconds: 30000
    idleTimeoutMilliseconds: 60000
    maxLifetimeMilliseconds: 1800000
    maxPoolSize: 50

shardingRule:
  tables:
    course:
      actualDataNodes: m1.course_$->{1..2}
      tableStrategy:
        inline:
          shardingColumn: cid
          algorithmExpression: course_$->{cid%2+1}
      keyGenerator:
        type: SNOWFLAKE
        column: cid

在这里插入图片描述

这一段就是按照我们之前的application01-split-tables.properties文件中的规则配置的。可以看到,整个配置其实是大同小异的。

注意,shardingproxy中还要一个配置文件:server.yaml。里面有一些关于认证的信息,我们来看一下:

authentication:
  users:
    root:
      password: root
    sharding:
      password: sharding
      authorizedSchemas: sharding_db

props:
  max.connections.size.per.query: 1
  acceptor.size: 16  # The default value is available processors count * 2.
  executor.size: 16  # Infinite by default.
  proxy.frontend.flush.threshold: 128  # The default value is 128.
  # LOCAL: Proxy will run with LOCAL transaction.
  # XA: Proxy will run with XA transaction.
  # BASE: Proxy will run with B.A.S.E transaction.
  proxy.transaction.type: LOCAL
  proxy.opentracing.enabled: false
  proxy.hint.enabled: false
  query.with.cipher.column: true
  sql.show: false
  allow.range.query.with.inline.sharding: false

可以看到登录shardingproxy的用户名是root,密码是root。这个如果有需要,我们也可以自己去修改!之后连接客户端的时候的用户名密码,就要使用这个配置文件中的!

Step 3:
还一个小问题要注意,我们进入ShardingProxy的Lib目录,里面会有些jar包因为名字太长了,导致有些文件的后缀被截断了,我们要手动把他们的文件后缀给修改过来。
在这里插入图片描述
【注意】在linux下我没发现这个问题,所以可以忽略这一步。

Step 4:
最后,我们就可以启动ShardingProxy的服务了。启动脚本在bin目录下。其中,windows平台对应的脚本是start.bat,Linux平台对应的脚本是start.sh和stop.sh。
在这里插入图片描述

启动时,我们可以直接运行start.bat脚本,这时候,ShardingProxy默认占用的是3307端口。为了不跟我们之前搭建的多个MySQL服务端口冲突,我们定制下启动端口,改为3316端口。

sh start.sh 3317

在这里插入图片描述
启动后查看stdout.log这个文件:

[INFO ] 15:10:27.727 [main] ShardingSphere-metadata - Loading 1 logic tables' meta data.
[INFO ] 15:10:27.858 [main] ShardingSphere-metadata - Loading 7 tables' meta data.
[INFO ] 15:10:28.442 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0x88b9b306] REGISTERED
[INFO ] 15:10:28.449 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0x88b9b306] BIND: 0.0.0.0/0.0.0.0:3317
[INFO ] 15:10:28.452 [nioEventLoopGroup-2-1] i.n.handler.logging.LoggingHandler - [id: 0x88b9b306, L:/0.0.0.0:3317] ACTIVE

看到这样的信息就说明启动成功了。

2、ShardingProxy使用

这样,我们就可以像连接一个标准MySQL服务一样连接ShardingProxy了。

我们进入到任意一个mysql的docker容器中,执行如下命令进行连接:

root@10d0c721d326:/# mysql -uroot -p -h192.168.131.172 -P3317
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'172.17.0.4' (using password: YES)
root@10d0c721d326:/# mysql -uroot -p -h192.168.131.172 -P3317
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.20-Sharding-Proxy 4.1.0

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------+
| Database    |
+-------------+
| sharding_db |
+-------------+
1 row in set (0.02 sec)

mysql> use sharding_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+----------------------------+
| Tables_in_ShardingJdbcDemo |
+----------------------------+
| course                     |
| t_dict                     |
| t_user_1                   |
| t_user_2                   |
| t_ustatus_1                |
| t_ustatus_2                |
+----------------------------+
6 rows in set (0.02 sec)

mysql> select * from course;
+---------------------+----------------+---------+---------+
| cid                 | cname          | user_id | cstatus |
+---------------------+----------------+---------+---------+
|  202109211007481711 | shardingsphere |    1000 | 1       |
|  202109211007483972 | shardingsphere |    1001 | 1       |
|  202109211007484223 | shardingsphere |    1002 | 1       |
|  202109211007484494 | shardingsphere |    1003 | 1       |
|  202109211007484735 | shardingsphere |    1004 | 1       |
|  202109211007485046 | shardingsphere |    1005 | 1       |
|  202109211007485677 | shardingsphere |    1006 | 1       |
|  202109211007486008 | shardingsphere |    1007 | 1       |
|  202109211007486669 | shardingsphere |    1008 | 1       |
|  645951089950068736 | shardingsphere |    1000 | 1       |
|  645951090923147264 | shardingsphere |    1002 | 1       |
|  645951091007033344 | shardingsphere |    1004 | 1       |
|  645951091099308032 | shardingsphere |    1006 | 1       |
|  645951091187388416 | shardingsphere |    1008 | 1       |
| 2021092110074870210 | shardingsphere |    1009 | 1       |
|  202109211007481711 | shardingsphere |    1000 | 1       |
|  202109211007483972 | shardingsphere |    1001 | 1       |
|  202109211007484223 | shardingsphere |    1002 | 1       |
|  202109211007484494 | shardingsphere |    1003 | 1       |
|  202109211007484735 | shardingsphere |    1004 | 1       |
|  202109211007485046 | shardingsphere |    1005 | 1       |
|  202109211007485677 | shardingsphere |    1006 | 1       |
|  202109211007486008 | shardingsphere |    1007 | 1       |
|  202109211007486669 | shardingsphere |    1008 | 1       |
| 2021092110074870210 | shardingsphere |    1009 | 1       |
+---------------------+----------------+---------+---------+
25 rows in set (0.08 sec)

我们还可以使用Navicat进行连接:
在这里插入图片描述
可以看到,对于那些已经配置了分片策略的表,比如上面的course表,shardingproxy会自动根据真实表构建出一个逻辑表。而对于没有配置分片策略的表,依然展示真实表

这和MyCat非常像,此时我们就像在操作一个mysql服务一样,感受不到分库分表的存在。

之前在ShardingJDBC部分完成了的其他几种分库分表策略以及读写分离策略,可以验证了。

3、ShardingProxy的服务治理

从ShardingProxy的server.yaml中看到,ShardingProxy还支持非常多的服务治理功能。

在server.yaml配置文件中的orchestration部分属性就演示了如何将ShardingProxy注册到Zookeeper当中

orchestration:
  orchestration_ds:
    orchestrationType: registry_center,config_center,distributed_lock_manager
    instanceType: zookeeper
    serverLists: localhost:2181
    namespace: orchestration
    props:
      overwrite: false
      retryIntervalMilliseconds: 500
      timeToLiveSeconds: 60
      maxRetries: 3
      operationTimeoutMilliseconds: 500

比如我们要做shardingproxy的主从,那么这两个服务中的配置文件就应该一模一样。但是如果让我们自己来维护,可能会出现问题。所以我们就可以将配置文件统一的放到zookeeper中。

3.1 配置发布到zookeeper

我们配置好zk之后,启动zookeeper,然后进入到客户端中:
在这里插入图片描述
发现shardingproxy已经成功注册到zk了。
那我们看下这个注册的信息是什么:
在这里插入图片描述
可以看到,此时的配置信息已经被放到了zk中。那如果我再启动一台shardingproxy服务,并且配置的zk是同一台的话,就可以拉取到上面的配置信息了!


### 3.2 服务治理介绍 ShardingSphere在服务治理这一块主要有两个部分:

一方面是数据接入以及弹性伸缩。简单理解就是把MySQL或者其他数据源的数据快速迁移进ShardingSphere的分片库中。并且能够快速的对已有的ShardingShere分片库进行扩容以及减配。这一块由ShardingSphere-scaling产品来提供支持。只是这个功能在目前的4.1.1版本中,还处于Alpha测试阶段。

另一方面,ShardingSphere支持将复杂的分库分表配置上传到统一的注册中心中集中管理。目前支持的注册中心有Zookeeper和Etcd。而ShardingSphere也提供了SPI扩展接口,可以快速接入Nacos、Apollo等注册中心。在ShardingProxy的server.yaml中我们已经看到了这一部分的配置示例。

另外,ShardingSphere针对他的这些生态功能,提供了一个ShardingSphere-UI产品来提供页面支持。ShardingSphere-UI是针对整个ShardingSphere的一个简单有用的Web管理控制台。它用于帮助用户更简单的使用ShardingSphere的相关功能。目前提供注册中心管理、动态配置管理、数据库编排管理等功能。

4、Shardingproxy的其他功能

4.1 影子库

​这部分功能主要是用于进行压测的。通过给生产环境上的关键数据库表配置一个影子库,就可以将写往生产环境的数据全部转为写入影子库中,而影子库通常会配置成跟生产环境在同一个库,这样就可以在生产环境上直接进行压力测试,而不会影响生产环境的数据。

​在conf/config-shadow.yaml中有配置影子库的示例。其中最核心的就是下面的shadowRule这一部分。

#schemaName: sharding_db
#
#dataSources:
#  ds:
#    url: jdbc:postgresql://127.0.0.1:5432/demo_ds_0?serverTimezone=UTC&useSSL=false
#    username: postgres
#    password: postgres
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#  shadow_ds:
#    url: jdbc:postgresql://127.0.0.1:5432/demo_ds_1?serverTimezone=UTC&useSSL=false
#    username: postgres
#    password: postgres
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#
#shadowRule:
#  column: shadow
#  shadowMappings:
#    ds: shadow_ds
#
#
######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################
#
#schemaName: sharding_db
#
#dataSources:
#  ds:
#    url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
#    username: root
#    password:
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#  shadow_ds:
#    url: jdbc:mysql://127.0.0.1:3306/demo_ds_1?serverTimezone=UTC&useSSL=false
#    username: root
#    password:
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#
#shadowRule:
#  column: shadow
#  shadowMappings:
# 绑定shadow_ds为ds的影子库
#    ds: shadow_ds

4.2 数据加密

​在conf/config-encrypt.yaml中还演示了ShardingProxy的另一个功能,数据加密。默认集成了AES对称加密和MD5加密。还可以通过SPI机制自行扩展更多的加密算法。

######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################
#
#schemaName: encrypt_db
#
#dataSource:
#  url: jdbc:mysql://127.0.0.1:3306/demo_ds?serverTimezone=UTC&useSSL=false
#  username: root
#  password:
#  connectionTimeoutMilliseconds: 30000
#  idleTimeoutMilliseconds: 60000
#  maxLifetimeMilliseconds: 1800000
#  maxPoolSize: 50
#
#encryptRule:
#  encryptors:
#    encryptor_aes:
#      type: aes
#      props:
#        aes.key.value: 123456abc
#    encryptor_md5:
#      type: md5
#  tables:
#    t_encrypt:
#      columns:
#        user_id:
#          plainColumn: user_plain
#          cipherColumn: user_cipher
#          encryptor: encryptor_aes
#        order_id:
#          cipherColumn: order_cipher
#          encryptor: encryptor_md5

4.3 主从配置

######################################################################################################
#
# If you want to connect to MySQL, you should manually copy MySQL driver to lib directory.
#
######################################################################################################

#schemaName: master_slave_db
#
#dataSources:
#  master_ds:
#    url: jdbc:mysql://127.0.0.1:3306/demo_ds_master?serverTimezone=UTC&useSSL=false
#    username: root
#    password:
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#  slave_ds_0:
#    url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_0?serverTimezone=UTC&useSSL=false
#    username: root
#    password:
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#  slave_ds_1:
#    url: jdbc:mysql://127.0.0.1:3306/demo_ds_slave_1?serverTimezone=UTC&useSSL=false
#    username: root
#    password:
#    connectionTimeoutMilliseconds: 30000
#    idleTimeoutMilliseconds: 60000
#    maxLifetimeMilliseconds: 1800000
#    maxPoolSize: 50
#
#masterSlaveRule:
#  name: ms_ds
#  masterDataSourceName: master_ds
#  slaveDataSourceNames:
#    - slave_ds_0
#    - slave_ds_1

5、ShardingProxy的SPI扩展-主键生成

上一部分提到了ShardingSphere保留了大量的SPI扩展接口,对主流程封闭、对SPI开放。这在ShardingJDBC中还体现不出太大的作用,但是在ShardingProxy中就能极大程度提高服务的灵活性了。

在ShardingProxy中,只需要将自定义的扩展功能按照SPI机制的要求打成jar包,就可以直接把jar包放入lib目录,然后就配置使用了。

例如如果想要扩展一个新的主键生成策略,只需要自己开发一个主键生成类:

/**
 * 利用SPI, 自定义主键生成策略
 */
public class MyKeyGen implements ShardingKeyGenerator {

    private AtomicLong atomicLong = new AtomicLong(0);

    @Override
    public Comparable<?> generateKey() {
        // 可以使用redis生成, 这里为了简单, 我们使用当前时间
        LocalDateTime dateTime = LocalDateTime.now();
        String timeStamps = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(dateTime);
        // 为了保证再高并发的情况下不重复, 加一个原子类
        return Long.parseLong("" + timeStamps + atomicLong.incrementAndGet());
    }

    @Override
    public String getType() {
        return "MYKEY";
    }

    @Override
    public Properties getProperties() {
        return null;
    }

    @Override
    public void setProperties(Properties properties) {

    }
}

然后增加一个META-INF\services\org.apache.shardingsphere.spi.keygen.ShardingKeyGenerator文件:
在这里插入图片描述

com.jihu.sharding.spiextention.MyKeyGen

测试完成主键生成类可以正常工作之后,我们就需要将这个类打包成一个jar包。

我们需要将扩展类和这个SPI服务文件一起打成jar包,就可以直接放到ShardingProxy的lib目录下。
在这里插入图片描述
具体实现方式:

我们打开IDEA的project structure,再点击Artifacts,点击“+”,选择JAR==>Empty。
在这里插入图片描述
进入Artifacts界面后,name框中可以输入你的目的jar包的名称,也可以不动,系统默认是unnamed。后面的type选择框选择JAR;下面一行Output directory为jar包存放路径。在output Layout菜单下有加号,点击它,会出现几个下拉选项,选择File ,然后添加扩展类和SPI服务文件。如图所示
在这里插入图片描述
在这里插入图片描述

将文件添加完之后,找到idea第一行菜单的build,在下拉菜单中,选择Build Artfacts ,在弹出的框中选择build即可。
在这里插入图片描述
最后在输出路径下,找打的jar包。如下图
在这里插入图片描述
在这里插入图片描述
如果想改名可以直接rename。

然后我们可以直接将这个jar包放到ShardingProxy的lib目录下。
在这里插入图片描述

接下来就可以在config-sharding.yaml中以类似下面这种配置方式引入了。

【注意】配置之前注释掉zookeeper的配置。因为如果开启的话会从zk中读取配置,这样读取的是旧的配置。

shardingRule:
  tables:
    course:
      actualDataNodes: m1.course_$->{1..2}
      tableStrategy:
        inline:
          shardingColumn: cid
          algorithmExpression: course_$->{cid%2+1}
      keyGenerator:
#        type: SNOWFLAKE
        type: MYKEY # 自定义的主键生成器
        column: cid

然后我们可以重新启动ShardingProxy,试试我们自定义的主键生成器。

mysql> select * from course;
+---------------------+----------------+---------+---------+
| cid                 | cname          | user_id | cstatus |
+---------------------+----------------+---------+---------+
|  202109211007481711 | shardingsphere |    1000 | 1       |
|  202109211007483972 | shardingsphere |    1001 | 1       |
|  202109211007484223 | shardingsphere |    1002 | 1       |
|  202109211007484494 | shardingsphere |    1003 | 1       |
|  202109211007484735 | shardingsphere |    1004 | 1       |
|  202109211007485046 | shardingsphere |    1005 | 1       |
|  202109211007485677 | shardingsphere |    1006 | 1       |
|  202109211007486008 | shardingsphere |    1007 | 1       |
|  202109211007486669 | shardingsphere |    1008 | 1       |
|  645951089950068736 | shardingsphere |    1000 | 1       |
|  645951090923147264 | shardingsphere |    1002 | 1       |
|  645951091007033344 | shardingsphere |    1004 | 1       |
|  645951091099308032 | shardingsphere |    1006 | 1       |
|  645951091187388416 | shardingsphere |    1008 | 1       |
|  647705352472625152 | java2          |    1002 | 1       |
|  647707283668598784 | test-key-gen1  |    9991 | 1       |
| 2021092110074870210 | shardingsphere |    1009 | 1       |
|  202109211007481711 | shardingsphere |    1000 | 1       |
|  202109211007483972 | shardingsphere |    1001 | 1       |
|  202109211007484223 | shardingsphere |    1002 | 1       |
|  202109211007484494 | shardingsphere |    1003 | 1       |
|  202109211007484735 | shardingsphere |    1004 | 1       |
|  202109211007485046 | shardingsphere |    1005 | 1       |
|  202109211007485677 | shardingsphere |    1006 | 1       |
|  202109211007486008 | shardingsphere |    1007 | 1       |
|  202109211007486669 | shardingsphere |    1008 | 1       |
| 2021092110074870210 | shardingsphere |    1009 | 1       |
+---------------------+----------------+---------+---------+
27 rows in set (0.11 sec)
mysql> insert into course(cname,user_id,cstatus) values ('test-key-gen2',9992,'2');
Query OK, 1 row affected (0.01 sec)
mysql> insert into course(cname,user_id,cstatus) values ('test-key-gen3',9993,'3');
Query OK, 1 row affected (0.01 sec)

mysql> select * from course;
+---------------------+----------------+---------+---------+
| cid                 | cname          | user_id | cstatus |
+---------------------+----------------+---------+---------+
|          2009473292 | test-key-gen3  |    9993 | 3       |
|  202109211007481711 | shardingsphere |    1000 | 1       |
|  202109211007483972 | shardingsphere |    1001 | 1       |
|  202109211007484223 | shardingsphere |    1002 | 1       |
|  202109211007484494 | shardingsphere |    1003 | 1       |
|  202109211007484735 | shardingsphere |    1004 | 1       |
|  202109211007485046 | shardingsphere |    1005 | 1       |
|  202109211007485677 | shardingsphere |    1006 | 1       |
|  202109211007486008 | shardingsphere |    1007 | 1       |
|  202109211007486669 | shardingsphere |    1008 | 1       |
|  645951089950068736 | shardingsphere |    1000 | 1       |
|  645951090923147264 | shardingsphere |    1002 | 1       |
|  645951091007033344 | shardingsphere |    1004 | 1       |
|  645951091099308032 | shardingsphere |    1006 | 1       |
|  645951091187388416 | shardingsphere |    1008 | 1       |
|  647705352472625152 | java2          |    1002 | 1       |
|  647707283668598784 | test-key-gen1  |    9991 | 1       |
| 2021092110074870210 | shardingsphere |    1009 | 1       |
|          2007214401 | test-key-gen2  |    9992 | 2       |
|  202109211007481711 | shardingsphere |    1000 | 1       |
|  202109211007483972 | shardingsphere |    1001 | 1       |
|  202109211007484223 | shardingsphere |    1002 | 1       |
|  202109211007484494 | shardingsphere |    1003 | 1       |
|  202109211007484735 | shardingsphere |    1004 | 1       |
|  202109211007485046 | shardingsphere |    1005 | 1       |
|  202109211007485677 | shardingsphere |    1006 | 1       |
|  202109211007486008 | shardingsphere |    1007 | 1       |
|  202109211007486669 | shardingsphere |    1008 | 1       |
| 2021092110074870210 | shardingsphere |    1009 | 1       |
+---------------------+----------------+---------+---------+
29 rows in set (0.04 sec)

​从结果可以看到,插入的两条记录,自动生成的CID分别为2007214401 、2009473292 。这样我们就很快的完成了一个自定义的主键生成策略。

【注意】在真实项目中我们不会这样使用。因为将整个项目都打成jar包,包含了太多无用的东西。在真实使用中,我们需要使用maven打包插件,只将主键生成类和创建的SPI扩展点的文件一起打包。

6、ShardingProxy-UI界面使用

ShardingProxy-UI是一个springboot项目,下载之后运行即可。

1、下载

wget https://mirror.bit.edu.cn/apache/shardingsphere/shardingsphere-ui-4.1.0/apache-shardingsphere-4.1.0-shardingsphere-ui-bin.tar.gz

2、解压

tar -zxvf apache-shardingsphere-4.1.0-shardingsphere-ui-bin.tar.gz

3、修改名称

 mv apache-shardingsphere-4.1.0-shardingsphere-ui-bin ./sharding_proxy_ui

在这里插入图片描述
4、查看配置文件
在这里插入图片描述
application.properties文件:

server.port=8088

user.admin.username=admin
user.admin.password=admin

5、启动

sh start.sh

在这里插入图片描述
6、服务测试
启动后我们来访问:ip:8088
在这里插入图片描述
用户名密码默认都是admin。

在这里插入图片描述
可以添加注册中心:
在这里插入图片描述
还可以添加分配规则:
在这里插入图片描述

还在完善中,目前还不是很成熟…线上很少使用…

二、ShardingSphere总结

我们现在已经学完了ShardingSphere除了Sharding-SideCar以外的所有产品了,整个sharding + proxy的所有这些功能,本质上其实都只解决了一个问题,就是单机数据库容量的问题。在软件层面对硬件资源进行管理,从而便于对数据库的横向扩展

但是,我们也要意识到他带来的很多问题。

例如对业务的侵入大。业务系统写的SQL将不再是纯粹的能在服务器上运行的SQL了,对大量跨维度的JOIN、聚合、子查询、排序等功能在业务上很难进行验证。这必然会弱化数据库的功能

并且,使用ShardingSphere管理后,数据库之间变成了结合非常紧密的依赖关系,对整个集群的扩容也会带来相当大的难度。

另外,ShardingSphere这种方式实际上将原本由业务管理SQL的工作方式,转化成了由业务管理逻辑SQL,而运维管理实际SQL的混合工作模式,再加上一大堆服务的引入,整个服务运维的维护工作量以及工作难度也上升了非常多

当然,相信随着ShardingSphere后续版本的不断升级优化,这些问题都会得到不同程度的改善。

三、与其他相关产品的对比

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值