SQS /任务队列作业重试计数策略?

pgn*_*pgn 5 distributed amazon-sqs task-queue amazon-web-services

我正在使用Amazon SQS实现一个任务队列(但我想这个问题适用于任何任务队列),其中工作人员需要采取不同的操作,具体取决于已经重新尝试作业的次数(将其移至一个不同的队列,增加可见性超时,发送警报..等等)

什么是跟踪失败的工作计数的最佳方法?我想避免为工作保留一个集中式数据库:重试计数记录.我应该在监控过程中查看在队列中花费的时间吗?国际海事组织最好是丑陋或不干净,迭代工作直到找到古老的工作.

谢谢!安德拉斯

Ser*_*gey 7

还有另一种更简单的方法.根据您的消息,您可以请求ApproximateReceiveCount信息并在此基础上建立重试逻辑.这样您就不必将其保留在数据库中,并可以从消息本身计算出来.

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_ReceiveMessage.html


sec*_*ike 5

我将SQS与SimpleDB结合起来取得了很好的成功.它是"集中的",但只有SQS.

每个作业都在simpleDB中获得记录,在SQS中获得任务.您可以在SimpleDB中添加您喜欢的任何信息,例如创建作业的时间.当工作人员从队列中提取作业时,它可以从simpleDB中获取相应的记录以确定其历史记录.您可以查看作业的年龄,并且可以查看已尝试的次数.完成后,您可以将工作线程数据添加到SimpleDB记录(完成时间,结果,日志,错误,堆栈跟踪等)并确认来自SQS的消息.

我更喜欢这种方法,因为它通过为失败的任务提供大量调试信息来帮助诊断故障.它还允许工作人员以不同的方式处理工作,具体取决于工作排队的时间长短,工作失败次数等.

它还使您能够直接查询SimpleDB并计算每个任务的平均时间,故障率百分比等.


num*_*ati 1

Amazon 刚刚发布了简单工作流程服务 (swf),您可以将其视为 GAE 任务队列的更复杂/灵活版本。

它将让您监控您的任务(通过心跳)、配置重试策略并创建复杂的工作流程。它看起来很有前途,可以抽象出任务依赖性、任务调度和任务容错(尤其是异步任务)

查看http://docs.amazonwebservices.com/amazonswf/latest/developerguide/swf-dg-intro-to-swf.html了解概述。