JHH*_*JHH 6 amazon-web-services aws-lambda
我正在运行一个包含大量 AWS Lambda 函数的系统。我们的负载并不大,假设一个函数每月有 10 万次调用。
\n对于相当多的 Lambda 函数,我们使用预热插件来减少冷启动时间。这实际上是每 5 分钟触发一次的 CloudWatch 事件,以使用虚拟事件调用该函数,虚拟事件会被忽略,但会保持 Lambda VM 运行。在大多数情况下,这意味着一个实例将是“温暖的”。
\n我现在正在研究冷启动问题的本机解决方案:AWS Lambda Concurrent Provisioning,乍一看看起来很棒,但是当我开始计算时,要么我错过了一些东西,要么这只是一个很大的成本对于仅具有中等负载的系统,增加。
\neu-west-1例如,截至 2020 年 9 月 16 日该地区的价格:
考虑函数 RAM M(GB)、平均执行时间t(s)、每月百万个请求N、预配置并发性C(“实例数”):
没有预配置并发
\n每月费用=N\xe2\x8b\x85(16.6667\xe2\x8b\x85M\xe2\x8b\x85t + 0.20)
= 每百万个请求 16.87 美元 @ M= 1 GB, t= 1 s
= 每百万个请求 1.87 美元 @ M= 1 GB, t= 100 毫秒
= 每 100.000 个请求 1.69 美元 @ M= 1 GB, t= 1 秒
= 每 100M 请求 1686.67 美元 @ M= 1GB, t= 1 s
具有预配置的并发性
\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)
= $12.04 + $11.04 = $23.08 每百万个请求 @ M= 1 GB, t= 1 s, C= 1
= $12.04 + $1.28 = $13.32 每百万个请求 @ M= 1 GB, t= 100 毫秒, C= 1
= $12.04 + $1.10 = $13.14 每 100.000 个请求 @ M= 1 GB, t= 1 s, C= 1
= $12.04 + $1104.07 = $1116.11 每 100M 请求 @ M= 1 GB, t= 1 s, C= 1
显然这里有几个因素需要考虑:
\nN)M)t)C低、高或必须动态更改以遵循高峰时段等)但最后,我的初步结论是,只有在流量很大的情况下,预置并发才会划算?在我的示例中,每月 1 亿个请求可以节省大量成本(但是,在该流量下,您可能还需要更高的值C;收支平衡约为C30)。即使C= 1,您每月也需要近百万个请求来支付静态成本。
现在,使用本机解决方案显然还有其他好处(没有丑陋的虚拟事件、没有日志污染、灵活数量的热实例……),并且自定义解决方案还可能存在其他隐藏成本(CloudWatch 事件、额外的 CloudWatch)记录虚拟调用等),但我认为它们几乎可以忽略不计。
\n我的分析相当正确还是我遗漏了什么?
\n我认为预置并发是消除冷启动的东西,而不是省钱的东西。如果您可以保持 lambda 函数始终运行(100%)利用率,则可以节省一些费用,但正如您所计算的,当预配容量闲置时,它会变得相当昂贵。
| 归档时间: |
|
| 查看次数: |
1882 次 |
| 最近记录: |