我在lambda的AWS官方文档中找到了这个:
如果您的Lambda函数访问VPC,则必须确保您的VPC具有足够的ENI容量以支持Lambda函数的比例要求。您可以使用以下公式来近似确定ENI要求。
预计峰值并发执行*(内存以GB / 3GB为单位)
我理解这个公式背后的原因。我唯一的问题是:为什么3GB?这个号码来自哪里?
公式预计峰值并发执行×(GB / 3GB内存)是对实际(但未说明)问题的答案的代理“Lambda需要分配多少个m级(通用)EC2实例才能容纳所需数量的这种尺寸的容器?“
AWS Lambda使用与通用Amazon EC2实例类型(例如M3类型)相同的比率来分配与内存成比例的CPU功率。
https://docs.aws.amazon.com/lambda/latest/dg/resource-model.html
这个比例是“相同的”,因为M3 ......或者与它非常类似的东西......是Lambda实际上用来托管你的容器的东西。
m3.medium是m3系列中最小的机器,具有3.75GB的RAM ...因此lambda需要提供的这种类型的EC2 VM的数量 - 以及因此需要的ENI数量 - 约为n×(m / 3GB)。该实例可以托管(例如)大约2×1.5GB或24×128MB或1×3.0GB容器,为VM内的操作/管理开销留出一些空间。
可能涉及多少开销,以及Lambda在放置和选择容器时使用的算法,以及Lambda是否使用实例大小的混合以及在什么规则下......都是Lambda黑盒子的一部分。逻辑将决定Lambda将从较小的实例开始并随着并发性的增长而向更大的实例发展,因为较大的实例(在同一系列中)将允许更高的打包效率而不会降低性能(因为内存和CPU是专用的,以固定的比率,每个容器),特别是对于大型和奇怪大小的容器。这个公式表明它不是容器接收ENI而是实例......并且在大小为m GB的并发n下,Lambda将分配大约n×(m / 3GB)个实例。
3GB是单个lambda函数的最大内存分配。 https://docs.aws.amazon.com/lambda/latest/dg/limits.html