我目前在 AWS 上有一个 Windows 实例,它运行一个 Windows 计划任务来执行一个 .net 脚本来处理天数订单。
我最近使用 ELB 对一些实例进行了负载平衡,这一切都很好。
问题是如何设置计划任务,以便并非所有实例都运行它。我研究过 AWS 上的 OpsWorks、SimpleWorkFlow 等,但对于这个相对简单的任务,我应该专注于哪一个非常令人困惑。
谢谢
我目前在 AWS 上有一个 Windows 实例,它运行一个 Windows 计划任务来执行一个 .net 脚本来处理天数订单。
我最近使用 ELB 对一些实例进行了负载平衡,这一切都很好。
问题是如何设置计划任务,以便并非所有实例都运行它。我研究过 AWS 上的 OpsWorks、SimpleWorkFlow 等,但对于这个相对简单的任务,我应该专注于哪一个非常令人困惑。
谢谢
您也许可以使用 Amazon SWF,但这似乎有点矫枉过正/复杂。
还有亚马逊管道。这可能是正确的答案,但需要一些阅读来设置。
要做的简单的事情是在所有盒子上安排你的工作,并让一个数据库宣布获胜者。
A)您可以让它“锁定”数据库中未处理的订单,然后处理它们。只要你锁定一个事务,其他工作人员将获得 0 个订单(或几个新订单)来处理。
B)您可以创建一个包含作业将锁定的单行的特殊表。类似于“更新 work_table set worker='mybox', work_start = now() where worker = ''”。
如果你想对工人盒子死亡保持稳健,必须制定更复杂的规则:工人可以闲逛,直到工人将他的工作标记为完成。如果作业没有及时完成,他们可以假设第一个工人死亡并试图从他那里偷锁并自己运行作业。
如果您没有数据库,则始终可以使用 SDB (Simple DB) 或 DynamoDB。每天访问数据库几次肯定适合免费套餐。
如果你做对了,整个事情将只有 20-50 行代码。
假设您需要每天运行一次工作流,您可以生成包含日期的工作流 ID,这将确保只有一个实例被触发。
如果你想要 n 个实例,那么你可以有一个父工作流(由工作流 ID 确保的单例),它产生 n 个子工作流。