S

Serverless 真的像大家说的那么便宜吗?

2025-05-24

Serverless 真的像大家说的那么便宜吗?

本文是#ServerlessSeptember的一部分。在这个涵盖无服务器内容的合集里,您可以找到其他实用文章、详细教程和视频。九月份,社区成员和云倡导者每天都会发布新文章——没错,就是每天。访问https://docs.microsoft.com/azure/azure-functions/ ,了解更多关于 Microsoft Azure 如何支持您的无服务器功能的信息。

总结:除非你运营规模庞大,否则无服务器架构不仅价格低廉,简直是物超所值。你应该立即开始

人们使用无服务器最令人信服的理由之一是成本。

在无服务器应用中,您只需在应用运行时付费。这听起来很棒!如果您可以只在应用繁忙时付费,那为什么还要为始终运行的应用付费呢?

我的意思是,你不会在家里一直开着水龙头。需要的时候就开,不需要的时候就关。除非你是我的孩子。然后你洗完手,就一直开着水龙头,因为你的注意力只有3秒钟,然后我们去玩我的世界吧!

水龙头流水

无服务器听起来很划算。趁着有人还没意识到问题所在并修改规则,赶紧入手吧。但无服务器到底有多便宜呢?

我的意思是,拜托,这有什么问题吗?

细分 Azure Functions 的成本

当你考虑无服务器的成本时,它确实看起来非常便宜。想想看,这么便宜还能赚钱吗?例如,Azure Functions 消费计划每月会向你收取三项费用

  • 处决
  • 执行时间
  • 贮存

执行次数很容易理解:你的函数执行了多少次?每执行一百万次,你需要支付 20 美分。哇,这感觉就像是免费的一样。而且,你每个月的前一百万次执行都是免费的。

换个角度来看,你的函数每天可以运行 32,258 次,而成本为零。也就是每分钟 22 次。如果你每天每秒都执行该函数,那么就是 2.628e+6 次,也就是 2,628,000 次。这甚至不到 40 美分。

但您需要付费的不仅仅是执行费用,您还需要为执行时间付费。

执行时间有点难以量化。它本质上是函数在执行过程中消耗的资源量以及消耗时长的计费。单位是 GB-s,或者“千兆字节秒”。

它的工作原理如下:每当您的函数执行时,Azure 都会计算其使用的内存量,并将其向上舍入到最接近的 128MB。因此,如果您的函数仅使用 25MB 内存,则计为 128MB。它还会计算其运行时间,并将其向上舍入到最接近的 100 毫秒。

因此,如果你有一个非常简单的“Hello World”无服务器函数,每次运行时将占用 128MB 内存,也就是 0.125GB。要计算执行成本,你需要将执行次数乘以函数的执行时长。对于“Hello World”,这个成本将是 100ms,因为这是最低限度的。

现在假设你每天每秒都运行该函数。我们已经说过,也就是 2,628,000 次。取这个数字,然后乘以该函数运行所需的毫秒数(100 毫秒)。

2,628,000 * .100
Enter fullscreen mode Exit fullscreen mode

这样我们就得到了262,280。现在我们必须将这个数字乘以函数每次运行时使用的内存量,也就是我们之前提到的 0.125。

262,800 * .125
Enter fullscreen mode Exit fullscreen mode

这等于32,850。好的,所以总执行时间为 32,850 GB/s。这需要花费多少钱?

没事。因为前 400K GB 是免费的。

好的。所以所有这些执行操作只花费了我们40美分,而执行时间却没有任何成本。这看起来完全是双赢。是谁设计了这个商业模式?

存储是指代码占用的存储空间。在后台,Azure 使用Azure 存储帐户来存储您的代码、任何触发逻辑以及您可能要写入的任何队列。

如果您只存储代码,那基本上没什么。Azure 存储成本甚至在您达到第一个 GB 之前都不会开始计算。如果您要在队列中存储大量数据,则存储成本可能会开始上升,但即使如此,您也需要使用大量的数据。请记住,存储并非免费,但几乎是免费的。

在这种规模下,Serverless 几乎是在为我们付费。但是当我们规模扩大时会发生什么?比如大幅扩张?

Facebook规模

假设我们处理的流量和 Facebook 规模相当。这个数字很难确定,但Facebook 报告称,每秒有 51 万条评论发布,29.3 万条状态更新,13.6 万张照片上传。这还远远不够,但如果只考虑这三项,那么每秒的执行次数就是 93.9 万次。

