老王的川菜馆,后厨养着五位固定师傅。周一冷清,师傅们站着聊天照样领工资;周末爆满,五个人颠勺颠到手抽筋还是出不了菜。老王一算账,一年光固定人力就吃掉四成利润。直到他把目光投向隔壁共享厨房——为什么不把“养人”改成“按单叫工”? Serverless(无服务器计算)就是这场后厨革命的云上翻版:不必自掏腰包养一批闲置服务器,只把代码交给云平台,请求一到平台自动拉起计算资源,任务跑完立刻释放,按调用次数和计算时长结账。它最擅长两类“体力活”:一是ETL数据处理,把杂乱原始数据清洗、转换、入库;二是AI推理,把训练好的模型“开门迎客”跑预测。本文用共享后厨的比喻,拆解Serverless在这两个场景的落地姿势。

岗位关联

掌握Serverless在ETL管道和AI推理中的落地策略,意味着你能在流量过山车般的业务中用更低的成本扛住洪峰,成为团队里“既会省钱又扛得住事”的架构师。

目录
  1. 可视化演示
  2. 事件驱动管道
  3. 数据清洗加工
  4. 弹性推理服务
  5. 冷启动优化
  6. 资源限制应对
  7. 成本效益选型
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示Serverless ETL事件驱动数据管道(S3上传->触发Lambda->转换输出)、AI推理部署(API Gateway->Lambda模型推理+冷启动优化)、成本对比(Always-On固定成本vs Serverless按需付费+scale-to-zero),交互切换核心维度。

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

Serverless ETL事件驱动管道 S3数据上传触发事件,Lambda自动执行ETL转换 转换结果写回S3或加载到Redshift,全程无服务器管理 自动扩缩容,按调用次数付费,间歇工作负载成本极低 pipeline: S3 upload -> event -> Lambda ETL -> S3/Redshift 事件驱动+自动扩缩+按需付费

事件驱动管道

老王的共享后厨里没有固定的“上班时间”,只有一本厚厚的订单簿。客人下单是“事件”,订单铃一响,后厨才点火备菜。Serverless的ETL管道正是这样的逻辑:文件上传到对象存储、消息落到消息队列、定时器敲响——这些“订单”会直接触发对应的函数代码开始干活。没有订单的时候,函数就像一个待命的钟点工,不占任何资源,也不花一分钱。

事件源是“订单来源”,触发器是“传菜铃”,函数是“干活的人”。架构上,ETL管道被拆成一个个独立的函数,通过事件投递串联:抽取函数处理完一批数据,把结果放到下一个存储桶或消息队列,自动触发转换函数。每个环节只关心自己那一道工序,做完了把菜往传菜口一放就撒手,下一环听到铃声自然会接。

常见的触发源包括对象存储的创建事件、Kafka等消息队列的消息、API网关的HTTP调用、定时器等。平台负责保证“事件不丢”与“至少一次投递”,开发者只需要写处理逻辑。管道的吞吐能力取决于单函数的处理效率与并行度,用吞吐公式可以估算一条管道的能力:

后厨流水线最美妙的地方在于:切菜师傅永远不用催洗菜阿姨,因为水槽里有菜,铃声自然会响。事件驱动管道让每个环节都“按需开工、按量结算”,这就是Serverless式ETL的第一层优雅。

Throughput=BatchSizeTlatency\displaystyle \text{Throughput} = \frac{\text{BatchSize}}{T_{\text{latency}}}
吞吐量 = 每批处理的数据条数 ÷ 处理一批所花的时间。批越大、耗时越短,管道每秒能吞下的数据就越多。
  1. 吞吐量Throughput 表示管道每秒能处理的数据批次,是衡量管道能力的核心指标。
    Throughput\displaystyle \text{Throughput}
  2. 批量大小BatchSize 是指一批打包处理的数据条数;条数越多,单批的产出越高。
    BatchSize\displaystyle \text{BatchSize}
  3. 单批耗时T_latency 表示从这一批数据进入管道到完成处理所花的总时间,单位是秒。
    Tlatency\displaystyle T_{\text{latency}}
  4. 除法关系吞吐量与单批耗时成反比——每批处理得越快,同样一秒内能完成的批次就越多。
    BatchSizeTlatency\displaystyle \frac{\text{BatchSize}}{T_{\text{latency}}}

