AWS:如何保证作业只运行一次?

时间:2015-09-03 23:19:31

标签: amazon-web-services concurrency

或者更确切地说,如果相同的工作已经在运行,我如何保证工作不会开始运行?基本上,我需要完成一堆不同的任务,有时同一个任务会被请求不止一次,但它只需要完成一次*。如何在AWS中实现此功能?我尝试过SWF,但无法保证活动ID在不同的工作流程中是独一无二的。我正在查看SQS,但我看不到有关唯一消息ID的保证,也没有任何方法可以请求当前在队列中的所有消息ID列表。

非常感谢任何帮助

*除非将来再次打电话,因为工作可能会随着时间的推移而改变,但这不是在这里也不是

2 个答案:

答案 0 :(得分:0)

答案取决于你如何处理工作开始的情况并且失败。 (即你愿意等到宣布工人死亡并重新开始工作多久,最重要的是你如何确保如果工人死了就不会再取得进展/它会中止工作?)

理想情况下,你会将你正在做的工作分成块,你会确保如果两次完成相同的块,就不会发生任何不好的事情。一旦执行将很难完成(对于所有边缘情况都不可能),因为你有执行工作的问题而没有报告,在这种情况下你无法知道你做了什么工作。< / p>

答案 1 :(得分:0)

一种可能的解决方案是使用redis服务器(由AWS提供,作为Elasticache服务)来实现分布式锁。 Redis是单线程的,这使得它非常适合这样的工作。您在redis website

上有许多详细信息和分布式锁定的实现示例