egg-cluster应用文件热更新方案

一、Node.js热更新背景介绍

egg-cluster应用启动后,是以daemon的方式运行,加载了相关模块到内存,这种方式提高了应用的性能,但是对于每次特性的变更,不重启服务是不能加载的,故调研文件热更新的方案。

二、方案

1、egg-cluster master通过reload worker进程更新,每次推送完新代码后,可以通过http的方式通知egg-cluster master进程平滑更新worker逻辑,这里需要运行一个node服务,用于接收每次变更的http请求,接收到请求后做master进程的重启。

2、egg-development插件、supervisor插件,这些都是检查文件更新通知worker进程重启,如果应用工程较大,包含文件多,每次变更后检查文件更新耗时大,适合开发环境使用,不适合在线上环境使用。

3、pm2 reload master进程方式更新,目前egg-cluster的方式启动了多个进程,master进程管理worker进程,worker进程处理逻辑,master保证高可用,pm2目前通过reload egg-cluster的master进程的方式做更新,和egg-cluster的官方建议有些违背,但pm2的reload本身也是柔性重启,影响可控。

4、前端增加nginx做代理,反向代理到2台以上egg-cluster应用,更新应用时,可以选用pm2,egg-scripts,egg-cluster等方式自动重启(每次重启时,中间有个时间间隔,保证至少有一台机器上的应用可用)各个机器的应用,也可以提供管理界面让研发同事手动重启来灰度服务,这时不影响整体的服务,有较高的可用性,整体架构图如下。

egg-cluster应用文件热更新方案_第1张图片

综上,

开发环境和测试环境建议选用2方案,开发方便。

线上环境,1,3,4都能达到效果。从整体健壮性、可维护稳定性考虑,4方案最优,1和3在目前阶段也是ok的。

你可能感兴趣的:(node.js)