一个月执行死刑的人数是多少?

939,000 * 60 (seconds in a minute) * 60 (minutes in an hour) * 24 (hours in a day) * 30 (days in a month)
Enter fullscreen mode Exit fullscreen mode

这样就得到了2.43389e12。我现在都不知道这个数字该怎么表达了。每执行百万次,收费 20 美分(前 100 万次免费)……

(2.43389e12 - 1,000,000 free executions ) / 1,000,000 ) * .20 cents per execution
Enter fullscreen mode Exit fullscreen mode

准备好了吗?486,777.40美元。别忘了那40美分。

这只是执行成本。现在我们添加执行时间。

为此,我们需要知道这些操作需要多长时间。发表评论可能不到一秒,但上传照片可能需要几秒钟。我们假设所有 939K 次操作执行的时间都为 1 秒,这是一个任意的整数。为了计算出每月执行的次数……

2.43389e12 * 1
Enter fullscreen mode Exit fullscreen mode

你可能在心里就能做到这一点。我差点就做到了。

那么这些操作会消耗多少内存呢?这取决于服务器内存中加载的代码量。这个数字很难确定,但我们姑且假设为 128MB。这看起来似乎很大。我觉得用这个大小就能加载一个大型函数了。

所以我们的最终等式是......

2.43389e12 * .125
Enter fullscreen mode Exit fullscreen mode

这样我们就得到了 3.04236e11 GB-s。前 400K GB-s 是免费的。之后就是 0.000016/GB-s。

(3.04236e11 - 400,000 free GB-s) * 0.000016 per GB-s
Enter fullscreen mode Exit fullscreen mode

执行时间成本总计为4,867,769.60 美元。因此,总费用为……

486,777.40 execution cost + 4,867,769.60 execution time
Enter fullscreen mode Exit fullscreen mode

总计高达5,354,547 美元。每月。每月。而且我们甚至还没有接近 Facebook 的实际收入。

所以每月只有500多万?就这些吗?

不,这还不是全部。

关于带宽

带宽费用适用于您在云端执行的所有操作,包括无服务器函数。如果您拥有自己的数据中心,则需要支付带宽费用。如果您在云端运行,则需要支付带宽费用。无论哪种情况,都需要支付带宽费用。

那么带宽到底多少钱呢?Azure 的带宽收费是浮动的。用得越多,价格越便宜。前 5 GB 是免费的。之后 5 GB 到 10 TB 的带宽费用为每 GB 8.7 美分。接下来的 40 TB 带宽费用降至每 GB 8.3 美分,以此类推,直到超过 150 TB 时,费用降至每 GB 5 美分。

你觉得 Facebook 用了多少带宽?呃。我都算不出来,都不知道从哪儿算起。但我敢打赌,绝对比每月 530 万美元的执行成本高得多。

这就是Facebook拥有自己的数据中心的原因。到了一定时候,规模变得足够大,打造自己的云平台就变得合情合理了。

但你可能没有自己的云,所以回到现实。我们仍然没有回答“对于一个“典型”应用来说,无服务器到底贵不贵”这个问题。让我们来回答这个问题。

典型的无服务器成本

我和我的朋友之前写过一个应用程序,虽然只有几个人在使用,但总体来说使用率不高。它每月处理大约 2 万个请求。

不用看也知道,我们的处决是免费的。离百万目标还差得远呢。

这是我们过去 30 天的成本仪表板。

无服务器成本仪表板

事实上,我们无需为托管和运行此应用程序支付任何费用。完全免费。

我们产生的带宽费用。这是因为我们的无服务器应用程序是一个 API,所以它会将数据从 Azure 发送出去。如果这是一个微服务,只是在 Azure 的同一区域内移动数据,那么我们的带宽成本也将为零。这就是无服务器真正优势所在。

真正的交易

那么无服务器的成本是否被高估了?

不,这是真的。在规模达到一定程度之前,你几乎不需要支付任何费用。无服务器是近几年来最令人瞩目的技术之一。再加上自动无限扩展,以及你甚至不需要再处理运行时,无服务器绝对是明智之举。

文章来源:https://dev.to/azure/is-serverless-really-as-cheap-as-everyone-claims-4i9n
PREV
学习 Kubernetes,第一部分,基础知识、部署和 Minikube
NEXT
改进你的 Dockerfile,最佳实践深入了解 Dockerfile