微服务重构是后端开发中最复杂的任务之一——代码量大、业务逻辑复杂、风险高。2026年我们用 AI 编程工具(Claude Code + Cursor)完成了投递系统从 PHP 到 Go 的微服务重构,效率比纯人工提升了 3 倍。今天把完整实践分享出来。
一、项目背景
投递系统是招聘平台的核心业务,负责职位投递、简历处理、状态流转、通知推送。原系统是 PHP 单体,随着业务增长遇到了瓶颈:
- 性能瓶颈:核心接口 QPS 到 800 就扛不住,P99 延迟 120ms
- 维护困难:PHP 代码耦合严重,改一个功能影响一片
- 人才断层:PHP 开发者越来越少,招人难
- 扩展性差:单体架构无法独立扩展,高峰期整个系统都慢
重构目标:
- 从 PHP 单体迁移到 Go 微服务
- 核心接口 QPS 从 800 提升到 5000+
- P99 延迟从 120ms 降到 15ms
- 保持业务逻辑不变,用户无感知
- 灰度上线,可回滚
二、AI 工具选型
重构过程中用了两个 AI 工具,各有分工:
| 工具 | 用途 | 优势场景 |
|---|---|---|
| Claude Code | 终端里的 AI 编程助手,复杂重构、批量修改、脚本编写 | 后端代码迁移、批量重构、命令行操作 |
| Cursor | AI 原生 IDE,多文件编辑、代码理解、UI 操作 | 多文件新功能开发、代码审查、界面操作 |
分工策略:
- 理解代码和规划:Cursor(看代码方便,多文件对比)
- 批量迁移和重构:Claude Code(终端操作快,批量处理强)
- 新功能开发:Cursor(Composer 多文件编辑)
- 测试和脚本:Claude Code(写测试、写迁移脚本)
- Bug 修复和调试:都可以,看个人习惯
两个工具配合使用,比只用一个效率高很多。
三、重构工作流
阶段1:理解和规划(AI 辅助)
第一步:AI 理解旧代码
用 Cursor 打开 PHP 项目,让 AI 分析代码结构:
AI 会分析整个项目,输出结构化的报告。这一步人工做可能要 2-3 天,AI 辅助 2-3 小时就够了。
第二步:AI 生成迁移方案
基于分析报告,让 AI 生成迁移方案:
AI 生成方案后,人工 review 和调整,确认后进入实施。
第三步:搭建项目骨架
用 Claude Code 搭建 Go 项目骨架:
Claude Code 会自动创建所有文件和目录,几分钟搭好项目骨架。
阶段2:逐模块迁移(AI 主力)
按模块逐个迁移,每个模块的流程:
第一步:AI 理解 PHP 代码
第二步:AI 生成 Go 代码
AI 生成代码后,人工 review:
- 业务逻辑是否一致
- 有没有边界条件没处理
- 错误处理是否正确
- 性能有没有问题(如 N+1 查询)
第三步:AI 生成测试
AI 写测试比人快很多,而且覆盖更全。但要注意 review 测试逻辑——AI 有时会写"放水"的测试(断言太松或 mock 不对)。
第四步:运行测试和修复
Claude Code 可以自动运行测试、分析失败原因、修复代码,循环直到测试通过。
阶段3:集成和验证(AI 辅助)
接口对比测试:
写一个对比测试工具,同时调用旧 PHP 接口和新 Go 接口,对比返回结果是否一致:
用这个工具跑几千个请求,确保新旧接口行为一致。不一致的地方 AI 辅助分析原因。
性能测试:
压测发现性能问题,AI 辅助分析和优化:
阶段4:灰度上线(AI 辅助)
灰度策略:
- 双写:写流量同时写 PHP 和 Go,读流量走 PHP
- 数据对比:对比两边的数据,确保一致
- 读流量灰度:按用户 ID 灰度,1% → 10% → 50% → 100%
- 监控:实时监控错误率、延迟、业务指标
- 回滚:有问题立即切回 PHP
AI 辅助写灰度脚本、监控面板、回滚脚本。
四、AI 在各环节的效率提升
| 环节 | 纯人工耗时 | AI 辅助耗时 | 提升 |
|---|---|---|---|
| 代码理解和分析 | 3天 | 3小时 | 8倍 |
| 迁移方案设计 | 2天 | 4小时 | 4倍 |
| 项目骨架搭建 | 1天 | 10分钟 | 48倍 |
| 单模块代码迁移 | 2天 | 4小时 | 4倍 |
| 单元测试编写 | 1天 | 2小时 | 4倍 |
| Bug 修复 | 4小时/个 | 30分钟/个 | 8倍 |
| 性能分析优化 | 2天 | 4小时 | 4倍 |
| 脚本工具编写 | 1天 | 2小时 | 4倍 |
| 整体 | 约30人天 | 约10人天 | 3倍 |
AI 辅助下,整个重构从 30 人天缩短到 10 人天,效率提升 3 倍。而且代码质量更高(测试更全、规范更统一)。
五、AI 辅助重构的最佳实践
1. 先理解再迁移
不要让 AI 直接"把 PHP 翻译成 Go",要先让 AI 理解业务逻辑,再基于理解生成 Go 代码。直接翻译会保留 PHP 的写法和坏味道,不是地道的 Go 代码。
2. 小步快跑,逐模块迁移
不要一次迁移整个系统,拆成小模块,每个模块:
- AI 理解旧代码
- AI 生成新代码
- 人工 review
- AI 生成测试
- 运行测试验证
- 集成测试
每个模块可独立验证、独立回滚,风险可控。
3. 人工 review 不能省
AI 生成的代码可能有问题:
- 业务逻辑理解错误
- 边界条件没处理
- 性能问题(N+1 查询、内存泄漏)
- 安全问题(SQL 注入、权限绕过)
- 测试"放水"(断言太松)
特别是业务逻辑,AI 可能理解偏差,必须人工仔细 review。
4. 测试是安全网
重构前先有测试(旧系统的集成测试),重构后跑测试,确保行为一致。AI 写测试快,但要 review 测试逻辑。
5. 用 AI 做重复劳动
AI 擅长重复劳动:
- 批量代码转换
- 写 CRUD 代码
- 写单元测试
- 写脚本工具
- 代码格式化和规范化
人专注于:
- 架构设计
- 业务逻辑理解
- 代码 review
- 性能优化
- 风险决策
6. 保留旧代码,灰度切换
重构期间新旧代码并存,灰度切换,不要一上来就删旧代码。有问题随时回滚。
六、踩坑经验
- AI 直接翻译代码:一开始让 AI"把 PHP 翻译成 Go",结果生成的代码充满 PHP 味道(如用数组代替结构体、全局变量),不是地道的 Go。要先让 AI 理解逻辑,再用 Go 的方式重写
- 业务逻辑理解偏差:AI 有时会误解业务逻辑(特别是隐含的规则),生成的代码看起来对但行为不对。一定要有对比测试,新旧接口结果对比
- 测试"放水":AI 写的测试有时断言太松(如只检查不报错,不检查返回值),测试通过但实际没验证逻辑。测试代码也要人工 review
- 一次迁移太多:一开始想一次迁移整个模块,结果代码量大、问题多、难以定位。拆成小函数/小接口,逐个迁移,逐个验证
- 忽略性能问题:AI 生成的代码功能对但性能差(如 N+1 查询、循环里查数据库)。要做性能测试,AI 辅助分析和优化
- 不保留旧代码:重构时急于删旧代码,结果新代码有问题想回滚都回滚不了。新旧代码并存,全量稳定运行一周后再删旧代码
- AI 生成的代码风格不统一:不同时间让 AI 生成代码,风格可能不一致(如错误处理方式、命名风格)。用 .cursorrules 统一规范,AI 生成的代码风格一致
- 过度依赖 AI:有人觉得"AI 生成的就一定对",不 review 直接合并,结果出 Bug。AI 是助手不是替代,代码必须人工 review
七、总结
AI 辅助微服务重构核心:
- 工具配合是关键:Claude Code(终端/批量/脚本)+ Cursor(多文件/理解/UI),各有分工,配合使用效率最高
- 先理解再迁移:不要直接翻译,先让 AI 理解业务逻辑,再用目标语言的地道方式重写
- 小步快跑是原则:逐模块/逐接口迁移,每个可独立验证、独立回滚,风险可控
- 人工 review 是底线:AI 生成的代码必须人工 review,特别是业务逻辑、性能、安全,AI 可能出错
- 测试是安全网:重构前有测试,重构后跑测试,对比新旧接口结果,确保行为一致
- AI 做重复劳动:批量转换、CRUD、测试、脚本让 AI 做,人专注架构、业务、review、优化
- 灰度上线是保障:新旧并存,双写验证,灰度切流量,有问题随时回滚
- 效率提升 3 倍是真实的:我们的实践证明,AI 辅助下重构效率提升 3 倍,代码质量更高(测试更全)
AI 编程工具不是要替代开发者,而是要把开发者从重复劳动中解放出来,专注于更有价值的架构设计和业务决策。微服务重构这种复杂任务,AI 能大幅提升效率,但人的判断力和经验仍然不可替代。AI 负责"做",人负责"决策"和"审查",这才是 AI 辅助研发的正确姿势。