2

我目前在 AWS 上有一个 Windows 实例,它运行一个 Windows 计划任务来执行一个 .net 脚本来处理天数订单。

我最近使用 ELB 对一些实例进行了负载平衡,这一切都很好。

问题是如何设置计划任务,以便并非所有实例都运行它。我研究过 AWS 上的 OpsWorks、SimpleWorkFlow 等,但对于这个相对简单的任务,我应该专注于哪一个非常令人困惑。

谢谢

4

2 回答 2

1

您也许可以使用 Amazon SWF,但这似乎有点矫枉过正/复杂。

还有亚马逊管道。这可能是正确的答案,但需要一些阅读来设置。

要做的简单的事情是在所有盒子上安排你的工作,并让一个数据库宣布获胜者。

A)您可以让它“锁定”数据库中未处理的订单,然后处理它们。只要你锁定一个事务,其他工作人员将获得 0 个订单(或几个新订单)来处理。

B)您可以创建一个包含作业将锁定的单行的特殊表。类似于“更新 work_table set worker='mybox', work_start = now() where worker = ''”。

如果你想对工人盒子死亡保持稳健,必须制定更复杂的规则:工人可以闲逛,直到工人将他的工作标记为完成。如果作业没有及时完成,他们可以假设第一个工人死亡并试图从他那里偷锁并自己运行作业。

如果您没有数据库,则始终可以使用 SDB (Simple DB) 或 DynamoDB。每天访问数据库几次肯定适合免费套餐。

如果你做对了,整个事情将只有 20-50 行代码。

于 2013-12-24T14:18:39.017 回答
1

假设您需要每天运行一次工作流,您可以生成包含日期的工作流 ID,这将确保只有一个实例被触发。

如果你想要 n 个实例,那么你可以有一个父工作流(由工作流 ID 确保的单例),它产生 n 个子工作流。

于 2014-12-30T12:27:52.130 回答