ShardingSphere 5.x 核心概念 速览

以下是 ShardingSphere 5.x 核心概念 速览,旨在帮助你深入理解其分布式数据库治理的架构设计:


一、核心定位

ShardingSphere 5.x 是 分布式数据库生态系统,提供数据分片、分布式事务、读写分离、数据加密、弹性伸缩等能力,包含两大核心组件:

  1. ShardingSphere-JDBC:轻量级 Java 框架,在应用层直接操作数据库(无中心化代理)。
  2. ShardingSphere-Proxy:透明化数据库代理,通过数据库协议提供服务(支持多语言)。

二、核心概念详解

1. 逻辑表 (Logic Table)
  • 定义:分布式场景下的虚拟表名,映射到多个物理表(如 t_order 逻辑表对应 t_order_0t_order_1 等物理表)。
  • SQL示例
    SELECT * FROM t_order WHERE user_id = 123; -- 逻辑表名
    
2. 真实表 (Actual Table)
  • 定义:物理数据库中真实存在的表(如 t_order_0t_order_1)。
  • 动态生成规则
    sharding:
      tables:
        t_order:
          actual-data-nodes: db_${0..1}.t_order_${0..1} 
          # 生成 db0.t_order_0, db0.t_order_1, db1.t_order_0, db1.t_order_1
    
3. 分片键 (Sharding Key)
  • 作用:用于分片的数据库字段(如 user_id)。
  • 关键点:SQL 中必须包含分片键以定位数据位置。
4. 分片算法 (Sharding Algorithm)
  • 类型

    算法类型描述配置示例
    精确分片基于 =, IN 等查询(如取模)standard: precise-algorithm-class
    范围分片基于 BETWEEN, >, < 等查询standard: range-algorithm-class
    复合分片多字段组合分片(如 user_id + order_date)complex: algorithm-class
    Hint分片强制指定路由(通过API干预)hint: algorithm-class
  • 自定义实现

    public class CustomShardingAlgorithm implements StandardShardingAlgorithm<String> {
        @Override
        public String doSharding(Collection<String> targets, PreciseShardingValue<String> shardingValue) {
            // 根据 shardingValue 计算目标表后缀
            return "t_order_" + shardingValue.getValue().hashCode() % 2;
        }
    }
    
5. 分片策略 (Sharding Strategy)
  • 组成
    • 分片键定义:指定参与分片的列。
    • 分片算法:绑定具体计算逻辑。
  • 配置模板
    sharding:
      tables:
        t_order:
          databaseStrategy:
            standard:
              shardingColumn: user_id
              shardingAlgorithmName: database_hash_mod
          tableStrategy:
            standard:
              shardingColumn: order_id
              shardingAlgorithmName: table_udf_hash
    
6. 绑定表 (Binding Table)
  • 场景:解决跨表 JOIN 的性能问题(如 t_ordert_order_item 按相同规则分片)。
  • 配置
    sharding:
      bindingTables:
        - t_order, t_order_item  # 绑定后跨表JOIN直接路由,避免笛卡尔积
    
7. 广播表 (Broadcast Table)
  • 用途:全局维度表(如 t_country),所有分片数据库存有全量数据。
  • SQL同步:更新操作在所有节点执行。
  • 配置
    sharding:
      broadcastTables: t_config, t_country
    

三、分布式事务

  • 支持模式
    • XA:强一致性(如 Atomikos、Narayana)
    • SAGA:最终一致性(通过补偿机制)
    • BASE:柔性事务(Seata AT模式)
  • 配置示例
    props:
      sharding-transaction-type: BASE  # 使用Seata AT模式
    

四、读写分离

  • 核心组件
    • 主库:处理写操作
    • 从库:处理读操作(支持负载均衡)
  • 配置示例
    masterSlave:
      name: ms_ds
      masterDataSourceName: master_ds
      slaveDataSourceNames: 
        - slave_ds_0
        - slave_ds_1
      loadBalancerName: round_robin  # 轮询负载均衡
    

五、可插拔架构

  • 扩展点
    扩展类型实现示例
    分片算法自定义 StandardShardingAlgorithm
    分布式主键Snowflake, UUID, 自定义生成器
    分布式事务集成 Seata, Narayana
    元数据持久化支持 ZooKeeper, ETCD, Nacos

六、DistSQL(分布式SQL)

  • 作用:通过 SQL 动态管理 ShardingSphere 配置(无需重启)。
  • 常用命令
    -- 创建分片规则
    CREATE SHARDING TABLE RULE t_order (
      DATANODES("db_${0..1}.t_order_${0..1}"),
      DATABASE_STRATEGY(TYPE="standard", SHARDING_COLUMN=user_id, SHARDING_ALGORITHM=database_mod),
      TABLE_STRATEGY(TYPE="standard", SHARDING_COLUMN=order_id, SHARDING_ALGORITHM=table_mod)
    );
    
    -- 查询运行中规则
    SHOW SHARDING TABLE RULES FROM schema_name;
    

七、弹性伸缩(Scaling)

  • 流程
    1. 全量数据迁移
    2. 增量数据同步(基于 Binlog)
    3. 一致性校验(使用 CRC32)
    4. 流量切换(自动切至新分片)
  • 特点:在线水平扩容,对业务透明。

八、数据加密

  • 流程
    1. 敏感字段加密存储(如 AES 加密手机号)
    2. 查询时自动解密
  • 配置
    encrypt:
      tables:
        t_user:
          columns:
            phone:
              cipherColumn: phone_cipher  # 密文字段
              encryptorName: aes_encryptor
      encryptors:
        aes_encryptor:
          type: AES
          props:
            aes-key-value: 123456abc
    

九、系统化架构图

+---------------------+
|    Application      |
+----------+----------+
           |
           |  JDBC/Proxy Protocol
           |
+----------v----------+
| ShardingSphere-Proxy|     +--------------+       +-----------+
| (Orchestration)     <---->| Config Center|<---->| ZooKeeper |
+----------+----------+     +--------------+       +-----------+
           |
           |  SQL Execution
           |
+----------v-------------------+
| ShardingSphere-JDBC (Embed) |
+----------+-------------------+
           |
           |  Database Protocol
           |
+----------v----------+
|   Physical Database | (分片1/分片2/读写分离)
+---------------------+

最佳实践建议

  1. 分片键设计
    • 选择高基数字段(如用户ID)
    • 避免热点数据(如按时间分片需加盐)
  2. 事务选择
    • 强一致性:金融场景 → XA
    • 高并发:电商订单 → BASE (Seata)
  3. 弹性伸缩
    • 预留分片空间(如初始分片数为未来2倍)
    • 避免频繁扩容(每次迁移有性能损耗)
  4. SQL兼容性
    • 避免分布式JOIN(优先用绑定表)
    • 分页查询需内存归并(深度分页避免LIMIT 100000,10

通过掌握以上核心概念,你可以灵活构建高性能、易扩展的分布式数据库架构。建议结合官方文档的https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/yaml-config/rules/sharding/进行实践验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值