数据清洗加工

食材从菜市场拉回来,带着泥、带着烂叶子,不能直接下锅。后厨第一道工序是“择菜、洗菜、切段”。ETL里的Extract就是“进货”——从各种源头拉来原始数据;Transform是“择洗切”——去重、格式统一、字段校验;Load是“入冷库”——写进数据仓库或数据湖。

传统ETL用常驻集群半夜跑批,负载恒定、闲时浪费。Serverless把ETL从“定时大厨”变成“按件计酬的小工”:一条消息触发一个函数实例,处理完即释放。每个数据分片独立处理,天然并行——一万个文件到达,平台就拉起一万个函数实例同时干活,速度远超固定几台机器。

Transformer函数内部做字段映射、单位换算、异常值剔除,不合规的记录可以丢弃或投进死信队列。清洗之后通常还会做聚合和压缩,显著减小落地体积。衡量清洗效果有一个直观指标——数据缩减率:

把一筐带泥的土豆变成洁净的土豆块,Serverless按处理的数据量和时长付费,清洗得越干净,后续入冷库越省钱。这也是ETL函数偏爱Serverless的关键——处理完即走,绝不养闲人。

Ratio=1−VoutVin\displaystyle \text{Ratio} = 1 - \frac{V_{\text{out}}}{V_{\text{in}}}
缩减率 = 1 - 清洗后体积 ÷ 清洗前体积。比值越大,说明挤掉的“水分”越多,后续入库和查询的成本越低。
  1. 原始体积V_in 是进入清洗管道前的原始数据体积,对应菜市场拖回来带泥带土的整筐菜。
    Vin\displaystyle V_{\text{in}}
  2. 输出体积V_out 是清洗去重后真正入冷库的数据体积,对应择好切好的净菜。
    Vout\displaystyle V_{\text{out}}
  3. 剩余比例V_out 除以 V_in 得到清洗后还剩下多少比例的数据,这个数越接近 1 说明清洗力度越弱。
    VoutVin\displaystyle \frac{V_{\text{out}}}{V_{\text{in}}}
  4. 做差取反用 1 减去剩余比例,就得到被清理掉的部分占比——这就是“挤水分”的成效。
    1−VoutVin\displaystyle 1 - \frac{V_{\text{out}}}{V_{\text{in}}}

弹性推理服务

“招牌菜”不能提前做一百份放着等客人,但客人点单时再从零备料又来不及。聪明的做法是:秘制酱料提前熬好(模型参数),客人点单才下锅(推理调用)。AI推理正是这种“按叫现做”的典型——训练好的模型文件存放在对象存储,函数实例收到请求时才把模型加载进内存,执行前向推理并返回结果。

推理负载的波动比ETL更剧烈:白天用户多、大促流量是平时的十倍、凌晨几乎没人。用自建GPU集群应对这种“过山车”,要么高峰期排队,要么闲时烧钱。Serverless推理服务的杀手锏是自动伸缩——实例数随每秒请求数(QPS)自动涨落,高峰时几百个实例同时推理,低谷时缩到接近于零。

GPU是昂贵的“特殊灶台”,主流云厂商已提供GPU型函数,按秒计费。估算是该配置多少实例时,可以用排队论里的利特尔定律——它告诉我们系统里同时处理的请求数与吞吐和耗时的关系:

后厨高峰时自动增派帮工,低峰时只留一个看门,招牌菜的上菜速度与成本都被拿捏得恰到好处。不过,弹性推理有一个绕不开的对手——冷启动,我们下一节专门对付它。

