在Node.js中保存应用程序状态

时间:2012-06-16 19:37:19

标签: javascript node.js network-programming distributed

如何为node.js主要包含HTTP请求的应用程序保存应用程序状态?

我在Node.JS中有一个脚本,它与RESTful API一起将大量(10,000+)以上的产品导入电子商务应用程序。 API对可以提出的请求数量有限制,我们正在盯着这个限制。在之前的运行中,脚本以Error: connect ETIMEDOUT退出可能是由于超出了API限制。我希望能够尝试连接5次,如果在恢复限制的一小时后恢复失败。

在发生崩溃(电源关闭,网络崩溃等)的情况下保存整个进程也是有益的。并且能够从它停止的位置恢复脚本。

我知道Node.js作为一个巨大的事件队列运行,所有的http请求及其回调都被放入该队列(连同其他一些事件)。这使其成为保存当前执行状态的主要目标。其他令人愉快的(这个项目不是完全必要的)将能够在不同网络上的多台机器之间分配工作以提高吞吐量。

那么有现成的方法吗?也许一个框架?或者我是否需要自己实现这一点,在这种情况下,任何有用的资源如何做到这一点将不胜感激。

1 个答案:

答案 0 :(得分:3)

当你说

时,我不确定你的意思
  

我知道Node.js作为一个巨大的事件队列运行,所有的http请求及其回调都被放入该队列(连同其他一些事件)。这使其成为保存当前执行状态的主要目标

如果您发现它与答案相关,请随时发表评论或解释。

也就是说,如果您只是为这项特定任务寻找持久性机制,我可能会推荐Redis,原因如下:

  • 它允许atomic operations处理许多数据类型;例如,如果您在Redis中有一个名为num_requests_made的条目表示发出的请求数,您可以使用INCR num_requests_made在Redis中轻松增加此数字,并且它保证是原子的,这使得它更容易扩展到多个工人。
  • 它有several data types可能对您的需求有用;例如,一个简单的字符串可以表示在特定时间段内发出的API请求的数量(如上一个项目符号点所示);您可以存储需要在列表中重新提交的失败API请求的详细信息;等
  • 它提供pub/sub mechanisms,允许您在程序的多个实例之间轻松进行通信。

如果这听起来很有趣或有用而您还不熟悉Redis,我强烈建议您试用interactive tutorial,它会为您介绍一些数据类型和命令。另一个好的阅读材料是A fifteen minute introduction to Redis data types