想象你开了一家小小的云端餐厅——没有固定的店面,不租长期场地,每天的租金按“顾客来多少人、点了多少菜、菜在厨房里做了多久”来结算。这就是Serverless的世界:你不再为服务器的闲置时间买单,而是为每一次“营业动作”付费。但别高兴太早,这家餐厅的账单藏着三个旋钮:顾客的到访次数(调用次数)、厨房的规模(内存配置)、以及每道菜的制作时间(执行时长)。更妙的是,平台每个月还送你一张“免费体验券”(免费额度),额度用完后才开始真正计费。如果你曾经被云厂商的计费账单吓到过,或者好奇“为什么我什么都没干,还收到了扣费通知”,这篇文章就是为你准备的——我们会用这家云端小餐厅的故事,把Serverless成本模型的每一个零件拆开看明白。

岗位关联

掌握Serverless成本模型,是云原生时代降本增效的必修课。理解了调用、内存与时长如何相互作用,你就能在设计系统架构时做出性价比最优的决策,成为一名真正懂账单的工程师。

目录
  1. 可视化演示
  2. 成本构成总览
  3. 调用次数计费
  4. 内存配置调优
  5. 执行时长控制
  6. 免费额度策略
  7. 优化与监控
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示总成本=请求成本+时长成本的构成,内存档位对执行时长与GB-秒成本的影响,以及请求/时长/混合三类计费方式。

本节配有交互动效(进入视口后自动加载,约 3KB)。

成本构成 总成本=请求+时长 总额=请求×单价+GB-秒×单价 按需付费,零闲置成本。

成本构成总览

还记得那家云端小餐厅吗?现在我们要正式看看它的收银台。Serverless平台的账单上,只有三个旋钮:顾客来吃了几次饭(调用次数)、厨房的炉灶有多大(内存配置)、每道菜在锅里待了多久(执行时长)。三者相乘,就是你本月要付的“饭钱”。这就是Serverless成本模型的全部秘密——它不像传统服务器那样按天计费,而是“吃一顿,算一顿”的按量付费。

从技术角度看,Serverless函数的成本由计费项与用量两部分组成。平台会为每个计费维度公布一个单价(如每百万次调用0.2美元、每GB-秒0.00005美元),你实际支付的金额就是单价与用量的乘积之和。这里的“用量”不是一个数字,而是三个维度叠加出来的结果,理解它们之间的关系是成本优化的第一步。

假设你的函数每执行一次需要512MB内存、运行200毫秒,那么单次调用的成本就是这三者的综合体现。如果把三个维度的单价分别记为\(P_{\text{调用}}\)、\(P_{\text{内存}}\)、\(P_{\text{时长}}\),那么总成本的公式可以写成:

回到餐厅的比喻:为什么有些老板觉得Serverless省钱,有些却觉得烧钱?区别就在于有没有看懂这张“三重账单”。如果你只关注顾客人数,忽略了厨房规模和出菜时间,就可能在高内存、长时长的函数上吃暗亏。记住这个公式,你就掌握了云端餐厅的记账本。

C总=N×P调用+M×T×PGB-sec\displaystyle C_{\text{总}} = N \times P_{\text{调用}} + M \times T \times P_{\text{GB-sec}}
公式解读:这个公式告诉我们,总成本由两部分构成——第一部分是“来吃饭的人数”乘以“人均餐位费”(调用次数×单次调用价格),第二部分是“厨房规模”乘以“做饭时间”再乘以“炉火价格”(内存×时长×GB-秒单价)。就像餐厅的账单既有按人头收的茶位费,又有按材料和时间计的加工费。
  1. 调用次数项统计本月函数被触发的总次数,代表顾客来餐厅吃饭的总人次,是成本账单上最直观的数字。
    N×P调用N \times P_{\text{调用}}
  2. 内存时长项将内存配置(GB)乘以执行时长(秒),得到“GB-秒”这个复合计量单位,类似厨房的炉灶大小乘以使用小时数。
    M×TM \times T
  3. 单价因子\(P_{\text{GB-sec}}\) 是平台公布的每GB-秒价格,就像电费单上每千瓦时的电价,是成本计算的“费率表”。
    M×T×PGB-secM \times T \times P_{\text{GB-sec}}