C=λ×Tavg\displaystyle C = \lambda \times T_{\text{avg}}
并发实例数 C = 每秒到达请求数 λ × 平均处理耗时 T_avg。例如 QPS 为 500、平均耗时 200ms,就需要约 100 个实例才能不排队。
  1. 到达速率λ(lambda)表示每秒新到达推理服务的请求数量,相当于后厨每分钟接到的点单数。
    λ\displaystyle \lambda
  2. 平均耗时T_avg 是单个请求从进入函数到推理完成返回的平均秒数,相当于做一道招牌菜的平均时间。
    Tavg\displaystyle T_{\text{avg}}
  3. 相乘估算两者相乘得到“在途请求数”,也就是同一时刻正在处理的请求总量,这个量级就是要保有的实例数。
    λ×Tavg\displaystyle \lambda \times T_{\text{avg}}

冷启动优化

钟点工接到电话到赶进厨房,需要穿外套、骑车、洗手——这期间菜是没法出锅的。Serverless冷启动就是“钟点工赶路”:平台从零创建容器、拉起运行时、加载依赖,然后才能执行你的代码。对AI推理而言,模型文件可能上百MB,冷启动会被放大到几秒甚至更久。

冷启动只发生在“实例刚创建、还没有热实例可复用”的时候。平台为了节省成本,会让空闲的实例在一段时间后休眠回收。于是,流量突增时会批量冷启动,最直接的表现就是“第一波请求特别慢”——就像餐厅突然涌进一百桌客人,而帮工们还在路上。

应对冷启动有三个主流手段:一是预置并发,让平台提前拉起指定数量的热实例,相当于让钟点工提前十分钟站在门口;二是镜像瘦身,移除不必要的依赖包,缩短“穿外套”的时间;三是请求合并与定时预热,用低频心跳让实例保持温热。平均延迟可以用加权公式表达:

老王的经验是:越红的招牌菜越要留一两个“常驻备菜位”,旺季的预置并发就是这笔“保底人力”。冷启动并非Serverless的原罪,而是可以用成本换体验、算得清账的工程问题。

Tavg=Pcold×Tcold+(1−Pcold)×Twarm\displaystyle T_{\text{avg}} = P_{\text{cold}} \times T_{\text{cold}} + (1 - P_{\text{cold}}) \times T_{\text{warm}}
平均响应时间 = 冷启动概率 × 冷启动耗时 + (1 - 冷启动概率) × 热实例耗时。冷启动概率降得越低,整体延迟就越接近热实例的快速水平。
  1. 冷启动概率P_cold 是请求碰到冷启动实例的概率,相当于高峰期恰好抽到一位还在路上的钟点工的概率。
    Pcold\displaystyle P_{\text{cold}}
  2. 冷启动耗时T_cold 是新建实例从零到就绪的秒数,数值通常远大于热实例处理耗时。
    Tcold\displaystyle T_{\text{cold}}
  3. 热实例耗时T_warm 是已就绪实例处理一个请求的秒数,代表着“炉火正旺”时的理想速度。
    Twarm\displaystyle T_{\text{warm}}
  4. 加权求和按概率加权平均,P_cold 越大,平均值越被冷启动拖累;预置并发能把 P_cold 压到接近 0。
    Pcold×Tcold+(1−Pcold)×Twarm\displaystyle P_{\text{cold}} \times T_{\text{cold}} + (1 - P_{\text{cold}}) \times T_{\text{warm}}

资源限制应对

共享后厨的灶位、水槽、冰箱都是公共的,后厨规定单次只能占一个灶台、最长占用十五分钟。函数计算同样有硬边界:单函数内存上限(常见 1GB 到 10GB)、执行超时上限(常见几分钟到一小时)、本地磁盘易失且容量小。把传统服务“原样搬进”函数,往往会撞上这些天花板。

应对之道有两条:把厨房放不下的东西放到公共冷库——状态外置到 Redis、OSS 等外部存储,函数本身保持无状态;把超长的菜拆成多道——将大任务切分成“分段流水”,每一段由一个函数处理,上一段的输出作为下一段的输入,天然契合事件驱动管道。

