admin 管理员组

文章数量: 1184232


2024年4月25日发(作者:微机原理与汇编语言考试题)

基于NodeJS的前端微服务自动化打包部

署方案

摘要:传统开发模式下,前端项目规模会随着需求的增多不断增大,最终形

成难以维护的巨石应用。微前端模式通过将多个独立微服务模块组合为整体应用

的形式解决了这一痛点,这个组合过程包括微服务模块的合并、打包及部署,涉

及到自动化注册、路由跳转、文件流处理等技术难点。本文介绍了一种基于

NodeJS完成微服务模块合并和注册应用打包部署的自动化流程。

关键词:NodeJS;微前端;微服务

Automatic packaging and deployment scheme of front-end micro-

services based on NodeJS

YUAN Yi-xin, WEI Shi-chen, LI Hua-lin

Abstract:Under the traditional development mode, the scale of

front-end projects will continue to increase with the increase of

demand, eventually forming a difficult to maintain Jushi application.

The micro front-end mode solves this pain point by combining multiple

independent micro service modules into an overall application. This

combination process includes the combination, packaging and deployment

of micro service modules, and involves technical difficulties such as

automatic registration, route jump, and file flow processing. This

paper introduces a scheme for automatic compilation of configuration

file merging and registration application code based on NodeJS.

Key words: NodeJS; micro-frontends; micro-service

一、引言

传统开发模式下,前端项目规模会随着需求的增多不断增大,最终形成难以

维护的巨石应用。微前端模式通过将多个独立微服务模块组合为整体应用的形式

解决了这一痛点,这个组合过程包括微服务模块的合并、打包及部署,涉及到自

动化注册、路由跳转、文件流处理等技术难点。此外,如何高效地完成多模块代

码合并、输出可视化日志并满足并发打包部署请求也是微服务模块组合方案中的

重要问题。

使用命令行发起微服务模块组合有一定的技术要求,一种较为人性化的做法

是提供web页面供非专业开发人员使用,用户选择所需的微服务模块进行组合,

发起打包订单,并通过查看工作日志了解打包进度。

二、关键技术与方法

2.1NodeJS

NodeJS是近年较为流行的开源的JavaScript运行平台,它使得JavaScript

可以脱离浏览器并使用于服务器端代码的编写。借助事件驱动、异步非阻塞I/O

等特性,对于数据密集型、I/O密集型的应用场景有着优秀的处理能力

[1]

2.2微服务

微服务是一种软件开发技术-面向服务的结构体系(SOA)架构样式的变体,

利用许多松散耦合且可独立部署的较小的组件或服务构造应用程序。相比于单体

应用,微服务单个应用程序本身不大,部署耗时短、影响范围小且风险低

[2]

,配

合Docker和Kubernetes可以很好地完成微服务到容器的部署及编排管理。

2.3Docker

Docker是一个开源的应用容器引擎,可以用于开发、交付和运行应用程序。

Docker使用沙箱机制,保证容器之间的隔离。同时它轻巧快速,容器性能开销低,

在高密度环境及中小型部署场景下有很好的表现。Docker技术成为微服务架构实

现的重要手段,它对微服务进行封装,实现了媒体平台与应用的解耦、能力和应

用的灵活部署与管理

[3]

三、方案设计

接收用户订单后,服务器端启动的自动化打包部署流程可以分解为四个阶段

——根据订单配置拉取相应的微服务模块代码、根据配置项合并相同版本下的微

服务模块代码、完成不同版本的微应用注册及打包部署,在每个阶段实时输出工

作日志。并且,由于存在多个用户同时发起打包请求的可能性,自动化打包方案

设计也需要支持并发请求。此外,在完成打包部署后,清除代码合并打包过程中

产生的临时文件,避免服务器端空间被大量占用。

在整个自动化打包部署流程中,通过NodeJS完成脚本文件调度及代码合并,

并输出可能产生的报错信息。下面将按顺序介绍各个阶段的设计要点:

1)整体调度:将订单配置以JSON文件保存,通过统一的入口发起子进程调

