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

Saving Application State in Node.js

本文关键字:应用 程序状态 保存 节点 js      更新时间:2023-09-26

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

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

发生崩溃(断电、网络崩溃等)时保存整个进度也是有益的。并且能够从中断的位置恢复脚本。

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

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

我不确定你说什么意思

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

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

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

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

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