AWS Lambda 预置并发的成本效率

JHH*_*JHH 6 amazon-web-services aws-lambda

我正在运行一个包含大量 AWS Lambda 函数的系统。我们的负载并不大,假设一个函数每月有 10 万次调用。

\n

对于相当多的 Lambda 函数,我们使用预热插件来减少冷启动时间。这实际上是每 5 分钟触发一次的 CloudWatch 事件,以使用虚拟事件调用该函数,虚拟事件会被忽略,但会保持 Lambda VM 运行。在大多数情况下,这意味着一个实例将是“温暖的”。

\n

我现在正在研究冷启动问题的本机解决方案:AWS Lambda Concurrent Provisioning,乍一看看起来很棒,但是当我开始计算时,要么我错过了一些东西,要么这只是一个很大的成本对于仅具有中等负载的系统,增加。

\n

eu-west-1例如,截至 2020 年 9 月 16 日该地区的价格:

\n

考虑函数 RAM M(GB)、平均执行时间t(s)、每月百万个请求N、预配置并发性C(“实例数”):

\n

没有预配置并发

\n

每月费用=N\xe2\x8b\x85(16.6667\xe2\x8b\x85M\xe2\x8b\x85t + 0.20)

\n

= 每百万个请求 16.87 美元 @ M= 1 GB, t= 1 s

\n

= 每百万个请求 1.87 美元 @ M= 1 GB, t= 100 毫秒

\n

= 每 100.000 个请求 1.69 美元 @ M= 1 GB, t= 1 秒

\n

= 每 100M 请求 1686.67 美元 @ M= 1GB, t= 1 s

\n

具有预配置的并发性

\n

每月费用=C\xe2\x8b\x850.000004646\xe2\x8b\x85M\xe2\x8b\x8560\xe2\x8b\x8560\xe2\x8b\x8524\xe2\x8b\x8530 + N\xe2\x8b\x85(10.8407\xe2\x8b\x85M\xe2\x8b\x85t + 0.20) = 12.04\xe2\x8b\x85C\xe2\x8b\x85M + N(10.84\xe2\x8b\x85M\xe2\x8b\x85t + 0.20)

\n

= $12.04 + $11.04 = $23.08 每百万个请求 @ M= 1 GB, t= 1 s, C= 1

\n

= $12.04 + $1.28 = $13.32 每百万个请求 @ M= 1 GB, t= 100 毫秒, C= 1

\n

= $12.04 + $1.10 = $13.14 每 100.000 个请求 @ M= 1 GB, t= 1 s, C= 1

\n

= $12.04 + $1104.07 = $1116.11 每 100M 请求 @ M= 1 GB, t= 1 s, C= 1

\n

显然这里有几个因素需要考虑:

\n
    \n
  • 预计每月有多少请求?( N)
  • \n
  • 该功能需要多少 RAM?( M)
  • \n
  • 平均执行时间是多少?( t)
  • \n
  • 流量模式是什么,很少有小突发甚至流量(可能意味着C低、高或必须动态更改以遵循高峰时段等)
  • \n
\n

但最后,我的初步结论是,只有在流量很大的情况下,预置并发才会划算?在我的示例中,每月 1 亿个请求可以节省大量成本(但是,在该流量下,您可能还需要更高的值C;收支平衡约为C30)。即使C= 1,您每月也需要近百万个请求来支付静态成本。

\n

现在,使用本机解决方案显然还有其他好处(没有丑陋的虚拟事件、没有日志污染、灵活数量的热实例……),并且自定义解决方案还可能存在其他隐藏成本(CloudWatch 事件、额外的 CloudWatch)记录虚拟调用等),但我认为它们几乎可以忽略不计。

\n

我的分析相当正确还是我遗漏了什么?

\n

sas*_*hee 4

我认为预置并发是消除冷启动的东西,而不是省钱的东西。如果您可以保持 lambda 函数始终运行(100%)利用率,则可以节省一些费用,但正如您所计算的,当预配容量闲置时,它会变得相当昂贵。

  • “Lambda 就是简单性和可扩展性,而不必关心它。” - 理论上很简单,但是一旦你开始达到限制(请求数量、冷启动等),那么你将需要引入一些相当丑陋的“解决方法” - 然后它就不再那么“简单”了。 (3认同)