内存与并发之间还有一层权衡:单实例内存越大,能同时处理的请求越多,但单价更高;反之内存配小了,并发一上来就得扩容出更多实例。估算单实例可承载的并发数,用下面的比值:

聪明的后厨不硬杠规则,而是改变备菜方式:提前分装、公共冷库、按段料理——资源边界反而逼出了更清爽的架构。理解这些边界,才能在真实业务中避免“函数跑飞”的事故。

N=⌊MlimitMone⌋\displaystyle N = \left\lfloor \frac{M_{\text{limit}}}{M_{\text{one}}} \right\rfloor
单实例最多并发数 N = 内存上限 M_limit ÷ 单个请求占用内存 M_one,结果向下取整。比如上限 1GB、单个请求占 256MB,一个实例最多同时处理 4 个请求。
  1. 内存上限M_limit 是平台允许的单个实例最大内存,相当于后厨分配给一个灶台的最大空间。
    Mlimit\displaystyle M_{\text{limit}}
  2. 单请求占用M_one 是处理一个请求平均需要的内存,请求体越大、模型越重,这个值越高。
    Mone\displaystyle M_{\text{one}}
  3. 取整除法上限除以单请求占用得到理论并发上限,但实例内存不可能被完全填满,所以向下取整。
    ⌊MlimitMone⌋\displaystyle \left\lfloor \frac{M_{\text{limit}}}{M_{\text{one}}} \right\rfloor

成本效益选型

共享后厨月底结账时:请了三个钟点工、各干两小时,加特殊灶台使用费,一笔一笔清清楚楚。Serverless没有“包月工资”,只有“按量账单”:每次调用算一笔调用费,每个“内存GB × 运行秒”再算一笔计算费。这让成本与流量严格正相关——业务低谷时账单自然缩水。

成本模型是架构选型的核心,完整公式由两部分相加:

但Serverless不是万能锅:长时间运行的任务受超时上限约束,强状态服务(如实时对战房间)不适合无状态函数,极低延迟的内网高频调用也不划算。老王的最终方案是“固定主厨 + 弹性帮工”的混合架构——招牌菜和稳定菜由自建容器负责,高峰期流量和清洗粗活全交给按单计酬的Serverless。成本降了四成,客人反而更多了——这正是Serverless落地的终极心法:不是替代一切,而是补齐弹性。

Cost=Nreq×pinvoke+TGBs×pGBs\displaystyle \text{Cost} = N_{\text{req}} \times p_{\text{invoke}} + T_{\text{GBs}} \times p_{\text{GBs}}
总成本 = 请求次数 × 单次调用单价 + 计算量(GB·秒)× 每 GB·秒单价。前者与流量挂钩,后者与内存配置和运行时长挂钩。
  1. 请求次数N_req 是统计周期内的总调用次数,对应后厨总共接了多少单。
    Nreq\displaystyle N_{\text{req}}
  2. 调用单价p_invoke 是平台对每次调用收取的固定费用,通常非常低,但积少成多。
    pinvoke\displaystyle p_{\text{invoke}}
  3. 计算量T_GBs 是内存(GB)乘以运行总时长(秒)的累积量,对应钟点工的“人·小时”。
    TGBs\displaystyle T_{\text{GBs}}
  4. 计算单价p_GBs 是每 GB·秒的计价费率,内存配置越高、跑得越久,这部分越大。
    pGBs\displaystyle p_{\text{GBs}}
  5. 求和两部分相加就是月度账单,优化时要么减少无谓调用,要么压缩内存与时长。
    Nreq×pinvoke+TGBs×pGBs\displaystyle N_{\text{req}} \times p_{\text{invoke}} + T_{\text{GBs}} \times p_{\text{GBs}}

AI 应用场景

短视频平台的素材加工管道

阶段:数据管道 ETL

