写点什么

如何使用 Shardingsphere Proxy 分库分表

作者:Kevin_913
  • 2023-10-06
    广东
  • 本文字数:1588 字

    阅读完需:约 5 分钟

Apache Shardingsphere 是一个用来分表分库的插件,它提供两种集成方式,一种是在代码层面做集成,shardingsphere jdbc,一种是通过中间件的方式来集成,这个就是本文要讲解的内容,Shardingsphere proxy。

What's Shardingsphere proxy

Shardingsphere proxy 从字面上就可以理解,它是一个 proxy,在应用程序和数据库之间搭建了一个这样的中间件,这样对于应用程序来说分库分片的细节都是透明的,应用程序不需要引入任何 shardingsphere 的依赖,只需要将数据库的 url 换成 proxy 的连接,数据库的用户名/密码换成 proxy 里面设置的用户名/密码。

Why need Shardingsphere proxy

万物存在就会有它的价值,对于一个这样一个 proxy,它的存在就是简化应用程序的配置,让应用程序变的更简单。

Why still use Shardingsphere JDBC.

凡事有利有弊,Proxy 带来了方便,同样它引入了一个新的中间件,同样数据库的请求也通过这个中间件做了二次转发,当然也会损失一些性能,对于性能敏感的应用,不推荐用 proxy。

How to startup Shardingsphere proxy.

  • 傻瓜式运行二进制文件,不做说明。

  • 用 docker 来运行,docker run -it -e PORT=3308 -p13308:3308 --net fscrawler_default apache/shardingsphere-proxy,需要将 proxy attach 到了一个网络,这是因为在 proxy 里面的不支持用 IP 来设置 jdbc host,只能通过字符串来设置 jdbc host,所以需要将它 attach 到数据库的同一个网络,然后通过数据库的 server name 来设置 jdbc host,简而言之,要么使用 localhost,要么使用 postgres,不能使用127.0.0.1

How to configure Sharding proxy.

  • server.yaml

  • 设置如何运行 proxy,配置连接用户以及其他额外配置,示例:

authority:users:    - user: root@%    password: root    - user:      password: privilege:    type: ALL_PERMITTEDprops:    sql-show: true
复制代码
  • sharding-rules.yaml

  • 设置分片规则,以及连接的数据库信息,示例:

databaseName: order_db
dataSources:ds0: url: jdbc:postgresql://postgres:5432/ds0 username: password: connectionTimeoutMilliseconds: 30000 idleTimeoutMilliseconds: 60000 maxLifetimeMilliseconds: 1800000 maxPoolSize: 50 minPoolSize: 1rules:- !SHARDING tables: t_order: actualDataNodes: ds${0..1}.t_order${0..1} databaseStrategy: standard: shardingColumn: user_id shardingAlgorithmName: database_inline tableStrategy: standard: shardingColumn: order_id shardingAlgorithmName: t_order_inline keyGenerateStrategy: column: order_id keyGeneratorName: snowflake shardingAlgorithms: database_inline: type: INLINE props: algorithm-expression: ds${user_id % 2} t_order_inline: type: INLINE props: algorithm-expression: t_order${order_id % 2} keyGenerators: snowflake: type: SNOWFLAKE
复制代码
  • How to use it


  • 在代码里只需要修改 datasource 的配置为 proxy 的配置。

    spring.datasource.url=jdbc:postgresql://localhost:13308/order_db # `13308`为proxy的端口,`order_db`为databaseName    spring.datasource.username=kevin # username 为 server.yaml里面的配置。    spring.datasource.password=kevin # password 为 server.yaml里面的配置。
复制代码

Conclusion

对于有分库分片需求,对性能也没有极高的要求,可以使用 Shardingsphere Proxy,减少应用程序的依赖和配置,如果需要使用 Shardingsphere Proxy,建议将 proxy 跟数据库服务器置放到同一个服务器,最少也是在同一个网络里面,减少性能损失。


发布于: 刚刚阅读数: 8
用户头像

Kevin_913

关注

纸上得来终觉浅,绝知此事要躬行。 2019-02-25 加入

专注于代码和设计15+年。 主要涉及Java,Golang,云平台。

评论

发布
暂无评论
如何使用Shardingsphere Proxy分库分表_数据库_Kevin_913_InfoQ写作社区