Lambda冷启动可能的解决方案?

Jas*_*tla 17 amazon-ec2 amazon-web-services aws-sdk aws-lambda

调度lambda函数是否每隔20分钟调用CloudWatch是摆脱lambda冷启动时间的最佳方法?(没有完全摆脱)......

这会变得昂贵还是我缺少的东西,因为我现在已经设置它,我认为它正在工作.

在我的冷启动时间之前将是10秒,并且每个后续呼叫将在80毫秒内完成.现在每次通话都是大约80毫秒.这是一个很好的方法,直到你的用户群增长,然后你可以关闭它?

我的第二个选择是使用beanstalk并让服务器全天候运行,但这听起来很昂贵所以我不喜欢它.

rsp*_*rsp 14

据我所知,这是保持功能正常的唯一方法.只有当你拥有很多这些功能时才会变得昂贵.

考虑到你有多少人,每次运行它们需要多长时间以及你需要多少内存,你必须自己计算你为保持你的功能而付出的代价.

但是每20分钟一次就像每月2000次,所以如果你使用例如128MB并且让它们完成不到100毫秒那么你可以在20分钟的时间间隔内保持相当多的这样的功能并仍然处于免费等级之下 - 它将是每个功能每月20秒.您甚至不需要在获得更大负载后将其关闭,因为此时它将无关紧要.除此之外,你永远无法确保一直都能获得统一的负载,这样即使在那时你也可以保持心脏跳动.

虽然我的猜测是,因为保持一个函数活着是如此便宜(特别是如果你有一个特殊的参数使它们立即返回)并且差异是如此之大(10秒对80毫秒)那么几乎每个人都会做它 - 几乎没有理由不这样做.在那种情况下,我希望亚马逊能够与这种做法作斗争(通过使其变得比现在更难或更昂贵 - 这不是一个聪明的举动)或者将来不需要它.如果冷启动和冷启动之间的差异是100毫秒,那么没人会打扰.如果是10秒,那么每个人都需要解决它.

运行一秒钟前运行的代码与一个月前运行的代码之间总是存在差异,因为将所有这些代码放在RAM中并准备好将会浪费大量资源,但我看不到为什么这种差异不能显得不那么明显,甚至没有更多的步骤,而不仅仅是冷热启动.


小智 7

您可以通过为Lambda函数分配更多内存来改善冷启动时间.使用默认的512MB,我看到用Java编写的函数的冷启动时间为8-10秒.使用1536MB内存可将此时间提高到2-3秒.

亚马逊表示,CPU分配确实很重要,但没有办法直接改变它.CPU分配与内存成比例增加.

如果你想要接近零冷启动时间,保持功能温暖是要走的路,正如rsp建议的那样.

  • 将内存设置为1536mb对我有用.冷启动时间从12秒减少到3秒. (2认同)
  • 大的 lambda 启动速度更快,而且垃圾收集也更早。换句话说,它们的空闲超时时间更短。 (2认同)