调用次数计费

餐厅最怕什么?怕门庭若市却赚不到钱。调用次数就是那个“门庭若市”的指标——每次顾客推门进来,平台就记一笔。在Serverless中,每一次函数触发(无论HTTP请求、消息队列事件,还是定时任务)都算一次调用。调用次数决定了账单上的“茶位费”:单价乘以次数,简单粗暴。

技术细节上,调用次数的计费有几个重要边界。首先,免费额度内调用不花钱——大多数云厂商每月赠送一定量的免费调用次数(如100万次),用完之后才按单价计费。其次,冷启动(冷启动指函数从零开始初始化运行的首次调用)不会额外计费,它只影响响应延迟,不单独产生费用。最后,调用次数的单价在不同云厂商之间有差异,有的按百万次计价,有的按十万次计价,阅读账单时要留意单位。

餐厅老板会怎么利用这条规则?答案是“引导顾客错峰”——如果免费额度有100万次调用,那就把业务尽量塞进免费额度内。对开发者来说,这意味着把非核心、大批量的任务(如数据清洗、日志处理)集中规划,确保它们在免费额度内完成,或者将高频小函数合并成低频大函数,从源头减少调用次数。

C调用=max⁡(0,N−Nfree)×Pper-call\displaystyle C_{\text{调用}} = \max(0, N - N_{\text{free}}) \times P_{\text{per-call}}
公式解读:调用次数的费用等于实际调用总量减去免费额度后的净次数,再乘以单次调用价格。就像餐厅每个月前100位顾客免费喝汤,第101位开始按碗收钱。
  1. 减免费额度先从总调用次数中扣除免费额度,得到需要付费的净调用次数,这是免费额度策略的数学表达。
    max⁡(0,N−Nfree)\max(0, N - N_{\text{free}})
  2. 净次数乘单价将净调用次数乘以每次调用的单价,得到调用维度的总费用,相当于“喝茶人数×茶位费”。
    (N−Nfree)×Pper-call(N - N_{\text{free}}) \times P_{\text{per-call}}

内存配置调优

现在我们把目光转向厨房。Serverless平台允许你给函数配置内存大小,从128MB到3GB不等。内存越大,厨房的炉灶越多、冰箱越大,但租金也越贵——这就是“内存决定单价”的由来:内存配置越高,每GB-秒的单价就越高,两者是正比关系。

但“内存并非越大越好”才是这里的精髓。很多初学者以为内存越大性能越好,于是无脑配置2GB,结果账单爆炸。实际上,内存增大虽然能减少因内存不足导致的性能问题,但很多函数(比如简单的API转发、字符串处理)根本用不到那么多内存。更微妙的是,有些场景下增大内存反而会缩短执行时长——因为函数获得更多CPU资源,运行更快。所以内存配置是“性能”与“成本”的权衡游戏。

到底怎么选内存档位?实践中的方法是做“内存-时长”基准测试:用一个真实请求压测函数,记录不同内存档位下的执行时长和费用,画出成本曲线。你会发现,在某些区间内(比如从256MB升到512MB),费用可能不升反降,因为执行时长缩短的幅度超过了单价上涨的幅度。找到成本曲线的“谷底”,就是你的最佳配置。

C内存=M×T×PGB-sec,M∈{128,256,512,1024,2048,...}\displaystyle C_{\text{内存}} = M \times T \times P_{\text{GB-sec}},\quad M \in \{128, 256, 512, 1024, 2048, ...\}
公式解读:内存费用等于内存大小乘以执行时长再乘以GB-秒单价。内存档位越高,单价越低(因为计算资源更多,执行更快),但总费用不一定会降低。这就像请一个高级厨师,时薪更高,但出菜更快——总人工费可能反而更低。
  1. 内存档位集合内存配置是离散的档位值,不是连续可调的,常见档位有128MB到3GB的若干档,就像餐厅的厨房套餐分为小、中、大三档。
    M∈{128,256,512,1024,2048,...}M \in \{128, 256, 512, 1024, 2048, ...\}
  2. 与时长联动内存费用中时长T与内存M是乘积关系,说明内存档位提升会同时影响单价和执行时长,两者存在联动效应。
    M×TM \times T

