方案1:逐步重启worker进程
具体实现: github.com/xuezier/egg…
问题:
- 无法优雅的解决当前
worker
进程正在处理的请求,以及一些延时的任务 - 无法控制流量,
master
进程任然会分配请求给当前杀死的进程
方案2: 针对SSR的依赖的js bundle
文件,添加版本
具体实现:依赖携程apollo
实现
验证delete require.cache:codesandbox.io/s/happy-pto…
问题:
- 是否存在内存占用过多的问题
- 如何保证新发布的版本在更改版本号之前生效
方案3:delete require.cache
具体实现:参考基于nodejs线上代码热部署原理与实现
问题:
- 内存管理的问题, 参考一行 delete require.cache 引发的内存泄漏血案
方案4:使用PM2进行管理
具体实现:
服务的启动和守护,不使用egg-scripts,改用PM2.
代码如下,来自egg官方:
// server.js
const egg = require('egg');
const workers = Number(process.argv[2] || require('os').cpus().length);
egg.startCluster({
workers,
baseDir: __dirname,
});
启动命令,改用pm2
pm2 start server.js
问题:
方案5:SLB(服务器负载均衡)
具体实现:
问题:
- 依赖nginx配置