解决的问题:每天数千万条视频上传,转码、抽帧、打标签的负载像过山车——晚间是白天的十倍。自建转码集群必须按峰值采购,闲时浪费严重;而事件驱动的Serverless管道,一个视频上传事件就触发一个转码函数,处理完即释放,成本与上传量严格同步。

具体案例:某短视频平台把“上传→转码→抽帧→AI打标签→入检索库”拆成五个函数,中间用对象存储和消息队列串联。高峰时自动跑起上千个函数实例,凌晨缩到个位数,月度计算成本下降约六成。

电商大促的推荐模型弹性推理

阶段:模型推理部署

解决的问题:大促期间推荐请求量是平时的十倍,而自建GPU集群要么按峰值采购导致平时闲置,要么缩容导致大促卡顿。Serverless GPU函数按秒计费、自动伸缩,让推理成本跟随真实流量。

具体案例:某电商平台把召回和排序模型部署为GPU函数,大促前用预置并发预热两百个实例,活动结束后缩容到零。既保住了大促期间的推荐延迟,又省掉了平时空转的GPU账单。

金融日志的清洗与异常审计

阶段:批处理 + 实时推理

解决的问题:合规审计要求保留全量交易日志并检测可疑行为。固定集群处理“凌晨洪峰式”日志同步,资源利用率极低;实时异常检测又需要秒级响应。

具体案例:某支付机构用定时触发器在夜间拉起批清洗函数,把日志标准化后入仓;同时用消息队列实时驱动反欺诈推理函数,可疑交易出现时立即触发风控模型。两种负载各自弹性伸缩,运维团队几乎不再扩缩容。

Python 演示

python65 行
"""Serverless ETL 管道 + 弹性伸缩模拟器"""import mathimport randomimport time  class Worker:    """模拟一个函数实例,首次处理带冷启动开销"""     def __init__(self, worker_id):        self.worker_id = worker_id        self.cold_flag = True     def process(self, event):        if self.cold_flag:            delay = 0.5            self.cold_flag = False        else:            delay = 0.1        time.sleep(delay)        return {"worker": self.worker_id, "value": event["value"] * 2, "latency": delay}  class ElasticPool:    """按负载伸缩的 worker 池"""     def __init__(self, max_workers=5):        self.pool = []        self.max_workers = max_workers        self.cold_count = 0        self.gc_count = 0     def scale(self, target):        while len(self.pool) < target and len(self.pool) < self.max_workers:            self.pool.append(Worker(len(self.pool)))            self.cold_count += 1        while len(self.pool) > target:            self.pool.pop()            self.gc_count += 1     def process(self, event):        worker = random.choice(self.pool)        return worker.process(event)  def simulate(steps=60):    pool = ElasticPool(max_workers=5)    processed = 0    total_latency = 0.0    for step in range(steps):        load = 1 + round(3 * abs(math.sin(step / 6.0)))        pool.scale(load)        for i in range(load):            result = pool.process({"value": step + i})            processed += 1            total_latency += result["latency"]        time.sleep(0.01)    print("处理事件总数:", processed)    print("冷启动次数:", pool.cold_count)    print("实例回收次数:", pool.gc_count)    print("累计处理耗时(秒): %.2f" % total_latency)  if __name__ == "__main__":    simulate()
目的:模拟一个事件驱动的Serverless ETL管道,观察负载波动下worker池如何弹性伸缩,并统计冷启动对整体耗时的影响。
  1. load = 1 + round(3 * abs(math.sin(step / 6.0)))用正弦函数模拟业务负载的周期性波动,数值在 1 到 4 之间变化。
  2. pool.scale(load)根据当前负载调整worker数量,对应Serverless的自动伸缩。
  3. self.cold_flag = True新worker首次处理被标记为冷启动,延迟设定为 0.5 秒。
  4. delay = 0.5 / delay = 0.1冷启动 0.5 秒、热实例 0.1 秒,模拟真实函数首次调用与复用调用的差距。
  5. while len(self.pool) < target负载上升时新增worker实例,并累计冷启动次数。
  6. while len(self.pool) > target负载下降时回收多余实例,对应Serverless缩容释放资源。
  7. result = pool.process({"value": step + i})把每个事件交给池中的一个worker处理,模拟“订单来了才开工”。

