FaaS 中的冷启动与缩放至零权衡

Cold start vs scaling to zero trade-off in FaaS

在我开始之前,我会说我不是 100% 确定 SO 是否是这个问题的合适 SX。让我知道我是否应该在其他 SX 上问这个问题。

问题总体上是关于 FaaS 的,但如果您能在特定 FaaS 的上下文中更好地解释这一点 platform/provider,那也很好。

我目前正在阅读有关无服务器计算(更具体地说是 FaaS)的文章,并试图让自己对这个主题有所了解。 现在几乎在任何地方,我都会遇到以下关于 FaaS 的说法:
1) 大多数 FaaS 平台支持降到零扩展;
2) FaaS 提供商根据功能执行时间(通常以毫秒为单位)向用户收费;
3) 潜在的冷启动(即创建新实例而不是重复使用现有实例)是 FaaS 中的一个问题,因为它们会大大降低应用程序的性能;

第 1 点和第 2 点被认为是好处 - 您得到的正是您所需要的(如果适用,包括什么都没有)并且您完全按照所得到的支付。
第 3 点被认为是一个缺点 - 该请求需要花费更多时间才能完成。我见过作者将冷启动描述为 FaaS 平台尚未成熟的标志。我见过从业者说他们设置周期性请求只是为了防止他们的功能变得不活跃 "going under" 从而在下次调用时触发冷启动。

我的问题是 - 为什么冷启动被视为不可取的,而不是权衡取舍
我的意思是,考虑到用户为 FaaS 中的执行时间付费,避免拥有热但空闲的函数实例通常不是最符合他们的利益吗?对我来说,这似乎是成本与高可用性的决定。我误解了什么吗?拥有一个温暖但空闲的函数实例是否不计入一个人的执行时间?即使这样:
a) 从提供者的角度来看,这不是不可取的吗(必须分配既未使用也未付费的资源)?
b) 定期发送请求(如上所述)肯定会让你付出代价,对吧?

这个回答,我先说说Azure Functions。答案或多或少会转移到其他无服务器提供商身上。

冷启动问题导致特定客户端发出的请求的执行延迟,冷启动期间请求服务的时间导致大约 5 秒到 50 秒的延迟。由于以下原因,这很糟糕:
1. 许多功能是有时间限制的,即如果执行时间超过特定限制,它们的执行将停止。所以一些用户没有得到他们的请求服务。
2. 为特定用户提供服务的时间变化很大,这在设计应用程序时总是不可取的,因为一致性是关键。

Azure Functions 是更便宜的替代方案还是使用专用的应用服务计划更便宜取决于应用程序和您尝试服务的用户数量。

Azure 函数向用户收取消耗的资源(资源消耗的计算方法是将以千兆字节为单位的平均内存大小乘以执行该函数所需的时间(以毫秒为单位))以及点击次数。 所以是的,为保持功能温暖而创建的 ping 功能确实成本更高,但成本并不是切换到 FaaS 模型的要点。 FaaS 模型主要用于创建容错服务,因此如果 API 的一部分搞砸了整个应用程序不需要关闭。