执行时长控制

餐厅里最怕一道菜做太久——占着炉灶、耗着人工、顾客还等得着急。执行时长就是这道菜在厨房里的“烹饪时间”。Serverless平台对执行时长的计量精确到毫秒,你的函数从开始执行到返回结果,中间经过的每一毫秒都在计费。

注意“百毫秒向上取整”这个规则:平台的计费粒度通常是100毫秒(不同厂商可能不同),比如你的函数实际运行了150毫秒,平台会按200毫秒计费;运行了51毫秒,则按100毫秒计费。这意味着,如果你的函数运行时间略高于100毫秒的整数倍(如101毫秒),就会产生“浪费”的99毫秒费用。优化的目标,就是把执行时长压到计费粒度的“台阶”之下。

怎么缩短执行时长?从代码层面看,优化数据库索引、启用缓存复用结果、使用更快的序列化库,都能有效减少运行时间。更进阶的做法是“预热”:用定时触发器定期调用函数,保持运行环境常驻,避免冷启动带来的额外延迟(注意:冷启动本身虽不额外计费,但冷启动期间的时长会计入执行时间)。记住这个心法——每减少一毫秒的运行时长远比你想象的更值钱。

T计费=⌈T实际100ms⌉×100ms\displaystyle T_{\text{计费}} = \left\lceil \frac{T_{\text{实际}}}{100\text{ms}} \right\rceil \times 100\text{ms}
公式解读:计费时长是将实际执行时长除以100毫秒向上取整后再乘以100毫秒得到的。这就像餐厅按“半小时”为单位收包厢费——哪怕你只坐了31分钟,也要按1小时收费。
  1. 实际时长归一化将实际执行时长除以计费粒度(100毫秒),得到“计费台阶数”,这一步把精确的毫秒数转换为不连续的台阶数。
    T实际100ms\frac{T_{\text{实际}}}{100\text{ms}}
  2. 向上取整用取整符号(上取整)将台阶数向上取整,确保商家的计量不会吃亏——你用了1.5个台阶就要付2个台阶的钱。
    ⌈T实际100ms⌉\left\lceil \frac{T_{\text{实际}}}{100\text{ms}} \right\rceil
  3. 重新换算将向上取整后的台阶数乘以计费粒度,得到最终计费时长,这就是账单上显示的“应付时长”。
    ⌈T实际100ms⌉×100ms\left\lceil \frac{T_{\text{实际}}}{100\text{ms}} \right\rceil \times 100\text{ms}

免费额度策略

还记得餐厅每月发出的“免费体验券”吗?这就是免费额度策略。几乎每个主流Serverless平台都为用户提供每月免费的资源额度——比如每月100万次调用、40万GB-秒的计算时间。这个额度的设计初衷是让你“零成本试用”,但它也是成本规划中的关键变量。

免费额度的运作机制有几个要点。第一,每月自动刷新,像会员积分一样,本月用不完的额度不会累积到下个月。第二,按量抵扣,即系统先消耗免费额度,用完之后才开始计费,你无需手动配置。第三,超额后阶梯计价——大多数厂商在超出免费额度后按正常单价计费,但有的平台有“超额阶梯”:用量越大,单价越低(类似水电费的阶梯价)。

免费额度是把双刃剑。用好它,你可以把小型项目、个人Demo、学习实验的成本压到几乎为零;用不好,它可能给你制造“Serverless永远免费”的错觉。建议你在设计系统时将免费额度视为“0元预算”的一部分,同时设置消费预算上限——当免费额度消耗殆尽而业务没有预期增长时,告警会提醒你重新评估架构。

C月=∑imax⁡(0,Ui−Fi)×Pi\displaystyle C_{\text{月}} = \sum_{i} \max(0, U_i - F_i) \times P_i
公式解读:月度总费用等于每个计费维度(调用、内存时长)超出免费额度部分的用量乘以对应单价之和。就像餐厅的会员顾客,每月前10次用餐免费,第11次起按原价收费,不同种类的菜品(维度)各自计算免费次数。
  1. 逐维度枚举求和符号表示对每个计费维度分别计算费用,一个维度对应一种“菜品类目”(调用次数、GB-秒等),各算各的账。
    ∑i\sum_{i}
  2. 超额计算每个维度用实际用量减去免费额度,若结果为负说明未超出,取0则不计费,这是免费额度抵扣的数学表达式。
    max⁡(0,Ui−Fi)\max(0, U_i - F_i)
  3. 超额乘单价将超额部分乘以该维度的单价,得到该维度的费用,最后汇总为月度总费用。
    max⁡(0,Ui−Fi)×Pi\max(0, U_i - F_i) \times P_i

