【问题标题】:How to identify the Node JS instance in Azure?如何识别 Azure 中的 Node JS 实例?
【发布时间】:2020-09-04 03:36:13
【问题描述】:

我已将 NodeJS 应用程序部署在 Azure“容器的 Web 应用程序”中,但 CRON 作业很少。当 CRON 作业运行时,负载会增加,从而导致 Azure 自动缩放。 这里的问题是;当自动缩放发生时,我相信会创建新实例,这会导致 CRON 作业在每个实例上单独初始化和运行。但我希望这个 CRON 作业只运行一个(又名;仅在 1 个实例中)。在想,如果我能以某种方式识别实例,那么可以将这个 CRON 作业限制为单独的第一个实例。您能否建议我如何执行此(或)任何其他更好的方法来处理此案例?

【问题讨论】:

  • 你试过单例模式来解决你的问题吗?
  • @JasonPan 我对这个领域还很陌生,能否请您分享任何我可以查看和尝试的参考链接
  • 你的新实例是什么,新对象?
  • 您可以使用 blob 上的租约来控制单例行为。这就是 WebJobs sdk 的工作原理。
  • 谢谢大家,我会尝试一下,然后返回结果。

标签: node.js azure express cron azure-web-app-service


【解决方案1】:

是的。默认情况下,WebJobs 随 webapp 扩展。 正如 Jason 提到的,单身人士可以在您的情况下工作。分享有关其工作原理的更多详细信息。

您可以创建一个包含 JSON 数据 { "is_singleton": true } 的 Settings.job 文件。这会强制 Azure 仅运行 WebJob 的一个实例,即使关联的 Web 应用程序有多个实例也是如此。请注意,这对于计划作业可能是一种有用的技术。

为了突出区别,连续作业 - 在运行 Web 应用程序的所有实例上运行。您可以选择将 WebJob 限制为单个实例(单例),而触发作业 - 在 Azure 选择用于负载平衡的单个实例上运行。

如上所述,要在部署期间将连续作业设置为单例(不需要 REST API),您可以简单地创建一个名为 settings.job 的文件,其内容为:{“is_singleton”: true } 并将其放在(特定)WebJob 目录的根目录。 请查看此document 以获取示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-24
    • 2012-07-20
    相关资源
    最近更新 更多