gpt4 book ai didi

amazon-ec2 - 如何将 Linux cron 作业转换为 "the Amazon way"?

转载 作者:行者123 更新时间:2023-12-02 23:54:48 31 4
gpt4 key购买 nike

无论好坏,我们已经迁移了整个 LAMP Web 应用程序从专用计算机到云(Amazon EC2 计算机)。到目前为止进展顺利,但我们的做法crons是次优的。我有一个特定于 Amazon 的问题,关于如何使用“Amazon 方式”在云中最好地管理 cron 作业。

问题:我们有多个网络服务器,需要运行 cron 来执行批处理作业,例如创建 RSS 源、触发电子邮件,实际上有许多不同的事情。但是 cron 作业只需要在一台计算机上运行,因为它们经常写入数据库,因此如果在多台计算机上运行,​​则会重复结果。

到目前为止,我们将其中一个网络服务器指定为“主网络服务器”,它具有一些其他网络服务器没有的“特殊”任务。云计算的权衡是可靠性——我们不需要“主网络服务器”,因为它是单点故障。我们希望它们全部相同,并且能够扩大和缩小规模,而无需记住不要将主 Web 服务器移出集群。

我们如何重新设计应用程序,将 Linux cron 作业转换为没有单点故障的临时工作项?

到目前为止我的想法:

  • 拥有一台专门用于运行 crons 的机器。这会更容易管理一点,但仍然会出现单点故障,并且会浪费一些钱来获得额外的实例。
  • 一些工作可能会从 Linux cron 转移到 MySQL Events不过我不太喜欢这个想法,因为我不想将应用程序逻辑放入数据库层。
  • 也许我们可以在所有机器上运行所有 cron,但更改我们的 cron 脚本,以便它们都以一些实现锁定机制的逻辑开始,这样只有一台服务器实际采取行动,而其他服务器只是跳过。我不喜欢这个想法,因为它听起来可能存在缺陷,而且我更愿意使用亚马逊最佳实践,而不是自己推出。
  • 我想象一种情况,作业被安排在某个地方,添加到队列中,然后每个网络服务器都可以是一个工作人员,可以说“嘿,我会接受这个”。 Amazon Simple Workflow Service听起来正是这种事情,但我目前对此了解不多,因此任何具体细节都会有所帮助。对于像 cron 这样简单的东西来说,这似乎有点重量级?这是正确的服务还是有更合适的亚马逊服务?
<小时/>

更新:自从提出问题以来,我观看了 Amazon Simple Workflow Service YouTube 上的网络研讨会,并在 34:40 ( http://www.youtube.com/watch?v=lBUQiek8Jqk#t=34m40s ) 注意到,我瞥见了一张幻灯片,其中提到 cron jobs 作为示例应用程序。在他们的文档页面“AWS Flow Framework samples for Amazon SWF”中,亚马逊表示他们有 cron 的示例代码:

... > Cron jobs In this sample, a long running workflow periodically executes an activity. The ability to continue executions as new executions so that an execution can run for very extended periods of time is demonstrated. ...

我下载了适用于 Java 的 AWS 开发工具包 ( http://aws.amazon.com/sdkforjava/ ),果然埋在可笑的文件夹层中,有一些 java 代码 (aws-java-sdk-1.3.6/samples/AwsFlowFramework/src/com/amazonaws/services/simpleworkflow/flow/examples/periodicworkflow)。

问题是,老实说,这并没有真正的帮助,因为它不是我可以用我的技能轻松消化的东西。 PHP SDK 中缺少相同的示例,并且似乎没有指导该过程的教程。所以基本上,我仍在寻找建议或技巧。

最佳答案

我注册了亚马逊金牌支持来问他们这个问题,这是他们的回应:

Tom

I did a quick poll of some of my colleagues and came up empty on the cron, but after sleeping on it I realised the important step may be limited to locking. So I looked for "distributed cron job locking" and found a reference to Zookeeper, an Apache project.

http://zookeeper.apache.org/doc/r3.2.2/recipes.html

http://highscalability.com/blog/2010/3/22/7-secrets-to-successfully-scaling-with-scalr-on-amazon-by-se.html

Also I have seen reference to using memcached or a similar caching mechanism as a way to create locks with a TTL. In this way you set a flag, with a TTL of 300 seconds and no other cron worker will execute the job. The lock will automatically be released after the TTL has expired. This is conceptually very similar to the SQS option we discussed yesterday.

Also see; Google's chubby http://static.googleusercontent.com/external_content/untrusted_dlcp/research.google.com/en//archive/chubby-osdi06.pdf

Let me know if this helps, and feel free to ask questions, we are very aware that our services can be complex and daunting to both beginners and seasoned developers alike. We are always happy to offer architecture and best practice advice.

Best regards,

Ronan G. Amazon Web Services

关于amazon-ec2 - 如何将 Linux cron 作业转换为 "the Amazon way"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061843/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com