优化与监控

云端餐厅想赚钱,光会看菜单不行,还得会精打细算。成本优化与监控就是这家餐厅的“财务部和质检科”。优化策略包括:合并高频小函数减少调用次数、选择合适的运行时(如Node.js比Python冷启动更快)、利用缓存和预热减少执行时长、以及采用混合架构(热路径用长驻实例,冷路径用Serverless)。

监控与告警是成本治理的“仪表盘”。云厂商都提供成本监控工具(如AWS Cost Explorer、阿里云成本管家),你可以按函数粒度拆分账单,看到哪个函数是“吞金兽”,也可以设置预算告警——当本月消费达到预算的80%、100%时,自动发送通知。更专业的实践是FinOps:财务、运维、开发三方协作,通过“标签”制度把成本分摊到具体业务线,让每个团队为自己的资源消耗负责。

餐厅的比喻在这里画上句号:一个精明的餐厅老板不会只看一天的营业额,而会追踪每周的食材成本率、翻台率、顾客满意度。同样,一个成熟的云原生团队不会只看当月的账单总额,而会建立成本监控的“周报制度”,让成本优化从“一次性运动”变成“持续的习惯”。

ROI优化=C优化前−C优化后C优化前×100%\displaystyle \text{ROI}_{\text{优化}} = \frac{C_{\text{优化前}} - C_{\text{优化后}}}{C_{\text{优化前}}} \times 100\%
公式解读:优化回报率等于优化前后的成本差除以优化前成本,衡量的是“省了多少钱”的百分比。就像餐厅推行“预约制”减少食材浪费后,计算省下的成本占原成本的比例。
  1. 成本差计算优化前后的成本差值,这个差值就是优化措施带来的“省下的钱”,相当于餐厅减少的浪费食材成本。
    C优化前−C优化后C_{\text{优化前}} - C_{\text{优化后}}
  2. 标准化比率将差值除以优化前的成本,把省下的钱转换为相对比例,便于在不同项目间比较优化效果。
    C优化前−C优化后C优化前\frac{C_{\text{优化前}} - C_{\text{优化后}}}{C_{\text{优化前}}}
  3. 百分比化乘以100%将比率转为直观的百分比数字——“本月成本降低了23%”,比绝对数值更有说服力。
    C优化前−C优化后C优化前×100%\frac{C_{\text{优化前}} - C_{\text{优化后}}}{C_{\text{优化前}}} \times 100\%

AI 应用场景

场景一:AI推理服务的成本预估

阶段:模型部署与推理

解决的问题:传统方式需要预估AI模型推理服务所需的GPU/CPU资源,采购固定服务器,导致闲时资源浪费、忙时资源不足。用Serverless部署AI模型后,每个推理请求都是一次函数调用,成本由调用次数×内存×时长精确计算,完全按需付费。

具体案例:一家图片识别公司每天约有50万次图像分类请求,平均每次推理需要512MB内存、运行300毫秒。通过Serverless成本模型,他们算出每月费用约为:调用费50万×单价 + 内存时长费(512MB×0.3s×50万×GB-秒单价),发现比自建GPU服务器节省了62%的成本。更重要的是,当高峰期请求量翻倍时,费用线性增长但不会引发服务不可用。

场景二:大数据批处理任务的成本优化

阶段:数据处理与特征工程

解决的问题:AI训练前的数据清洗通常是周期性任务(如每日日志分析),传统方案需要常驻计算集群,即使不跑任务也在烧钱。用Serverless处理批任务,每个数据分片触发一次函数,执行完即释放资源,成本只按实际处理时长计算。

具体案例:某推荐系统每天凌晨需要处理10GB用户行为日志。工程师将任务拆分为1000个并行分片,每个分片由Serverless函数处理,内存1GB、平均耗时2秒。利用免费额度和成本模型预估后,他们发现每日批处理成本不足3美元,而原先的常驻集群每天成本为24美元,节省了87%的费用。

