Skip to content

毕业一年遇上项目迁移

江湖纷扰,世事难料。项目迁移犹如一场江湖中的大规模门派搬迁,牵一发而动全身。如何在动荡中保持秩序,如何在变局中谋求稳定,成为了每个开发者的必修功课。这篇文章,便是记录一次笔者实际经历的项目迁移的纪实,愿为各位侠士提供一条可行之路。

缘起:新武学的觉醒

背景:

  • 当前项目正处于技术迭代期,为了适应新业务需求,提升系统稳定性与扩展能力,以及后续的持续迭代开发与维护,需要对现有项目进行迁移。
  • 此次迁移涉及路由转发规则配置、应用、数据库等中间件的迁移、以及部署平台的全面升级,堪称一次“内外兼修”的武道升级。

技术定位:

  • 技术水平:中级
  • 适用于具有一定开发和运维经验的工程师,能够独立完成代码迁移、系统配置调整以及问题排查。

目标群体:

  • 开发人员:负责代码的迁移与功能实现。
  • 运维人员:负责平台环境的搭建、配置与优化。
  • 项目管理者:了解迁移过程中的资源分配与进度控制。

技术应用场景:

  • 新平台上线:将项目从现有Pass平台迁移至内部自研的新平台。
  • 集成部署升级:优化当前项目持续集成部署等方面的问题。

话不多说,下面进入正题。

筹谋慎思方成大计

江湖中,门派迁徙并非稀事,或因地盘不足,或因资源匮乏,或因盟友相邀。但无论缘由如何,这都不是一件可以草率行事的事情。项目迁移亦然,从开发环境到生产环境,从旧框架到新技术栈,每一步都需要精心筹备。因此项目迁移的第一步便是梳理现状,确定系统的根基稳固。

整体思路:

  • 评估与准备:分析当前项目技术栈、部署环境及依赖,明确迁移目标和风险。
  • 迁移规划:分阶段制定迁移计划,包括环境准备、数据迁移和代码调整。
  • 实施与验证:逐步完成代码迁移、环境部署与系统配置,确保迁移过程中的平稳过渡。
  • 测试与优化:通过功能测试、性能测试和安全测试,优化系统并解决潜在问题。
  • 正式上线:在充分验证后,将系统切换至新平台,并做好应急预案。

在当前项目【后端】中采使用SpringBoot + Maven这一套常规的开发技术栈。迁移过程中已经明确数据库MySQL和MQ不动。因此本次迁移不涉及到数据的迁移。同时也明确是停机迁移。不涉及到在线迁移中的过渡、流量、路由切换等问题。同时应用之间不涉及强依赖关系,因此问题便很明了,只需关注打通环境以及应用即可。

粮草未动,兵马先行

在迁移之前,务必先做好准备工作。

迁移前的准备工作

  • 准备工作一:新平台部署
  • 准备工作二:将应用导入新平台
  • 准备工作三:梳理需要迁移的配置和中间件【同时更改各个项目对应的配置项】
  • 准备工作四:配置域名和HTTP转发
  • 准备工作五:验证需要迁移的中间件等是否可用
  • 准备工作六:在新平台上尝试构建应用
  • 准备工作七:备份与兼容性检查【在未完全迁移前,做好以前代码、数据、环境等的备份工作。&& 在迁移失败或中断时,能够快速恢复到原环境。】

值得注意的是域名更换涉及到的各个场景的域名更改问题,具体如下表所示。整个准备过程仅针对笔者的场景,不同场景具体分析即可。

使用方描述
前端调用后端前端域名 + 相对路径【这里不用更改】
前端调用报表涉及到的domain修改
报表调用后端涉及到的domain和host修改
反向代理服务器更改反向代理路径【nginx】
pc调用前端验证新域名能否解析 && 是否配置host
外部系统调用后端...
......

试招:江湖验真

分阶段迁移

  • 优先迁移低风险服务:如无状态服务、非关键业务模块。
  • 逐步验证:完成一个模块迁移后,进行全面测试,再迁移下一个模块。

配置管理

  • 检查并调整配置文件(如 application.yml、nginx.conf)中涉及的 IP、域名、数据库连接等。

服务依赖迁移

  • 检查所有外部服务依赖,如第三方 API、消息队列、缓存服务、文件存储等是否需要调整。
  • 确保服务之间的网络连通性,尤其是在防火墙限制较多的环境下。

江湖险恶,步步为营

注意事项备注
DNS解析关于域名对应的DNS解析服务是否可用?
HTTPS 支持是否启用 HTTPS 保障数据传输安全?
防火墙规则细节防火墙规则是否包含 IP、白名单、黑名单、DDoS 防护?
Nginx 配置是否在 Nginx 层支持请求限流及缓存机制?Nginx 是否支持后端健康检查,确保请求只转发到可用的 POD?
更换yml配置是否存在写死在代码中的配置?通过更改yml配置无法替换到其他地方
基础服务和中间件验证确保迁移前后的中间件版本和基础服务参数一致
部分走捷径的报表如何更改部分报表配置的参数domain等需要更改
性能下降平台升级后性能不足,导致响应变慢或服务异常(网络、IO、CPU还是某些系统配置导致?)
依赖的服务故障依赖的服务等第三方接口无法联通

战后整军,方显宗师本色

用户反馈:

  • 邀请部分核心用户或团队对迁移后的系统进行试用,收集反馈并优化。

功能测试

  • 全量回归测试:覆盖主要业务场景,确保功能正常运行。
  • 性能测试:检查迁移后是否满足 SLA(服务级别协议)的性能要求。
  • 异常测试:模拟网络中断、服务宕机等异常情况,验证系统的容错能力。

监控与日志

  • 迁移期间监控:重点监控 CPU、内存、磁盘 IO、网络流量等指标。
  • 日志验证:确保日志采集和存储正常,日志格式一致。
  • 报警机制:设置关键指标报警,发现问题时及时通知。

迁移是修行,不是捷径

江湖传闻,迁移到新环境后便能立刻提升效率,获得新生。但这不过是“后江湖时代”的一场幻梦。真正的高手明白,迁移只是内功修炼的一部分,唯有不断学习新技术,积累实践经验,才能在江湖中站稳脚跟。

简单写了写迁移过程的大概方针,不涉及具体细节,也可能不具备普适性。但还是想记录一下。项目迁移是一次跨越式的修炼过程。项目迁移的关键,不在于迁徙本身的复杂,而在于迁徙过程中确保稳中求进。每一步都如同在棋盘上落子,一子错,满盘皆输。正所谓,“磨刀不误砍柴工”,唯有精心筹备,方可保江湖安定,武学不失。同时也须谨记“修炼内功,稳扎稳打”之道。迁移只是江湖中的一场试炼,而非终点。唯有踏实走好每一步,方能登顶笑傲江湖。

Released under the MIT License.