【发布时间】:2023-03-14 19:16:01
【问题描述】:
防止 Node.js PRODUCTION 服务器因未知且未处理的异常而崩溃的最佳做法是什么?
【问题讨论】:
-
最佳实践是 DOMAIN with Cluster。见this问题
标签: node.js
防止 Node.js PRODUCTION 服务器因未知且未处理的异常而崩溃的最佳做法是什么?
【问题讨论】:
标签: node.js
如今,“快速失败”的心态风靡一时。你不能阻止它崩溃……你让它崩溃,然后有逻辑记录错误,通过电子邮件或文本通知你,然后优雅地恢复。这是我的做法:
使用 systemd 进行部署(新贵也可以,但已失宠)。确保在你的 .system 文件中有重启逻辑。将您的节点程序部署为 Docker 容器。当它失败时,容器将退出,systemd 会注意到它并重新启动。我还使用日志记录即服务,这样我就可以拥有所有日志。最后,我们使用警报机制(nagios、stackdriver,还有很多其他机制),以便我们知道什么时候出现故障。
您要求最佳实践,而这正是很多人现在正在做的事情。但它很贵。如果你没有任何金钱、时间或程序员来做这些事情,你就需要妥协。
不过,我不会在其中一些问题上妥协:
记录失败。大多数 SaaS 日志记录公司都有免费计划,所以请使用它。
监视您的进程并重新启动它的东西。在操作系统级别上,Upstart 和 Systemd 相当容易配置。但如果你不能,至少使用节点的“永远”包。
如果你不能像上面那样做任何事情并且真的已经触底,请将它放在你的节点应用程序的入口点:
process.on('uncaughtException', function(err) {
//do something here
});
但实际上,您希望失败并恢复,从中吸取教训,修复错误,这将使您的软件更强大。
【讨论】: