据我了解,AWS Lambda在用户无法访问的EC2实例上运行上载的代码。它创建运行上载代码所需的运行时环境,管理权限并平衡负载。我认为这就是AWS Lambda在后台执行的操作。
引用Wikipedia:
这是有道理的,但是AWS Lambda可以使用claim来使用自动缩放:
我的问题是-
最佳答案
Lambda不知道所需的内存和CPU数量-您告诉了它,并在设置该功能时收取了相应的费用(设置完成后,您可以根据需要进行更改)。
Lambda不能在单个EC2实例上运行,通常可以理解,Lambda函数在docker容器中运行(在幕后的EC2实例上运行)-或更可能它们使用AWS的EC2容器服务对所有这些lambda的业务进行编排。
它通过增加正在运行的实例数(而不是运行的lambda的大小)来“扩展”-因此,如果您一次用数百次调用充斥lambda函数,则不会增加lambda的内存或cpu,它会旋转更多实例来处理负载。
当lambda需要启动一个新实例时会有一个延迟-尤其是如果您有一段时间没有运行它-通常称为冷启动-一旦请求不断出现,lambda就会随时准备为该实例服务下一个请求,因此后续 call 的运行速度比前1-2个要快得多。一旦 call 停止,AWS可能会调低实例的运行速度,但是没有文档说明何时或为什么会发生这种情况。我的经验是,只要有稳定的请求流,延迟就非常低-当您进行冷启动时,将导致“麻烦”地使它再次运行。
如果您需要减少“冷启动”延迟,最简单的方法是指定更大的内存大小-内存和CPU规模级联,因此即使您的函数不需要更多的内存,给它更多的内存也会减少初始延迟。