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

Mic*_*aev 5 javascript distributed network-programming node.js

如何保存node.js主要由HTTP请求组成的应用程序的应用程序状态?

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

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

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

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

Mic*_*ley 3

我不确定你说的是什么意思

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

如果您发现它与答案相关,请随时对此发表评论或阐述。

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

  • 它允许对许多数据类型进行原子操作;例如,如果您在 Redis 中有一个名为 的条目,num_requests_made表示发出的请求数,您可以使用 在 Redis 中轻松增加该数字INCR num_requests_made,并且保证它是原子的,从而更容易扩展到多个工作线程。
  • 它有多种数据类型,可以满足您的需求;例如,一个简单的字符串可以表示在特定时间段内发出的 API 请求数量(如前面的要点所示);您可以在列表中存储需要重新提交的失败 API 请求的详细信息;ETC。
  • 它提供了发布/订阅机制,使您可以在程序的多个实例之间轻松通信。

如果这听起来很有趣或有用,并且您还不熟悉 Redis,我强烈建议您尝试交互式教程,它向您介绍了一些数据类型及其命令。另一篇很好的阅读材料是Redis 数据类型的十五分钟介绍