背景
我负责的系统,有三个全栈项目,简称A、B、C,都包含 node 层,全是用全栈框架写的。这种架构大概是 18、19 年左右 serverless 爆火的下的产物,拥有弹性伸缩,快速发布等优势,大大减少了服务器的成本。随着业务的迭代,项目越来越大,代码越来越多,出现了很多问题,如下:
-
打包时间长。使用 webpack 打包分析工具,包体达到了 33 MB,其中包含了一个富文本包、Lodash、组件库等。
-
前端框架老。在 2023 年停止维护之后,全面进入了 Vue3 时代。
-
监控运维复杂。 三个 server,三组监控,三条流水线,部署运维麻烦。 中间的 node 层主要做了转发的工作,查问题还多一层。
-
server 冗余。 完全可以合并,只需一个 server 即可,修改路由即可,除权限、鉴权、登陆等需额外注意。
目标
于是目标是这样的:
-
前后端拆开,前端页面用 Vue3 改写,纯静态发布。
-
只保留一个server。
简单的进行了一些 QA
-
时间、人力层面上
a. 专项中,如何抽出人力去做架构升级?分摊部分需求出去,挤出时间去做架构升级。
b. 整个升级的时间计划与节奏?跟随整体优化节奏,先跑通一个基座的优化、再全面铺开。
-
技术层面上
a. 如何转换 Vue2+ TS 到 Vue 3 ;尝试 vue-cli 和 vue-codemod 等工具。没有工具全手动迁移可能要疯。
b. 如何去除现在的全栈框架,即如何用新的 server 去实现封装好的只需配置的 SSO、UAC 等能力。现在的 node 框架很多,选哪个能更好地接入这些能力。
c. 如何把现有的三个 server 合并成一个。对 router 、触发器的改造、如何优化调用多个 thrift 服务,如何优化 service 层,希望实现多个 thrift 包信息可配置。
-
风险层面
a. 三个系统,几十个页面如何验证的没问题。先从迭代较少系统试点,观测两周无问题,继续进行;自测是否能否把控,是否需要 QA 资源进行支持。
b. 如何在需求迭代的同时,进行架构升级,新老如何兼容。这部分其实是比较难的,在新架构未上线前,意味着依然还要用老架构开发,意味着需要迁移的东西还在增加,有一种开发两次的感觉。
总结
本质上其实还是在做去 node 化的事情,这是近年来的趋势,但完全去除 server 意味着后端需要用 java 重写我们 node 已有的东西,还需改造 thrift 接口,当然thrift 可以使用网关来转换,但涉及推动后端配合修改,推动对外合作,是难中之难。 我们当然希望最终只有几个纯静态的服务,最终如果还有一个 server 也还能接受吧。
下期将继续更新,针对上面的一些 Q&A,做了哪些动作,实现效果如何,大型纪录片架构升级持续播出。