MySQL通用分布式系统架构方案(无限水平拆分)

案例二: MySQL通用分布式系统架构方案(无限水平拆分) 系统架构图 MySQL通用分布式系统架构方案(无限水平拆分)
文章图片
001.jpg 关键点:

  • 中间件:连接中间件,主要负责数据路由,一致性控制
  • Global zone 非拆分节点:存放全局数据
  • Sharding zone拆分节点:存放拆分数据
  • Sharding share zone拆分冗余节点:冗余一份全量数据
  • 冗余节点数据复制原理参考:
    • 由中间件改写为XA事务,分片节点提交成功后,将DML放消息队列
    • Sharding share zone 异步从消息队列中复制数据
  • 各节点都1个以上的MySQL实例组成高可用方案,可以用consul配合中间件来完成failover
  • 中间件通常在DB层面实现, 更简单的也可以直接APP层面实现
无限水平拆分原理图 MySQL通用分布式系统架构方案(无限水平拆分)
文章图片
002.jpg 简单说明
  • 基础拆分4个分片
    • 将拆分key按4096进行hash,得到hash_value
    • sloter将hash_value进一步拆分为4个分片,分别为 solt_{0,1,2,3}, 如图所示
    • 假设原表名为user, 拆分后变为user_slot_{0,1,2,3}
  • 二次拆分为8个分片
    • 将每个solt再拆分为两个分片,如:slot_0 [0,1024)=>slot_0_0 [0,512), slot_0_1 [512,1024)
    • 得到solt_0_{0,1},对应表名user_slot_0_{0,1},以此类推
    • 拆分后的数据迁移步骤非常简单:
      • copy user_slot_0 user_slot_0_1 where hash_value in (slot_0_1)
      • rename user_slot_0 user_slot_0_0
      • delete from user_slot_0_0 where hash_value in(slot_0_1)
  • 为便于画图和理解,上图为一个节点对应一个分片
  • 实际情况, 每个节点也可存放多个分片

    推荐阅读