作者 | Renato Losio
译者 | 明知山
策划 | 丁晓昀
最近,谷歌云内容主管 Forrest Brazeal 表示,对于开发者来说,无服务器函数是云端最大的计费风险,因为我们没有简单的方法来防止递归调用,而且它们几乎可以无限地在所有的云提供商中扩散。
Brazeal 提到了云开发者撰写的一些文章,这些文章描述了那些导致无服务器函数“失控”和巨额账单的错误。其中,Cloudsoft 工程副总裁 Aled Sage 报告了亚马逊云科技的一个 Lambda 巨额账单的例子,Tom Wright 描述了发生在 Azure 上一个可怕的无服务器事故,Milkie Way 创始人 Sudeep Chauhan 解释了他如何在谷歌云上测试 Firebase 和 Cloud Run 花费了 72000 美元。Brazeal 警告说:
这一切发生得太快了。它就像是云灾难的山洪暴发。这不只是忘记了一个 GPU 实例,导致每小时多花费几美元的成本,而是你睡觉之前的账单是 5 没有,等你一觉醒来变成了 5 万美元这一切都发生在你的预算有机会发出警报之前。
在讨论谷歌云、亚马逊云科技和 Azure 的具体限制和保护措施时,作者认为它们没有提供安全的方法来防范风险,因为这些供应商都还没有完全保护开发者的机制。Brazeal 补充说:
要保护自己不在一些资源(如 VM)上花太多的钱是很容易的,但现在还没有什么好的方法来保证你不会被来自函数的意外账单惊到……
亚马逊云科技有一个页面专门介绍了导致 Lambda 函数计费问题的递归反模式,并承认:
大多数编程语言都存在无限循环的可能性,而这种反模式在无服务器应用程序中会消耗更多的资源。
对函数进行并发性限制可能会有所帮助,但这会给开发人员造成一种错误的安全感假象:它可以在递归分叉式场景(无限的函数扩展)中提供保护,但不能避免几个小时内的大笔费用,例如使用相同的 S3 桶作为函数的源和目标。Qube Cinema 技术架构师 Sudhir Jonathan 去年报道过这样的案例。亚马逊云科技首席开发者 James Beswick 写了一篇关于如何使用 Amazon S3 和 AWS Lambda 避免递归调用的文章,他解释说:
如果意外触发递归调用,可以按下 Lambda 控制台上的“Throttle”按钮将函数并发性降至零并中断递归循环。
正如云顾问、亚马逊云科技无服务器英雄(Serverless Hero)Yan Cui 最近所说的那样,虽然有很多可能的优化措施来节省使用 Lambda 的成本,但并没有提供自动断路器。在云供应商可能引入的缓解措施中,Brazeal 建议采用近实时计费方式,对云计费设置上限,并更好地自动化异常检测和递归工作负载修复。
The Duckbill Group 云经济学家 Corey Quinn 在他的新闻稿中评论道:
事实上,甲骨文“对免费层非常认真,除非用户确定要升级,否则不会让用户增加费用。”这是他们平台最棒的地方之一。
去年,时任 A Cloud Guru 内容和社区总监的 Brazeal 强调了亚马逊云科技缺少沙盒账户和硬收费限制。
https://www.infoq.com/news/2022/08/recursive-serverless-functions/