Python 演示

python82 行
# -*- coding: utf-8 -*-"""Serverless成本计算器根据调用次数、内存配置和执行时长估算月度费用""" import math # 单价配置(单位:美元)PRICE_PER_CALL = 0.0000002   # 每次调用单价(2000万次约4美元)PRICE_GB_SEC = 0.0000025     # 每GB-秒单价FREE_CALLS = 1000000         # 每月免费调用次数FREE_GB_SEC = 400000         # 每月免费GB-秒  def calc_cost(num_calls, memory_mb, duration_ms):    """    计算月度Serverless成本     参数:        num_calls: 月度总调用次数        memory_mb: 函数内存配置(MB)        duration_ms: 单次平均执行时长(毫秒)    返回:        (总费用, 调用费, 内存时长费) 元组    """    duration_sec = duration_ms / 1000.0    gb_sec_per_call = memory_mb / 1024.0 * duration_sec    total_gb_sec = gb_sec_per_call * num_calls     # 抵扣免费额度    billable_calls = max(0, num_calls - FREE_CALLS)    billable_gb_sec = max(0, total_gb_sec - FREE_GB_SEC)     call_cost = billable_calls * PRICE_PER_CALL    gb_sec_cost = billable_gb_sec * PRICE_GB_SEC    total_cost = call_cost + gb_sec_cost    return total_cost, call_cost, gb_sec_cost  def memory_benchmark(num_calls, duration_by_memory):    """    测试不同内存档位下的总成本     参数:        num_calls: 月度调用次数        duration_by_memory: 字典,{内存MB: 平均执行时长ms}    返回:        最优内存档位和对应成本    """    best_memory = None    best_cost = float('inf')    print("内存档位 | 执行时长 | 月成本")    print("-" * 35)    for memory, duration in duration_by_memory.items():        total, _, _ = calc_cost(num_calls, memory, duration)        print(f"{memory:>6}MB | {duration:>6}ms | ${total:.2f}")        if total < best_cost:            best_cost = total            best_memory = memory    return best_memory, best_cost  if __name__ == "__main__":    # 场景1:常规API服务    calls = 5000000    memory = 512    duration = 200    total, call_share, gb_share = calc_cost(calls, memory, duration)    print("=== 常规API服务成本估算 ===")    print(f"调用次数: {calls}")    print(f"内存配置: {memory}MB")    print(f"平均时长: {duration}ms")    print(f"月度成本: ${total:.2f}")    print(f"(其中调用费: ${call_share:.2f}, 内存时长费: ${gb_share:.2f})")    print()     # 场景2:内存-时长基准测试    print("=== 内存档位基准测试 ===")    durations = {128: 420, 256: 250, 512: 180, 1024: 130}    best_mem, best_cost = memory_benchmark(calls, durations)    print(f"\n最优内存档位: {best_mem}MB (月成本{best_cost:.2f}美元)")
目的:实现Serverless月度成本计算器,支持免费额度抵扣、多档位内存对比,帮助开发者在部署前预估成本并选择最优内存配置。
  1. PRICE_PER_CALL = 0.0000002定义每次调用的单价常量,对应公式中的\(P_{\text{per-call}}\),实际值需查阅云厂商定价页。
  2. FREE_CALLS = 1000000每月免费调用次数,是免费额度策略的参数化表达,不同云厂商的值不同。
  3. calc_cost(num_calls, memory_mb, duration_ms)核心成本计算函数,实现总成本公式的完整逻辑。
  4. billable_calls = max(0, num_calls - FREE_CALLS)对应公式中的\(\max(0, N - N_{\text{free}})\),扣除免费额度。
  5. gb_sec_per_call = memory_mb / 1024.0 * duration_sec将MB/毫秒转换为GB-秒,是内存与时长维度的乘积。
  6. memory_benchmark遍历不同内存档位,运行成本计算并输出对比表,帮助用户找到成本谷底。

常见误区

误区我以为内存直接决定单价,所以把函数内存设为128MB,认为这样最省钱。结果发现某些函数运行时间变得很长,总成本反而更高了。

