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)
- 为便于画图和理解,上图为一个节点对应一个分片
- 实际情况, 每个节点也可存放多个分片
推荐阅读
- 深入浅出谈一下有关分布式消息技术(Kafka)
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- MySql数据库备份与恢复
- mysql|InnoDB数据页结构
- mysql中视图事务索引与权限管理
- MYSQL主从同步的实现
- 1.2序列通用操作
- MySQL数据库的基本操作
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统