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

案例二: MySQL通用分布式系统架构方案(无限水平拆分)
系统架构图
001.jpg
关键点:
  • 中间件:连接中间件,主要负责数据路由,一致性控制
  • Global zone 非拆分节点:存放全局数据
  • Sharding zone拆分节点:存放拆分数据
  • Sharding share zone拆分冗余节点:冗余一份全量数据
  • 冗余节点数据复制原理参考:
    • 由中间件改写为XA事务,分片节点提交成功后,将DML放消息队列
    • Sharding share zone 异步从消息队列中复制数据
  • 各节点都1个以上的MySQL实例组成高可用方案,可以用consul配合中间件来完成failover
  • 中间件通常在DB层面实现, 更简单的也可以直接APP层面实现
无限水平拆分原理图
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)
  • 为便于画图和理解,上图为一个节点对应一个分片
  • 实际情况, 每个节点也可存放多个分片
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。