当前位置: 首页 > news >正文

遗留系统数据迁移实战(十一):迁移进度表和异步 Run 接口设计

为什么同步 run 接口不够用

迁移初期,一个 run 接口直接完成:

dry-run -> execute -> validate

小客户没问题。但大客户迁移可能跑几十分钟甚至几个小时。

同步 HTTP 请求会遇到:

  • 网关超时
  • 浏览器超时
  • 调用方不知道后台是否还在跑
  • 多人测试时难以判断进度
  • 失败后不知道停在哪个阶段

所以需要异步化。

异步 run 的基本思路

接口调用后不等待迁移完成,而是立即返回:

{"progressId":"xxx"}

后台继续执行迁移。

调用方通过查询进度接口获取:

当前阶段 总进度 阶段进度 已处理数量 总数量 是否完成 是否失败 失败原因

进度表为什么要精简

进度表不是业务表,不应该设计得太复杂。

字段够用即可,例如:

id business_account root_dept_code task_type stage status processed_count total_count progress_percent message error_message start_time update_time finish_time

核心是回答:

谁在跑? 跑什么? 跑到哪一步? 完成多少? 是否失败?

分阶段统计比总进度更靠谱

实时、冻结、告警不是一个业务量级。

如果简单用总数统计,可能出现:

实时很快完成 冻结跑很久 告警数据很少

用户看到总进度可能不直观。

更合理的是按阶段统计:

REALTIME_MIG FREEZE_MIG ALARM_MIG TARGET_WRITE VALIDATE

每个阶段有自己的:

processed_count / total_count / percent

WalkBy 怎么统计

WalkBy 数据结构更多,但数据量通常没有冻结那么夸张。

可以按表统计:

rm_record rm_record_hi rm_task rm_plan rm_book rm_pub_record relation tables

或者更简单地按阶段:

WALKBY_DRY_RUN WALKBY_EXECUTE WALKBY_VALIDATE

如果业务只关心“是否还在跑”,阶段级别就够用。

进度更新失败不能影响迁移

这是一个重要原则。

进度表是辅助能力,不能因为更新进度失败导致主迁移失败。

所以进度更新应该:

失败只打 warn 日志 不抛出阻断主流程

否则就会出现很尴尬的情况:真实数据已经迁完,但因为进度表写失败导致接口失败。

日志和进度表的关系

进度表给前端或调用方看。

日志给研发排查问题。

两者互补:

进度表:用户知道跑到哪 日志:研发知道每一步细节

不要试图把所有日志都塞进进度表,否则表会变得很重。

断点续跑和进度表

进度表不是天然的断点续跑机制。

断点续跑应该依赖业务数据状态,例如:

中间表已经写到哪个表号 目标表已经写入多少 唯一键幂等能否覆盖

进度表只能辅助展示和判断,不应该成为唯一断点依据。

总结

异步 run 接口解决的是调用体验和可观测性问题。

它的核心设计是:

接口快速返回 progressId 后台执行迁移 进度表记录阶段和数量 日志记录详细链路 进度失败不影响主流程

对生产迁移工具来说,这比让调用方一直等 HTTP 响应可靠得多。

http://www.jsqmd.com/news/1384417/

相关文章:

  • 2026成都省钱装修公司哪家好?盘点高性价比正规品牌及签约避坑指南,附梧桐栖装饰服务解读 - U渠道
  • 2026玻璃钢商场美陈厂家选型及服务指南 - 曲阳嘉华园林
  • 把手机屏幕“搬“到电脑上,这款开源工具让跨屏协作零门槛
  • 机器人叠衣服背后的技术挑战:从柔性物体操作到具身智能
  • 做抖音小店副业总遇铺货报错?抖掌柜助力小白搞定全平台铺货难题 - 抖掌柜一键下单
  • 罗湖区翠竹城小散工程设计报备许可证办理指南
  • AI智能体实战指南:从零构建自动化编码助手
  • MCP 2026-07-28 版本变更详解:无状态核心、MRTR、缓存与迁移指南
  • 孝感哪家专业团队运营汇慧星链广告投放 - GrowthUME
  • Kubernetes Master Node 组件深度详解
  • HarmonyOS 7.0 / API 26 3DGS 光照一致性检查:采集环境变化为什么会拖垮重建质量
  • 2026杭州千万级豪宅新盘:一江两岸奥体低密 终极置业保值指南 - 匠言榜单
  • 小白企业必看:2026年3A信用认证有效期多久?线上不折腾申报攻略! - 实用干货补给站
  • Zotero PDF Translate:如何让外文文献阅读不再成为学术研究的障碍?
  • 嗯,腾讯云个人小站Docker镜像下载功能已下线,压力给到阿里云镜像站
  • 寒地专网通信工程实战:东北矿区、林区 DMR 数字对讲组网落地与抗低温优化
  • 从零构建大模型管控系统:Harness设计模式与Python实战
  • AI in ALM:人工智能如何提升应用生命周期管理
  • 构建具备长期记忆的AI助手:Memori开源项目部署与应用指南
  • PyTorch中ones_like与zeros_like函数:高效创建形状匹配张量的核心技术
  • 5分钟掌握:为MusicBee播放器解锁网易云音乐海量同步歌词库
  • 3分钟从视频中智能提取PPT:告别手动截图的效率革命
  • Python微博舆情分析系统:从爬虫到情感分析实战
  • 别学碎片化网课!i3D 智能三维完整体系教学,课程 + 认证 + 赛事一站式培养 - 武汉学历升学规划
  • 2026年新消息:咸宁毛坯房装修公司深度剖析,选择友巢装饰的三大核心逻辑 - 装企精灵GEO
  • Fantoccini高并发优化:连接池与任务队列实战指南
  • Python爬虫实战:抓取上交所问询函并关联股价数据
  • 人大金仓数据库开发管理工具核心功能与实战技巧解析
  • YOLO 涨点改进|全网独家复现红外灰度小目标增强 强化绝缘子热成像识别、电力红外巡检单类别检测全场景涨点
  • 告别繁琐安装:3分钟搞定Zotero插件市场的终极指南