跳到主要内容
约 4 分钟2 张卡

架构迁移

架构迁移需要维持新旧系统的契约兼容。本文负责兼容清单、数据切换和退出条件。这些内容用于资深后端岗位的项目追问。

1. 面试核心​

先记住这几条,再读正文
  • 兼容阶段。 扩展、迁移、收缩三个阶段维持新旧版本兼容。卡 · 综合题
  • 迁移进度。 迁移状态记录批次进度、校验结果和回退边界。
  • 并发写入。 回填与增量写入需共享顺序依据,防止旧值覆盖新值。卡 · 回填与增量写入
  • 旧路径退出。 旧消费者归零、数据校验完成后才能收缩旧路径。

2. 兼容面​

兼容清单覆盖结构和行为。字段名保持不变时,金额舍入改变也会影响调用方。

兼容面核验内容
API请求、响应、错误码、认证和默认值
事件schema、顺序和投递语义
数据表结构、索引和读写格式
运行配置、权限、告警和审计字段
消费者SDK、批处理、报表和运维工具

每项登记所有者、消费者和兼容期限。消费者不清楚时,先补访问日志或登记机制。

3. 扩展、迁移、收缩​

  1. 扩展:增加新字段或接口,保留旧读写能力。
  2. 迁移:回填数据,逐批切换消费者。
  3. 收缩:确认旧路径停用,再删除兼容逻辑。

重命名列时,可以先新增目标列。过渡代码兼容两种结构,并明确权威写入方。回填完成后切换读取,最后删除旧列。直接改名会使滚动发布中的旧实例报错。

跨系统同步需处理部分失败。Transactional Outbox 与 CDC负责可靠事件与增量同步机制。

4. 迁移状态​

迁移以租户、分区或业务流程为单位记录状态。

待迁移 → 回填中 → 增量追平 → 影子验证 → 灰度 → 已切换 → 已关闭回退

状态转换需幂等,并保存检查点。记录还需包含数据范围、校验结果和操作者。中断后从已确认位置恢复。

批次大小取决于故障范围和恢复耗时。低风险批次通过后,再覆盖高价值对象。每批结束后保留明确的观察窗口。

5. 灰度规则​

稳定分组使同一对象持续进入选定路径。具体分桶和指标比较见灰度发布。

迁移计划还需将路由组与数据状态对应起来。数据尚未追平的租户继续使用旧路径。每次切换记录负责人、检查点和回退位置。

6. 影子流量与双读​

双读由旧路径返回结果,新路径用于对照。比较器过滤随机 ID、时间戳等可接受差异。金额、权限和状态差异按业务规则判断。

影子请求只执行无副作用计算。它们使用独立标识,并计入下游容量。写入并发与事务语义需用真实小流量验证。

7. 回滚与向前修复​

回滚恢复旧路径,向前修复处理不可逆变化。上线前分别核验:

  • 旧代码能够读取新数据。
  • 已发送事件有明确的处理方。
  • 在途流程有稳定的版本归属。
  • 切回后仍能阻止重复扣款或通知。

数据已经不可逆转换时,用开关关闭风险路径。随后通过兼容读取、对账或补偿修复结果。回滚阈值、权限和耗时都应提前演练。

8. 退出条件​

迁移退出以清单验收:

  • 全部目标对象进入新路径。
  • 技术与业务指标达到预设目标。
  • 回填完成,数据差异有明确处理结果。
  • 旧接口、字段和事件的消费者归零。
  • 文档、告警和运行责任完成交接。
  • 回退窗口关闭,旧资源与临时开关完成删除。

每项指定负责人和证据。观察期需覆盖低频批处理与报表周期。删除旧路径时,先关闭入口并观察,再删除存储。

9. 迁移复盘​

复盘比较迁移前后的延迟、成本和故障范围。也要检查发布速度是否达到原定目标。目标未达成时,重新核验假设和实施边界。

兼容层与同步任务有明确的保留期限。关闭项目时核对清理结果,避免长期双轨维护。

10. 回填与增量写入​

回填和在线更新会竞争同一条记录。例如回填先读到余额 100,在线请求随后改为 120。若回填最后无条件写入,新库会退回 100。

迁移方案需建立快照与变更日志的连续位置。先保存可恢复的日志位置,再按工具语义读取快照。回填期间持续保留增量,随后按顺序追平。写入端也可按源端行版本拒绝过期覆盖。

切换前核对日志延迟和业务字段。行数相同仍需检查金额、状态等业务不变量。验证范围应覆盖回填期间的更新与删除。

11 · 面试题卡片​

11.1 一个核心接口怎样做到无停机迁移并保留回退能力​

出现公司:阿里巴巴

题型:综合题

考察重点

  • 理解API、事件、数据和行为兼容。
  • 理解分批状态、影子验证和灰度阈值。
  • 理解数据回退、向前修复与退出条件。

相关内容:兼容面至迁移复盘。

参考回答

无停机迁移依靠兼容扩展、分批切换和延后收缩。

先列出 API、数据和事件消费者。每批保存回填进度与增量位置。灰度前核对数据,再按稳定对象分组放量。

回退方案同时覆盖路由、旧代码读新数据和在途流程。不可逆变化使用向前修复。指标稳定、旧消费者归零后关闭回退窗口。最后删除旧路径并核验迁移目标。

11.2 回填期间发生在线更新,怎样避免旧值覆盖新值?​

出现公司:暂无已核验的公开来源(本站自测)

考察重点:快照位置、增量顺序与数据校验。

相关内容:回填与增量写入。

参考回答

需要将快照和增量日志衔接到同一顺序。

回填先恢复基线,再按源端顺序追平变更。源端行版本也可用于拒绝过期覆盖。

切换依据包括日志追平和业务字段对账。仅比较行数会漏掉金额更新与状态差异。

12. 参考资料​