一、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应用