长时间运行的NodeJS应用监听数据变化的稳定性

时间:2015-09-24 16:07:23

标签: node.js

我想在NodeJS中创建一个监听Firebase更改的实用程序,如下所示:

var Firebase = require('firebase');
var agentRef = new Firebase("https://mybase.firebaseio.com");
agentRef.child('users').on('value', function (snapshot) {
    console.log(snapshot.val());
});

它将尽可能长时间运行,理想情况下永远运行,在发生变化时运行一些例程。

问题是,运行NodeJS几天,几个月有多可靠?

如何跟踪它的健康状况并按原样运行。如果它挂起,我怎么知道?它是一种正确的方式吗?也许我应该使用其他工具监听更改,然后在需要时运行NodeJS代码?

2 个答案:

答案 0 :(得分:1)

我同意@KevinB。 Node.js二进制文件是稳定的,可能不像linux内核,但只要你使用其中一个LTS版本,它仍然坚如磐石。关键是,您的代码(以及您需要的代码,在本例中为firebase)会将不稳定性带入系统。

正如@vmkcom已经回答的那样,这超出了 node.js 本身的范围,就像糟糕的Java代码不在JBoss或Tomcat应用服务器之外。人们一直在监控应用服务器的行为。在node.js的情况下,可能是建议的supervisor,或foreverpm2。如果您对bash和朋友很方便,可以使用简单的旧Linux工具。

我想提出的另一点是,你的应用程序对于不仅仅是内存的中断,还有网络,服务等内容的恢复能力如何?如果Firebase暂时不可用,您是否有适当的代码重新连接?如果主机耗尽了与您的应用无关的磁盘空间,您知道您的应用将如何表现吗?你能幸免于Chaos Monkey吗?

答案 1 :(得分:0)

在某些时候你会遇到两类问题

  1. 未处理的例外
  2. 资源不足/不足(内存,描述符......)
  3. 第一个可以通过过程控制系统轻松解决,例如http://supervisord.org/Forever。这是记录异常并再次重新运行nodejs进程的好方法

    node.js无法直接解决内存不足问题,因此需要对其进行监控。如果你有内存泄漏 - 在某些时候你会遇到一些严重的机器问题。

    如果您无法通过更改代码修复泄漏 - 尝试在一些事件后重新运行node.js

    node.js本身对于长时间生产运行非常稳定,监控您的资源和日志,然后决定如何修复