用各个操作文件,调度不同的代码合并步骤,并在打包部署完成后进行临时文件

清理。

2)拉取微服务模块:根据约定规则,在Git远程仓库存放微服务模块,在自

动化打包部署流程中根据配置文件拉取相应微服务模块源代码。

3)代码合并:对于同一版本微服务模块合并,读取微服务模块的配置改写相

应版本框架中的环境变量、依赖及代理文件,并将微服务模块代码迁移至框架模

块文件夹下,集成为一个前端代码完整的微应用。

4)微应用注册:对于完成代码合并的某个微应用,改写主应用框架中的微应

用注册代码,完成微应用注入。

5)打包部署:分别为所有微应用及主应用通过npm完成依赖下载及项目构建,

通过docker完成镜像打包推送。

四、方案实现

4.1整体调度

服务器端将用户发起的订单信息以JSON格式存储(如下图1所示),通过

订单id完成订单间隔离,以满足并发的打包请求,便于后续代码合并以及在改

写注册文件时进行调用。

图1 订单配置文件示例图

整个自动化打包部署工具以调度文件为主入口,利用

child_process模块创建子进程,调度合并步骤。启动入口文件后,按序异步调

用相应的文件,并实时将子进程内部输出的信息写入日志文件,整体流程如图2

所示。

图2 文件调度流程图

4.2拉取微服务模块

根据订单文件中的微服务模块以及对应的微应用框架版本需求,拉取Git远

程仓库中对应的代码以及主应用代码。

由于各个微服务模块的配置信息有所不同,需要在仓库存储模块配置信息,

便于在拉取模块后进行整合。模块配置信息包括依赖配置、.env环境变量配置、

代理配置和路由信息,示例如下图3所示:

图3 微服务模块配置文件示例图

4.3代码合并

该过程中需要读取微服务模块配置信息,依据框架版本对微服务模块进行区

分,合并版本一致的微服务模块代码。微服务模块中需要合并依赖信息、.env环

境变量以及代理配置,分别对应了

、.pment、.tion、.g及

文件,上述文件需要在合并写入后迁移到微应用框架中的指定位置,

并将微服务模块迁移到微应用框架中的模块文件夹中,整个流程如下图4所示。

图4 微服务模块代码合并流程图

4.4微应用注册

微应用注册需要在主应用的注册文件中添加微应用名称、入口及激活规则,

并将微应用的路由配置及Nginx代理配置信息写入主应用对应文件。

4.5打包及部署

此时微应用及主应用都已经完成前端代码的改写及迁移整合,可以直接进行

依赖下载及正式环境打包构建工作。待项目构建完毕,利用docker构建项目镜

像并打包推送至镜像仓库。

这个过程中控制台输出的日志信息量较为庞大,需要设定一个较大的缓冲池

容量,防止溢出。

4.6临时文件清理

完成项目打包部署推送后,需要删除订单文件夹及代码合并过程中产生的临

时文件,防止冗余的临时文件占用服务器端空间。

五、总结与展望

本文介绍了一种基于NodeJs的前端微服务自动化打包部署方案,实现了微

服务模块合并和注册应用打包部署的自动化流程。尽管上述方案重点概括了模块

整合集成及应用注册的流程,但在实际应用中,为合并好的应用拉取依赖并打包

构建是时间成本最高的步骤。在面对并发的请求时,消耗的时间会进一步增加。

如何提高拉取依赖及打包构建的效率、提高自动化流程的健壮性是未来完善该方

案的重要方向。

参考文献

[1]许会元,何利力.NodeJS的异步非阻塞I/O研究[J].工业控制计算

机,2015(3):127-129.

[2]唐爱盼.微服务质量保障体系建设[J].信息与电脑,2022,34(4):105-108.

[3]孙波.浅谈微服务架构、Docker和Kubernetes[J].现代电视技

术,2022(2):100-103.

作者简介:袁弈欣(1998- ),女,中国电建集团华东勘测设计研究院有限

公司,助理工程师,主要从事企业信息化工作、软件研发。


本文标签: 服务 模块 应用 打包