
从明年八月开始,亚马逊云科技将开始对 AWS Lambda 托管运行时的初始化阶段收费。尽管该公司将此变化描述为与现有行为保持一致的计费标准化,并且社区中的许多人认为这是迈向更可预测和统一计费的一步,但也有人将其视为 亚马逊云科技的一次价格上涨。
Lambda 的费用根据请求数量和毫秒级持续时间计算。虽然使用自定义运行时、预置并发或 OCI 容器镜像的函数已将 初始化阶段计入计费时长,但此前所有其他 AWS Lambda 函数的初始化阶段均不收费。
新变化仅影响使用托管运行时并打包为 ZIP 文件的 Lambda 函数的按需调用,这些函数的初始化阶段时长此前是不计费的。亚马逊云科技首席产品经理 Shubham Gupta 和 高级专家技术客户经理 Jeff Gebhart 写道:
对于大多数用户而言,此项变更对其 Lambda 总账单的影响微乎其微……根据对生产环境中 Lambda 工作负载的分析,初始化(冷启动)通常发生在不到 1% 的调用中——这意味着初始化阶段的代码可能每百次调用才执行一次。
到目前为止,对于受支持的托管运行时,仅对 INVOKE(调用)阶段计费。未来,初始化阶段也将以相同的方式计费。
Lambda 函数的执行生命周期包括三个不同的阶段:INIT(初始化)、INVOKE(调用)和 SHUTDOWN(关闭)。INIT 阶段发生在冷启动期间,此时 Lambda 会响应调用或为扩展环境而创建一个新的执行环境。接下来是 INVOKE 阶段,函数在此阶段处理请求。最后,在 SHUTDOWN 阶段,执行环境将被终止。

来源:AWS 博客
INIT 阶段的常见用途包括下载库或依赖项、建立与其他 AWS 服务的客户端连接、创建可在多次调用之间共享的数据库连接,或检索应用程序参数或密钥。开发人员可以使用 CloudWatch 中的 InitDuration 指标来监控函数调用在初始化阶段所花费的时间。Datadog 的主管工程师兼 AWS Hero AJ Stuyvenberg 评论道:
亚马逊云科技早在几年前就应该这么做了……我很高兴人们终于可以就是否使用容器镜像或基于 ZIP 的函数做出客观决定,而无需考虑成本差异。我认为成本差异一直很小,只是增加了决策过程中的阻力。
这一新转变强调了优化初始化阶段执行以降低成本的重要性。在一个热门的 Reddit 帖子中,用户 TheBrianiac 写道:
这符合“按使用付费”的模式,对吧?目前付费的 Lambda 客户正在为其他客户的免费计算资源买单。
尽管社区中的许多人认为此举是为了防止滥用长达 10 秒的未计费初始化阶段(例如用于加密货币挖掘或网站抓取等活动),但亚马逊云科技在其公告中并未承认这一点。The Duckbill Group 的首席云经济学家 Corey Quinn 在他的时事通讯中写道:
亚马逊云科技就是这样提高价格的——不是通过提高小时费率,而是通过巧妙地改变计价维度。这一次是合理的;文档一直都说这是其工作方式,只是有一个实现错误,他们终于解决了。
根据工作负载和运行时环境的不同,Lambda SnapStart 和预置并发是可以消除 INIT 阶段性能影响的策略,从而减少冷启动延迟和初始化阶段的成本。
原文链接:
评论