【问题标题】:Scheduled tasks using AWS使用 AWS 的计划任务
【发布时间】:2014-01-11 18:54:59
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 嗨 Raj,我正在处理你的查询,我现在很兴奋,我将在亚马逊上有一个 asp.net 页面,我需要在亚马逊上每隔一小时打电话给这个页面以发送电子邮件,我该如何继续进行?我对此有一个悬而未决的问题,你可以在那里回复我。谢谢。

标签: asp.net amazon-web-services amazon-swf aws-opsworks


【解决方案1】:

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

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

简单的做法是在所有盒子上安排您的工作,并让数据库宣布获胜者。

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

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

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

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

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

【讨论】:

  • 是的,我确实查看了 AWS Data Pipeline,但它似乎不允许我只执行脚本/url。似乎与数据库操作、备份等更相关,并且围绕此的在线帮助/教程似乎很少。您建议的数据库路线是一个公平的选择,如果我在下周无法在 AWS 上找到更多帮助,这可能是前进的方向!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-07-14
    • 2019-08-27
    • 2018-11-19
    • 2019-02-13
    • 1970-01-01
    • 2017-04-15
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多