一个工人使用AWS SQS?

时间:2018-11-20 08:15:49

标签: amazon-web-services aws-lambda amazon-sqs serverless

我正在努力在AWS环境中建立队列,在该环境中,任务由一个 Lambda / worker使用。

AWS Lambda automatically scales,但是我不想要那样。问题在于该函数对数据库进行了一些复杂的更改,并且可能存在竞争条件。不幸的是,这是我无法控制的。

因此,与解决复杂的SQL问题相比,更容易确保有一个工作人员。因此,我想要的是只要队列中有消息,一个工作人员就可以接收消息并按顺序完成任务。顺序没关系。

2 个答案:

答案 0 :(得分:1)

将Lambda函数上的concurrency limit设置为1

答案 1 :(得分:0)

您已经注意到,“内置” SQS至少从五个工作人员开始,然后逐步扩展。

但是,我有两个建议给您:

  • 如果只有一个分片,则运动(批处理大小为一个项目)将确保顺序执行,有序执行。这是因为Kinesis与分片并行(一个分片可以每秒记录1000条记录,所以只包含一个记录就可以了!),并且内置的lambda触发器采用可自定义的批处理大小(可以为1)并等待在完成下一批之前完成。
  • 如果您需要使用SQS,则“旧的”集成方式(在SQS触发器之前)将为您提供“最可能的”顺序执行。这是当您实际上在Scheduled CloudWatch Event上触发Lambda时,它使您可以让一个Lambda每X检查一次队列(由您配置)。这里的挑战是,如果X短于处理一条消息所花费的时间,那么第二个lambda将并行运行(有一些模式,例如X =您的lambda超时,并且只是让您的lambda运行5分钟一次进入队列)。