惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
V2EX
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学
罗磊的独立博客
小众软件
小众软件
I
InfoQ
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hugging Face - Blog
Hugging Face - Blog
MyScale Blog
MyScale Blog
博客园 - 聂微东
Microsoft Security Blog
Microsoft Security Blog
H
Help Net Security
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
P
Proofpoint News Feed
博客园 - 司徒正美
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
Jina AI
Jina AI
N
Netflix TechBlog - Medium

程序员

V2EX 看到讨论"跨域"的帖子,那个她好像回来了 codex 今天真的是不稳定呀。 火山方舟 Coding Plan 慎买 刚问了大家 openclaw 和 hermes 在什么机器上面玩,求推荐一个机器 GPT-image-2 生成 AI 图片防伪有感 codex pro 5 小时限制已经严重缩水 逆天 Antigravity 动态 JSON 序列化对强类型语言很难吗? 自建了 GPT Coding Plan,遇到了定价问题,请教大家 大家都是在什么设备上玩 openclaw 以及 hermes 的呀? 软考还有一个月就考试了,你们学习了吗? 大伙用 AI 会考虑在 user scope 的 CLAUDE.md/AGENTS.md 里交代 AI 说中文吗 我发现程序员这个群体很大部分其实挺抠的 最近使用 cc 总会莫名其妙的返工, codex 不会 目前体验最好的远程 vibe 工具 想知道大佬们抓包遇到 ssl pinning 都是咋优雅的 解决的? 工业软件的大佬们是怎么 vibe coding 的 最近 chrome 是不是有 bug 啊,一搜索就卡住 分布式异步系统在 vibe coding 下的困境 PHP Native AOT 编译器,支持将 PHP 代码编译为可执行文件,运算性能提高 150 倍 没想到 2026 年,还要浪费大量时间在跨域问题上 DeepSeek V4 这周会出吗? 中转站正式试营 欢迎试用 不掺不假 小米 mimo 升级 v2.5,并且重置了额度 Jenkins, SCM 轮询完全不工作是啥问题啊 赛博斗蛐蛐, AI 模型的简单对比(白嫖版) 使用中转站要擦亮眼睛!不说别的,倍率计算 充值好乱。 买了火山的 Coding Plan 测试得出计费模式 给我的 AI 生成了简历和状态卡, 大家帮忙看下 Ta 能找到啥样的
8 年重构踩坑的领悟:渐进式改造
Mannnnning · 2026-06-09 · via 程序员

干了 8 年业务系统,最后只剩一句话:能不重写就不重写

8 年时间,做过订单结算、比价、实体匹配、主数据治理 4 个领域。

最近整理过往项目时发现一个规律:

我做过的几次大改造,跨度 5 年,没有一次是"推倒重来"成功 的——但全部"逐步替换"成功了

不是我胆小。是真的踩过坑。 最近带 mentee 时这个判断反复被问,所以想完整写一次。


1. 老订单系统从 .NET 迁到 Java

跨 2 年。 方式不是停掉老的、上线新的——是同时跑,新订单走新系统、老 订单仍走老系统,通过比对工具持续校验差异。

切流粒度很细。从 0.1% 灰度开始,最小灰度颗粒到具体业务 ID 维度,最终切完用了 14 个月。

期间老系统改了 3 次,新系统改了 7 次,两边互相对照修了 11 个"看起来对但不对"的 bug——这种 bug 单独跑任何一边 都看不出来。

2. 比价系统的 Redis 重构

跨 1 年。 原系统有个增量更新机制,因为时间窗口判断 bug 导致比价数据 偶尔晚更新 30 秒,凌晨流量小时不易发现。

我没有重写整个 Redis 层。只重写了"时间窗口判断"这一段 ——把它从老系统拆出来,做成独立模块,通过开关控制走新逻辑还 是旧逻辑。

灰度过程是常规节奏:1% → 10% → 30% → 50% → 100%, 每阶段保持 2-4 周观察。

总改动:老系统代码改了不到 200 行。新模块约 1500 行。 但是这 200 行让"凌晨偶发数据延迟"这个 5 年没解决的问题彻 底消失。

3. 实体匹配的 SOA 改造

跨 1.5 年。 原系统是单体,匹配规则散落在 4 个 service 里互相调用。

我没急着拆。先把 4 个 service 之间的调用关系画成图 (drawio,约 60 个节点)——然后把每个调用边一条一条剪 掉,改成事件驱动。

不是一次性切——是一次切一条。每剪一条边,跑 1 周回归,确认 指标无变化,再剪下一条。

剪了 23 条边用了 11 个月。期间老的同步调用代码一直没 删——新事件链路稳定 3 个月后才彻底清理。

4. 主数据治理整合

跨 1 年。 4 个团队的主数据库要合并成一个。常规做法是搞个"统一数据中 心",大家停 2 周迁移过去。

我们的做法:老系统全部保留,只在中间加一层"主数据视图层"。 A 团队看视图 V1,B 团队看视图 V2,但底层数据已经合并。 6 个月后,老库一个一个下线——因为没人在用了


这 4 件事的共同模式

不是"先想好架构再切一刀"。 是"先切一刀,看能不能切得动,切不动退回去"。

具体动作就 4 条:

  1. 把要改的东西从大块切成小块——小到一周能做完
  2. 新老并存——不是切完老的再上新的,是两边一起跑
  3. 比对工具先做——不能比对的改动等于不存在
  4. 回滚开关比上线更优先

什么时候不该用这套?

我也踩过一次。

某个项目我用同样套路想做"渐进迁移"。结果发现:

  • 新需求每周改一次,老系统跟新系统都得跟着改
  • 改一处,要在 2 个系统都改,工作量翻倍
  • 6 个月后老系统不仅没"自然死掉",反而变得更复杂

最后我们停了渐进迁移,直接停 2 周做切换——结果反而很顺利。

事后总结:当业务还在快速变化时,渐进迁移会拉长事故面。 渐进式只适合"业务相对稳定、需要保留长期可对照"的场景。


写在最后

带 mentee 时最常说的一句话是: "先不要想架构图。先想第一刀切在哪、切错了怎么退回去。"

很多技术决策不是"什么是对的",是"什么是可逆的"。 可逆的方案,允许你在错的时候不死;不可逆的方案,要求你一开始 就对——但谁能保证一开始就对呢?


(以上 4 个项目都做了脱敏处理。 如果你做过类似改造, 欢迎评论区聊聊你踩过的坑—— 我特别想知道你们行业里"渐进式不适用"的具体场景是什么。)