PeterPu
发布于 2025-09-05 / 51 阅读
0
0

ShardingSphere-Proxy 使用、配置、性能与事务解析

一、ShardingSphere-Proxy 简介

Apache ShardingSphere 是一款开源的 分布式数据库中间件,支持 分库分表、读写分离、分布式事务 等功能。其中 ShardingSphere-Proxy 是最常用的组件,特点是:

  • 数据库代理 的形式运行,用户只需通过标准的 MySQL/PostgreSQL 协议 连接 Proxy 即可。

  • 对应用程序透明,不需要修改业务代码。

  • 支持 多种分片算法(哈希、范围、时间分片、自定义)。

  • 支持 分布式事务(XA/BASE)

  • 内置 数据治理与监控能力


二、安装与启动

1. 下载

wget https://downloads.apache.org/shardingsphere/5.5.0/apache-shardingsphere-5.5.0-shardingsphere-proxy-bin.tar.gz
tar -zxvf apache-shardingsphere-5.5.0-shardingsphere-proxy-bin.tar.gz
cd apache-shardingsphere-5.5.0-shardingsphere-proxy-bin

2. 配置文件目录

  • conf/server.yaml :服务全局配置

  • conf/config-*.yaml :规则配置(分库分表/读写分离等)

3. 启动

bin/start.sh

默认监听 3307 端口(可修改)。


三、核心配置示例

假设我们有一个订单表 t_order,数据量非常大,需要按 月份分表

1. 数据源配置(server.yaml

mode:
  type: Standalone
  repository:
    type: JDBC

authority:
  users:
    - user: root@%
      password: root
  privilege:
    type: ALL_PERMITTED

2. 分片配置(conf/config-sharding.yaml

databaseName: sharding_db

dataSources:
  ds0:
    url: jdbc:mysql://127.0.0.1:3306/demo_ds_0?serverTimezone=UTC&useSSL=false
    username: root
    password: root

rules:
- !SHARDING
  tables:
    t_order:
      actualDataNodes: ds0.t_order_$->{202301..202312}
      tableStrategy:
        standard:
          shardingColumn: create_time
          shardingAlgorithmName: month_sharding

  shardingAlgorithms:
    month_sharding:
      type: CLASS_BASED
      props:
        strategy: STANDARD
        algorithmClassName: com.example.sharding.MonthShardingAlgorithm

📌 这里的 MonthShardingAlgorithm 可以自定义,例如根据 create_time 拆分到 t_order_202301t_order_202302 等。


四、性能与优化

1. 优势

  • 大表拆分:单表数据量过亿时,查询性能显著提升。

  • 读写分离:主库写,从库读,减轻主库压力。

  • 透明代理:应用侧无需改动 SQL。

2. 注意点

  • LIMIT 查询:在分表场景下,分页会被拆分到多个表执行,再合并,性能可能下降。
    ✅ 建议:分页时加上排序字段,并避免深度分页。

  • 全路由查询:如果 WHERE 条件没有分片键,会全表扫描,性能较差。
    ✅ 建议:SQL 必须带分片键。

  • 连接池优化:ShardingSphere-Proxy 内部使用 HikariCP,建议调整 maximumPoolSizeconnectionTimeout 等参数。


五、事务支持

ShardingSphere 提供三种事务模式:

  1. LOCAL
    默认模式,事务只在单数据源内生效。性能最佳。

  2. XA(强一致性)
    基于 两阶段提交协议,保证分布式事务一致性。
    缺点:性能下降,适合对一致性要求高的金融场景。

  3. BASE(最终一致性)
    异步事务,性能较高,但可能存在短暂不一致。
    适合互联网业务,如订单、日志。

配置示例(server.yaml):

transaction:
  defaultType: XA
  providerType: Atomikos

六、图解流程

  1. 客户端访问

  2. SQL 路由

    • Proxy 根据分片算法,解析 SQL → 路由到目标分表/分库。

    • 支持 SQL 改写(如 INSERT 自动路由到 t_order_202309)。

  3. 执行与结果归并

    • 并发执行多库多表 SQL。

    • 将结果在 Proxy 中归并后返回给应用。


七、总结

  • ShardingSphere-Proxy 适合快速落地分库分表方案,对应用透明。

  • 配置简单,但需要合理设计 分片键,否则容易导致全路由查询。

  • 在事务上,三种模式可灵活选择:

    • 性能优先 → LOCAL

    • 一致性优先 → XA

    • 高可用优先 → BASE

  • 对于 大表查询、分页、Join 等场景,要注意性能优化。


📌 建议实践:

  • 单表数据量超过 1000W 时考虑分表。

  • 按时间分片 是最常见方案(如订单、日志)。

  • 事务模式根据业务选择,不要盲目使用 XA。


评论