【问题标题】:Synchronize multiple node.js dynos同步多个 node.js dynos
【发布时间】:2013-06-24 00:25:47
【问题描述】:

我计划在 Heroku 上托管一个 express 应用程序(我已经在尝试使用单个 dyno)。

我想将node-cron 用于维护任务(执行一些 MongoDB 更新)。问题是,确保维护只运行一次的最简单方法是什么?所有测功机都会尝试同时进行维护。

我当前的方法使用 MongoDB 的原子 upserts 作为某种信号量(每个 dyno 都尝试为当前维护设置标志)。但这有点难看。

我不想有一个单独的工作实例,因为它实际上只是一个需要每天运行一次的简单任务。

【问题讨论】:

    标签: node.js heroku


    【解决方案1】:

    我认为这就是 Heroku Scheduler 的优势所在 (https://devcenter.heroku.com/articles/scheduler)。如果更新的执行时间不会太长,那么这就是要走的路。您编写一个知道如何更新 MongoDB 的 JS 脚本(例如 schedule.js),将其放在您的根目录中并使用 Heroku 调度程序(它带有一个简单的前端)来调度它,以便在当时调用它(node scheduler.js)想要的。

    【讨论】:

    • 嗯,这听起来很简单;-)。以前没有找到那个插件,或者我认为它太贵了。但是,如果我的任务每天运行一次并且需要几秒钟,这将只加起来几美分,如果有的话。
    • 每个应用程序可以获得 750 个免费的测功小时,这意味着 31.25 天的免费计算时间 -> 如果您的预定脚本在 31 天的情况下在一个月内的那个季度不消耗更多,那么您会得到它免费。实际上,无论如何您都必须运行 2 个网络测功机,因为一个测功机将在 60 分钟空闲时间后进入睡眠状态,并且在被路由事件触发时需要约 15 秒才能唤醒。 (devcenter.heroku.com/articles/dynos) -> 如果您的应用程序只运行一个网络测功机,它将休眠 - 无论工作人员测功机的数量如何。您必须拥有多个网络测功机才能防止睡眠。
    • 我已经知道这一点,并计划在我们启动时运行至少两个网络测功机。由于 Heroku 每隔一秒计费一次 dyno 运行(不仅仅是整小时,如 EC2),我可能需要每月为额外的一次性 dyno 支付一些美分。
    猜你喜欢
    • 2017-09-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2020-08-12
    • 2013-05-11
    • 1970-01-01
    • 2015-02-23
    • 2023-03-23
    相关资源
    最近更新 更多