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