常见误区

误区ETL动辄处理几百万条数据,函数一次只能跑几分钟,肯定跑不动,还是老老实实买服务器吧。

正解Serverless的“小函数”恰恰通过横向拆分把小任务变成大管道:一个文件到达触发一个函数,一万个文件就触发一万个函数并行处理。配合消息队列削峰填谷,吞吐能力远比固定集群弹性。按事件并发的模式,正是大数据ETL梦寐以求的并行度。

为何常见:大家习惯了“买机器→装环境→跑任务”的纵向思维,忽略了函数按事件拆分、按需并发的横向扩展模式。

误区模型加载就要好几秒,再叠加冷启动,在线推理的用户根本等不起,推理只能用常驻服务。

正解冷启动只发生在实例首次创建或长时间空闲后。通过预置并发,平台可以提前拉起指定数量的热实例,让模型常驻内存,请求到达时直接推理。流量平稳时热实例复用率极高,冷启动占比很小;流量突增时,也只有增量部分需要承担少量冷启动。

为何常见:很多人用默认配置不加预置,首次请求确实慢,就把个案当成了常态,忽略了“预置并发”这个官方解法。

误区我在函数外面建了数据库连接池,每次调用复用一个连接,性能肯定很好。

正解函数实例可能被并发放大到几十上百个,每个实例都有自己独立的全局连接池,数据库连接数会被瞬间打爆。正确做法是限制单实例并发数、设置最大实例数,或用代理层(如连接池中间件)收敛数据库连接。

为何常见:把传统常驻进程的经验照搬到函数计算,忽略了“多实例各自初始化”这个关键差异。

误区函数内存调大,处理更快,总成本差不多,干脆直接配最高规格。

正解内存越大单价越高,计费是“内存GB × 运行秒”的乘积,高内存只在该函数确实需要大内存或高CPU时划算。若业务只是轻量处理,配高内存会让账单呈线性上涨。合理做法是按峰值内存需求配置,再结合并发数做整体成本估算。

为何常见:只看到单价本身不高,没意识到“实例数 × 运行时长 × 单价”的乘法效应。

误区Serverless自动伸缩、免运维、按量计费,是未来趋势,把所有后端都迁上去才是对的。

正解函数的超时上限、内存上限、无状态特性和冷启动成本决定了它不适合所有场景:数小时的长训练任务不能跑、强状态实时服务很难做、极低延迟的内网调用不划算。业界主流是混合架构——稳定的核心服务保留在容器,流量波动大、事件驱动的部分用Serverless。

为何常见:被“免运维+省钱”打动,忽视了Serverless的边界条件,属于“手里有锤子,看什么都像钉子”。

面试题

Q1. Serverless最核心的计费方式是以下哪种?

单选题 · easy

  • A.固定月租计费
  • B.调用与时长计费← 正确答案
  • C.带宽峰值计费
  • D.存储容量计费

答案:B。Serverless按“调用次数 + 计算时长(GB·秒)”计费,没有包月固定费用。就像共享后厨按钟点工工时结账,而不是按月发固定工资。固定月租、带宽峰值和存储容量都是其他云产品的计费模式。

Q2. Serverless ETL中“事件驱动”指的是____。

单选题 · easy

  • A.事件到来即触发函数← 正确答案
  • B.服务器定期执行任务
  • C.数据入库后再处理
  • D.需要人工点击触发

答案:A。事件驱动是指文件上传、消息到达等事件发生时自动触发函数执行,无需人工干预,也无需常驻服务器等待轮询。好比订单铃一响后厨才开工,而不是师傅们干坐着等订单。

Q3. 关于函数计算的冷启动,以下正确的是?

单选题 · mid

  • A.每次业务调用都会发生冷启动
  • B.实例首次调用后会被立即销毁
  • C.实例空闲回收后再调用需冷启动← 正确答案
  • D.冷启动只会影响GPU推理函数