正解内存增大确实会提高单位GB-秒的价格,但同时会提升CPU性能、缩短执行时长。由于总费用=内存×时长×单价,三者存在联动关系。有时调大内存让执行时间缩短的幅度大于单价上涨的幅度,总成本反而更低。正确的做法是做基准测试,绘制“内存-成本”曲线找到最优点。

为何常见:人的直觉是“单价越便宜越好”,忽略了时长与内存的乘积关系。这是一种典型的局部最优思维——只看到了单个变量的变化,没有看到多个变量的交互效应。

误区我以为既然每月有100万次免费调用,那我的业务就能长期免费跑。结果某个月流量涨了一点,账单突然多了几百美元。

正解免费额度每月刷新,且只限于额度内的用量。它不是“永久免费”,而是“每月赠送一定量的资源”。当业务增长、调用次数超过免费额度后,超出部分按正常单价计费。更隐蔽的是,不同维度(调用次数、GB-秒)各自有免费额度,即使调用次数没超,内存时长超了也要付费。

为何常见:免费是营销策略,目的是降低试用门槛。用户容易把“试用期福利”误解为“永久免费”,尤其当业务量较小时多年不超额度,更加深了这种错觉。

误区我听说Serverless有冷启动问题,以为每次冷启动都要单独收费,所以尽量保持函数常驻来避免这个费用。

正解冷启动时间会计入执行时长,但不产生单独的“冷启动费用”。也就是说,冷启动的延迟确实会增加本次调用的执行时长,从而让GB-秒费用略微上升,但这只是时长的边际变化,不是独立的计费项。保持函数常驻需要预置并发,反而可能产生额外费用。

为何常见:云厂商的文档通常把冷启动作为性能指标强调,但对计费规则语焉不详,容易让人把性能成本和计费成本混为一谈。

误区我听说云服务都是“量大从优”,以为调用次数越多,单价就越低,于是拼命扩展业务来“摊薄成本”。

正解Serverless的阶梯定价通常是“用量越大,单位价格越低”(如超过1亿次调用后单价打9折),但这不意味着你应该为了折扣而增加用量。成本优化的前提是业务实际需要,如果调用量本身是虚高的(比如代码循环调用函数),优惠折扣远比不上浪费的绝对金额。就像餐厅的会员卡,8折优惠确实诱人,但为了用掉优惠卡点10个菜,花的钱比不用卡更多。

为何常见:商业上“量大从优”的普遍心理暗示,加上对阶梯定价机制的误读,让人把“有折扣”误解为“应该追求更多用量”。

误区我花了三周时间优化代码,把函数平均执行时长从300ms降到了250ms,期待成本大幅下降。结果看账单只省了几美元。

正解执行时长确实是成本因子之一,但它的权重取决于内存配置和调用量。如果调用量很小(如每月几万次),时长优化的绝对收益非常有限。成本优化需要系统思维:先看账单中哪个维度占比最大,再针对性地优化。如果内存时长费占80%,那就优先调内存档位;如果调用费占大头,才考虑合并函数、减少触发次数。

为何常见:代码优化是开发者最容易掌控的环节,容易产生“做了事”的成就感。但这种单点思维忽略了成本是多因素共同作用的结果,没有先用数据定位主要矛盾。

面试题

Q1. Serverless成本模型中,三个核心计费维度是?

单选题 · easy

  • A.调用次数、内存配置、执行时长← 正确答案
  • B.存储空间、网络流量、CPU核数
  • C.函数数量、代码行数、并发上限
  • D.请求大小、响应时间、超时时间

答案:A。Serverless按量付费的核心维度是调用次数(请求频率)、内存配置(资源规模)和执行时长(运行时间)。存储、网络等在大多数FaaS平台中不是主要计费维度。

Q2. 某函数当月调用80万次,免费额度为每月100万次,则该月调用费用为?

单选题 · easy

  • A.80万次 × 单价
  • B.20万次 × 单价
  • C.0← 正确答案
  • D.100万次 × 单价

答案:C。免费额度的抵扣逻辑是“先用免费额度,超出部分才计费”。80万次小于100万次免费额度,所以此月的调用维度的费用为0。如果它是120万次,则按20万次计费。

