引言

入职新公司,我们希望去写新系统,但是实际上你的工作往往是去维护一个遗留系统。那么这边文章就来分享一下如何重建一个遗留系统。

定义遗留系统

我们可以把一个已经存在的、难以维护或者扩展的系统统称为遗留系统。遗留系统往往有这些特征:

  • 老旧:项目代码写于很多年前,经历过几代人开发和维护。
  • 庞大:代码越多,Bug 也越多,维护越困难。
  • 继承而来:代码的创建者和维护者已经不是同一批人了。
  • 文档不完善:文档没有及时的更新,甚至是没有文档。

重建遗留系统难点

为什么说重建遗留系统是一件很难的事情?因为:

  • 害怕改变:项目复杂、缺少文档,谁也不想维护这种系统。写新需求或者改动老代码都害怕出现新的 Bug。
  • 缺少测试,或者连测试都很困难。
  • 过时的依赖:项目依赖于过时的第三方库,不敢升级。

实战

下定决心

首先要明白一点,重建遗留系统是一件很难的事情。你们是否下定决心去重建?克服恐惧和沮丧。

建立信心

  • 探索性重构:你对代码了解的越多,恐惧就越少。
  • 使用工具:
    • Git 版本管理
    • IDE 编辑器
    • 代码规范和代码检查工具
    • 其他同事:互相 review 代码

快速部署

新人能快速部署项目,也是一个重要的指标。我们可以使用 Docker 简化部署,持续更新部署文档。可以把部署步骤放在 README.md 中,方便大家了解。

日志系统

可在线方便快速的日志系统,你可以使用 ELK 自主搭建,或者使用云服务器平台提供的日志服务。

针对小型项目还可以使用 Sentry 等 SaaS 服务进行错误收集,接入基本上无门槛,非常的方便。

自动化部署

  • 如果你们使用的 GitHub 那就可以用 GitHub Actions 来自动化部署。
  • 如果使用的是 Gitlab,那就可以用 Gitlab CI 来自动化部署。
  • Jenkins 也是一个不错的自动化部署工具。

自动化测试

编写单元测试,配置 CI 来运行单元测试、集成测试。

系统监控

可以自己部署开源的 GrafanaPrometheus 监控系统,也可以使用 DataDog 提供的 SaaS 监控系统。

这样就可以监控系统的性能和状态。

有了日志和系统监控就算系统有 Bug 我们也能及时响应,更快的解决问题。

重搭架构

拆分系统:拆分成多个模块,每个模块都有自己的角色,每个模块都有自己的职责。

把一个大的系统拆分成很多小的系统,这个每个系统的代码量就会很小,这样就可以更好的维护和扩展。

最后

为什么项目最后会变成无法维护?

有时候我们为了快速实现某个需求,走了一些捷径,这种实现方案类似于贷款,到了某些时候我们必须偿还这些贷款,如果没有按时还款,这只会积累更多的贷款和利息,最终你需要支付的债务就会超过你的支付能力。我们把这称之为 code debt。