我有一个Lambda,已预订SQS队列来处理消息。消息量很高。
问题:队列增长非常快,并且lambda函数无法扩展以无法足够快地处理消息。即使我的剩余配额为950或更多未使用的lambda执行,并发的lambda执行最多也只能达到20到25。为什么不增加lambda来更快地处理我的队列?这是可配置的吗?
这是我的应用程序中的一个问题,因为我使用的是标准SQS队列,该队列不提供任何排序保证。因此,有时我会看到不幸的消息在队列中被占用了几个小时,而有些消息则在不到一分钟的时间内得到处理。 (顺便说一句,我很震惊,队列可以以这样的随机顺序进行处理。即使没有排序保证,我也不会期望它这么糟糕)。
答案 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