问题描述
我已经将NodeJS应用程序部署在Azure的“容器Web应用程序”中,几乎没有CRON作业。运行CRON作业时,负载增加,导致Azure自动缩放。 这里的问题是;当发生自动缩放时,我相信会创建新实例,这会导致CRON作业初始化并在每个实例上单独运行。但我希望此CRON作业仅运行一项(又名;仅在一种情况下)。我在想,如果我能以某种方式标识实例,则可以将此CRON作业限制为仅第一个实例。您能建议我如何(或)其他更好的方式来处理此案吗?
解决方法
是的。默认情况下,WebJobs随webapp扩展。 正如杰森(Jason)所言,单例可以在您的情况下发挥作用。有关其工作原理的更多详细信息。
您可以创建一个包含JSON数据{“ is_singleton”:true}的Settings.job文件。这迫使Azure仅运行一个WebJob实例,即使关联的Web应用程序有多个实例也是如此。请注意,这对于计划的作业可能是有用的技术。
仅强调差异,连续作业-在Web应用程序运行的所有实例上运行。您可以选择将WebJob限制为单个实例(单个),而“触发的作业”则在Azure选择进行负载平衡的单个实例上运行。
如上所述,要将部署期间的连续作业设置为单例(无需REST API),您可以简单地创建一个名为settings.job的文件,其内容为:{“ is_singleton”:true}并将其放在(特定的)WebJob目录的根。 请检查此document以获取示例。