← 返回题目列表

分库分表如何平滑扩容和迁移?

高频 困难 第 16 / 27 题 更新于 2026/10/02
分库分表分布式面试题架构设计
学习 AI 实战项目

简化版

扩容要版本化路由并分阶段迁移:确定新拓扑、复制受影响数据、追平增量、校验、灰度切读写,最后清理旧副本;不能直接修改取模基数。

“分库分表如何平滑扩容和迁移?”不能只给组件名,还要交代路由范围、数据一致性、失败恢复和成本上限。

详细版

  1. 发布新路由版本。
  2. 按范围/虚拟节点生成迁移任务。
  3. 存量复制。
  4. CDC 追增量。
  5. 双读校验。
  6. 灰度切换。
  7. 延迟删除旧数据。

关键风险包括:迁移读写需携带路由 epoch;任务断点续传且幂等;热点槽需限速;旧数据保留回滚窗口后才能删除。

数字化说明:hash(id)%4 改成 %8 时约一半键会换位置;若使用 1024 个逻辑槽,只迁移其中 512 个槽即可明确控制任务和回滚。

完整版教学

一、定义与边界

扩容要版本化路由并分阶段迁移:确定新拓扑、复制受影响数据、追平增量、校验、灰度切读写,最后清理旧副本;不能直接修改取模基数。

对于“分库分表如何平滑扩容和迁移?”,先区分逻辑表、物理分片和路由层。分片提升单节点容量上限,却把原本由单库提供的 Join、事务、排序和约束变成跨节点协调问题。

记忆钩子:理解“分库分表如何平滑扩容和迁移?”时要记住,分库分表不是免费扩容;每减少一次单机压力,往往会增加一份路由、迁移或一致性成本。

二、核心执行流程

发布新路由版本,随后按范围/虚拟节点生成迁移任务。

1. 发布新路由版本
2. 按范围/虚拟节点生成迁移任务
3. 存量复制
4. CDC 追增量
5. 双读校验
6. 灰度切换
7. 延迟删除旧数据

在“分库分表如何平滑扩容和迁移?”的链路中,先“存量复制”,再“CDC 追增量”,最后“双读校验”。这些步骤描述的是正常执行顺序;异常恢复仍要依赖下一节的数据版本、幂等与对账机制。

三、数字算例

hash(id)%4 改成 %8 时约一半键会换位置;若使用 1024 个逻辑槽,只迁移其中 512 个槽即可明确控制任务和回滚。

该算例说明“分库分表如何平滑扩容和迁移?”必须估算扇出数、扫描行数、写放大、迁移速度或最慢分片,而不能只看单个物理库的平均耗时。

四、方案取舍

分库分表如何平滑扩容和迁移?的取舍维度低协调方案强能力方案代价
路由强制携带分片键允许索引或广播后者增加读放大
一致性单分片事务跨片协调或补偿延迟、锁与状态机增加
查询预计算或单片下推在线跨片归并受最慢分片和内存约束
变更固定逻辑槽在线迁移路由需双写、校验和回滚

选择“分库分表如何平滑扩容和迁移?”的实现时,应先把正确性红线写出来,再在延迟、吞吐和开发复杂度间取舍;不能用透明中间件掩盖物理事实。

五、故障边界与恢复

  • 迁移读写需携带路由 epoch。
  • 任务断点续传且幂等。
  • 热点槽需限速。
  • 旧数据保留回滚窗口后才能删除。

处理“分库分表如何平滑扩容和迁移?”涉及的任务和写入时,应携带幂等键、数据版本或路由 epoch。超时只代表结果未知,恢复逻辑必须先查状态再决定重试、补偿或回滚。

六、监控与验收

  • 监控 槽位进度。
  • 监控 CDC 延迟。
  • 监控 校验差异。
  • 监控 双读不一致。
  • 监控 迁移对线上延迟影响。

验收“分库分表如何平滑扩容和迁移?”时,既要验证正常数据,也要覆盖热点键、空结果、重复事件、单分片超时、迁移中断和版本回退,且对账差异必须为零或处在明确业务阈值内。

七、常见误区与追问

  • 误区:直接改分片数即可。 取模基数变化会使大量键重映射。
  • 误区:迁移期间停机最安全。 大规模系统应在线分批并可回滚。
  • 误区:双写不需要版本。 乱序重放必须靠版本保护。
  • 误区:抽样无差异即可删旧库。 需全量摘要或确定性分桶校验。
  • 误区:一致性哈希完全不迁数据。 仍会迁移相邻节点的一部分键。
  • 追问:一个分片不可用时能否返回其余结果? 只有业务明确接受部分结果并在响应中标记不完整时才可以,否则应失败而不是伪造全局正确。

八、加强记忆

回答“分库分表如何平滑扩容和迁移?”可按“怎么路由 → 单片做什么 → 跨片如何归并 → 失败如何恢复 → 数据怎样对账”展开。

最终要让面试官听到具体边界:哪些查询保持单片、哪些能力被限制、最坏会扇出多少节点,以及扩容或故障时如何保证数据不重不漏。