答案:C。冷启动发生在实例新建或空闲被回收后再次拉起时。已热实例会复用,并非每次调用都冷启动;实例首次调用后也不会马上销毁,而是保留一段时间。冷启动对所有函数都可能发生,不只是GPU推理函数。

Q4. 预置并发(Provisioned Concurrency)解决的主要问题是?

单选题 · mid

  • A.降低单次调用费用
  • B.消除冷启动延迟← 正确答案
  • C.增加函数内存上限
  • D.提升函数并发上限

答案:B。预置并发让平台提前创建并保持指定数量的热实例,请求到达时直接复用,从而消除冷启动延迟。它不会降低单价、不会增加内存上限,也不改变平台的并发上限,只是把冷启动从“请求链路中”挪到了“请求之前”。

Q5. 已知 QPS=500,平均处理耗时 200ms,用利特尔定律估算所需并发实例数约为____。

单选题 · mid

  • A.约50个实例
  • B.约100个实例← 正确答案
  • C.约250个实例
  • D.约500个实例

答案:B。利特尔定律 C = QPS × 平均耗时 = 500 × 0.2 = 100 个实例。200ms 换算为 0.2 秒后与 QPS 相乘,得到同时在途请求数为 100,因此需要约 100 个实例并发处理才能不排队。

Q6. 内存从512MB翻倍到1GB,单价翻倍但耗时减半,总成本将____。

单选题 · hard

  • A.上升约50%
  • B.下降约10%
  • C.基本保持不变← 正确答案
  • D.上升约100%

答案:C。计费 = 内存 × 时长 × 单价。原成本 = 512MB × T × p,新成本 = 1GB × (T/2) × p = 512MB × T × p,两者相等。内存翻倍被耗时减半精确抵消,所以总成本基本保持不变。

Q7. 函数执行超时或资源受限时,可行的应对策略有____。

多选题 · mid

  • A.将状态存入外部存储← 正确答案
  • B.拆分成多段流水处理← 正确答案
  • C.增加单函数的超时时间
  • D.提高函数的内存配置

答案:AB。状态外置让函数无状态化,避免因本地状态丢失而重跑;拆分流水把大任务切小,每段在超时内完成。平台对超时有硬性上限,不能无限增加;内存提升也不能解决因外部等待导致的超时,只影响计算强度。

Q8. 以下哪些措施能有效降低函数冷启动开销?

多选题 · hard

  • A.使用预置并发← 正确答案
  • B.精简镜像体积← 正确答案
  • C.配置更大内存
  • D.减少初始化依赖← 正确答案

答案:ABD。预置并发提前拉起热实例;精简镜像体积缩短拉取和启动时间;减少初始化依赖加快业务代码执行前的准备流程。配置更大内存对冷启动的改善有限,且会推高单位成本,不是针对冷启动的有效手段。

Q9. 以下哪类 ETL 场景最适合用 Serverless 实现?

单选题 · easy

  • A.每日固定时点跑批任务
  • B.文件到达即触发清洗← 正确答案
  • C.超大单文件需长时处理
  • D.数据库全量定期备份

答案:B。文件到达即触发是典型的事件驱动场景,负载自然与文件量同步,Serverless按调用计费弹性处理。固定时点跑批虽可用但体现不出弹性优势;超大单文件受超时上限限制不适合;全量备份任务重且连续,更适合专用批处理平台。

Q10. 混合架构下,下列哪些组件更适合保留在自建容器集群中?

多选题 · extreme

  • A.长时间特征工程← 正确答案
  • B.强状态实时对战← 正确答案
  • C.视频抽帧批处理
  • D.模型在线微调← 正确答案

答案:ABD。长时间特征工程和模型在线微调是数小时级的长任务,超越函数超时上限;强状态实时对战服务需要内存态保持和低延迟通信,无状态函数难以支撑。视频抽帧批处理天然按文件分片事件驱动,是最适合Serverless的弹性任务。