AWS Lambda函数无法扩展到足以处理SQS消息

时间:2018-12-18 01:11:47

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

我有一个Lambda,已预订SQS队列来处理消息。消息量很高。

问题:队列增长非常快,并且lambda函数无法扩展以无法足够快地处理消息。即使我的剩余配额为950或更多未使用的lambda执行,并发的lambda执行最多也只能达到20到25。为什么不增加lambda来更快地处理我的队列?这是可配置的吗?

这是我的应用程序中的一个问题,因为我使用的是标准SQS队列,该队列不提供任何排序​​保证。因此,有时我会看到不幸的消息在队列中被占用了几个小时,而有些消息则在不到一分钟的时间内得到处理。 (顺便说一句,我很震惊,队列可以以这样的随机顺序进行处理。即使没有排序保证,我也不会期望它这么糟糕)。

2 个答案:

答案 0 :(得分:3)

问题是lambda函数的内存分配。我天真地将其保留为128MB的默认值。将其更改为2048MB可以完全解决问题。现在,lambda可以满足大量SQS消息的需求。

答案 1 :(得分:1)

关于SQS,您没有说您正在使用哪个区域,但是SQS在以后的区域中确实具有FIFO选项。

  

FIFO队列在美国东部(弗吉尼亚北部),美国东部(俄亥俄州),美国西部(俄勒冈),欧盟(爱尔兰),亚太地区(悉尼)和亚太地区(东京)地区可用。 FIFO队列具有标准队列的所有功能。

关于Lambda并发性,听起来您正在使用的子网中的IP地址用完了。仅在使用VPC时适用。

  

如果功能连接到基于VPC的资源,则必须确保子网具有足够的地址容量以支持功能的ENI扩展要求。您可以使用以下公式估算大约的ENI容量:

     

并发执行*(以GB / 3 GB的内存为单位)

     

位置:

     

并发执行-这是您的工作负载的预计并发性。使用了解伸缩行为中的信息来确定该值。

     

以GB为单位的内存–您为Lambda函数配置的内存量。

     

您可以设置函数的并发执行限制以匹配您所拥有的子网大小限制。

参考

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/FIFO-queues.html

https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html