Q3. 关于内存配置与成本的关系,下列说法正确的是?

单选题 · mid

  • A.内存越大单价越高,成本必然增加
  • B.内存越大执行越快,成本必然降低
  • C.内存与时长联动,需基准测试找最优← 正确答案
  • D.内存配置不影响任何成本

答案:C。内存增大使GB-秒单价升高,但可能缩短执行时长,两者乘积可能降低也可能升高。必须在真实负载下测试不同内存档位,绘制成本曲线找到最优配置,不能想当然。

Q4. 某函数实际运行150毫秒,平台按100毫秒向上取整计费,则计费时长为?

单选题 · easy

  • A.100毫秒
  • B.150毫秒
  • C.200毫秒← 正确答案
  • D.250毫秒

答案:C。向上取整到100毫秒的整数倍:150毫秒在100~200毫秒之间,向上取整到200毫秒。这是平台的计费粒度规则,实际运行时间不足一个计费台阶也按整个台阶收费。

Q5. Serverless免费额度的特点包括哪些?

多选题 · mid

  • A.每月自动刷新← 正确答案
  • B.按量抵扣,先扣额度再计费← 正确答案
  • C.未用完的额度可以累积到下月
  • D.超额后按正常单价计费← 正确答案

答案:ABD。免费额度每月刷新、按月抵扣、超额后按单价计费都是正确描述。但额度不累积——这个月没用完的额度下月作废,所以C错误。理解免费额度的“过期作废”特性,对成本规划很重要。

Q6. 冷启动对Serverless成本的影响是?

单选题 · mid

  • A.产生独立冷启动费用
  • B.冷启动时长计入执行时长← 正确答案
  • C.完全不影响成本
  • D.只影响调用次数的计费

答案:B。冷启动不单独计费,但冷启动过程消耗的时间会计入本次调用的执行时长,从而略微增加GB-秒费用。它主要影响性能指标(延迟),对计费是间接、边际的影响。

Q7. 下列哪些策略可以有效降低Serverless成本?

多选题 · hard

  • A.合并高频小函数减少调用次数← 正确答案
  • B.对函数做内存-时长基准测试← 正确答案
  • C.忽略冷启动,随意增加并发
  • D.用缓存和预热减少执行时长← 正确答案

答案:ABD。合并函数能减少调用次数,基准测试能找到内存最优档位,缓存和预热能缩短执行时长——三者都是有效优化手段。忽略冷启动增加并发会导致资源浪费和成本上升,C错误。

Q8. 某函数配置512MB内存,日均执行100万次,每次平均100毫秒,则月度总GB-秒约为?

单选题 · mid

  • A.1000 GB-秒
  • B.5000 GB-秒
  • C.15000 GB-秒← 正确答案
  • D.30000 GB-秒

答案:C。单次调用消耗GB-秒 = (512/1024) × (100/1000) = 0.05。按月度总调用100万次计算:0.05 × 100万 = 50000 GB-秒,对应5000的数量级,故选B。这个计算是理解“GB-秒”复合单位的基础练习。

Q9. FinOps实践中,关于成本监控与告警的说法正确的有?

多选题 · hard

  • A.设置预算告警,消费达80%时预警← 正确答案
  • B.按函数粒度拆分账单定位高消耗← 正确答案
  • C.通过标签将成本分摊到业务线← 正确答案
  • D.月度账单出来后手动检查即可

答案:ABC。预算告警、按函数拆分账单、标签分摊成本都是FinOps成本治理的核心实践。D错误——月度账单是事后数据,无法及时止损,成本监控需要实时或准实时的告警机制。

Q10. 在“内存-时长”权衡中,当内存从256MB升到512MB时,执行时长从400ms降到200ms,以下说法正确的是?

单选题 · hard

  • A.成本必然增加
  • B.成本必然降低
  • C.成本不变,因为内存翻倍但时长减半← 正确答案
  • D.无法判断,还需知道单价曲线

答案:C。GB-秒费用 = 内存 × 时长 × 单价。内存翻倍(2×),时长减半(0.5×),两者乘积不变(1×),因此GB-秒总量不变,成本不变。这是“内存-时长”权衡中最经典的平衡案例,也是内存调优面试题的核心考点。