想象你在市中心开了一家“云餐厅”,后厨没有常驻厨师,顾客按铃点餐才开火。铃声一响,餐厅系统自动唤来一位厨师,洗锅、切菜、爆炒,出餐后顾客付款离开,后厨恢复安静。这家餐厅没有门面租金、没有闲置人力,只按实际出餐次数和用火时间收费——这就是 Cloud Functions 的哲学。 在 GCP(谷歌云平台)上,Cloud Functions 让你只写一个函数(比如“给定图片,返回分类结果”),把它扔到云端,剩下的交给平台。它自动处理请求到来时启动实例、高峰时段扩容、空闲时缩到零的琐事。AI 推理服务恰好适合这种模式:推理调用通常短小、突发、按需发生,不需要一台 24 小时空转的服务器。 这篇文章带你从零理解 Cloud Functions 如何承担 AI 推理任务:从函数原理、模型部署、冷启动优化到自动伸缩和触发器集成,再对比 Cloud Run 做选型,最后聊生产环境怎么稳定运营。读完你就能在 GCP 上搭建一个自己的无服务器推理 API。
对 AI 从业者而言,无服务器推理是成本最低、运维最轻松的模型上线方式。掌握 Cloud Functions 部署与调优,意味着你从“会训练模型”进阶到“会低成本地运营模型”,这是 AI 工程化的核心能力之一。
目录
可视化演示
交互式展示GCP Cloud Functions AI推理服务:冷启动五阶段时间线优化、事件驱动触发器集成(HTTP/PubSub/Storage)、Cloud Functions与Cloud Run对比选型。
本节配有交互动效(进入视口后自动加载,约 3KB)。
冷启动五阶段时间线 资源分配→镜像拉取→运行时安装→依赖导入→模型加载 总冷启动时间=Σ各阶段耗时 优化模型加载可减少60%冷启动延迟。
函数原理——云端里的按单出餐
想象你接手了一家“云餐厅”,门口没有招聘启事,后厨没有全职厨师。顾客按铃时,铃声响起,餐厅系统自动唤来一位厨师,开火、炒菜、上菜;顾客离开,厨师也随之消失。你从不支付厨师的空班工资,只按每道菜的实际耗时和火力结算。这套模式就是 Cloud Functions 的缩影——代码像菜谱一样挂在云端,事件一来,函数自动执行。
Cloud Functions 是谷歌云平台上的函数即服务(FaaS)产品。你只需要把一段 Python 或 Node.js 函数传上去,设置好环境变量、内存、超时,平台就接管了一切:请求怎么进来、服务器在哪里跑、流量大了怎么扩容,统统不用你操心。对 AI 开发者来说,这意味着训练好的模型能在一个不养服务器的环境里随时被唤醒、立刻做推理。
技术上的核心模型有三个关键词:无服务器计算,意味着你没有虚拟机可以登录,也没有补丁要打;事件驱动,意味着函数只在被调用时执行,没人调用就彻底静默;按量计费,意味着闲置成本接近零。三者叠加,让 Cloud Functions 成为低延时、偶发式 AI 调用场景的天然宿主——比如一个客服机器人,白天忙时大量请求,深夜几乎无人使用,用云服务器得整天付钱,用 Cloud Functions 就只付白天那几小时的钱。
回到云餐厅的比喻:你明白了这座“按单出餐”的餐厅是怎么运作的——不养闲人、按单结账、自动营业。接下来要解决的核心问题就是:怎么把自家招牌菜(AI 模型)搬进这座厨房。
- 调用次数成本每次请求触发一次函数执行,按次数收费,就像餐厅每接一单收一次服务费。
- CPU 计算成本函数运行期间消耗的 CPU 时间乘以单价,推理中的矩阵运算主要花这笔钱,相当于后厨炒菜时的燃气费。
- 内存占用成本配置的内存大小乘以运行小时数再乘以内存单价,加载大模型时这笔开销尤其明显,好比餐厅租用的场地面积按小时计租。
模型部署——把 AI 菜谱搬进云端厨房
开餐厅,最麻烦的是准备阶段:菜谱(模型权重)、食材(依赖库)、厨具(运行环境),一件都不能少。Cloud Functions 的部署,本质上就是把这些东西打包进一个“外送箱”,交给平台,平台负责在后厨随时拆包使用。
部署一个 AI 推理函数,你的工作是准备一个 requirements.txt(列出 numpy、scikit-learn 等依赖),把训练好的模型文件放进函数目录,然后写一个接收请求的入口函数。GCP 的部署命令 gcloud functions deploy 会自动读取这些文件,构建运行环境,并生成一个 HTTPS 端点。此后,任何带着输入数据的 HTTP 请求打到这个端点,函数便加载模型、执行推理、返回结果。
关键设计决策是内存配置。模型文件加载进内存,推理时还要为输入数据分配临时空间,内存给少了函数直接崩溃,给多了每天白付钱。经验法则是:先测量模型加载后的常驻内存占用,再推算单次推理的峰值内存,取二者较高值的 1.5 倍作为配置值。入口函数要写成平台约定好的签名,Python 语言里就是 def predict(request),request 对象承载着 HTTP 请求的全部信息。
把菜谱、食材、厨具打包妥当,餐厅就能开张了。但马上会遇到一个所有云餐厅共同的尴尬:客人第一次按铃时,后厨要从零开始生火,等待时间长得让人想退货——这就是接下来要解决的冷启动问题。
- 平均推理耗时单次请求从进入函数到返回结果的平均时间,包括模型加载后的前向传播时间。
- 单实例并发能力一个函数实例在同一时刻能并行处理的请求数,受 CPU、内存和代码实现的共同限制,可以理解为一张餐桌能同时坐下几位客人。
- 并发复用计算所有实例的并发数加总,除以单次耗时,就得到系统每秒能处理的请求数(QPS),相当于餐厅全满座时一小时的翻台能力。
冷启动优化——提前热锅,告别漫长等待
新餐厅开张的清晨,第一位客人落座,你吩咐厨师开火。水要烧开、锅要预热、油要下锅,整套流程走完,第一道菜姗姗来迟。但如果这家餐厅已经营业了一上午,第二批客人点单时灶台就是热的——菜很快就能上桌。云函数世界里的“热灶”与“冷灶”,就是热启动与冷启动的差别。
冷启动的发生机制是这样的:函数在一段时间没有收到请求后,平台会回收实例,释放资源;下一个请求到来时,系统需要重新分配容器、启动运行时、执行全局代码、加载模型文件。对于轻量函数,冷启动可能只有几百毫秒;但对于要加载上百 MB 模型权重的 AI 函数,冷启动可以轻松超过数秒——这足以让在线推理的用户体验断崖式下降。
治本的手段是常驻实例。GCP 允许你设置最小实例数(min-instances),比如设为 1,平台就会保证始终至少有一个实例在运行,模型常驻内存,请求进来直接走热启动。治标的手段包括:把模型加载代码放在全局作用域(而不是请求处理函数内),避免每次调用重新加载;精简依赖库,减少运行时初始化工作量;用更轻量的推理框架,比如把大模型量化后部署。
灶台持续热着,冷启动的痛点就解决了。但新的问题随之而来:饭点到了,客流如潮水般涌入,一位厨师无论如何也顶不住二十桌客人——这时候,云餐厅的自动加人手机制就该登场了。
- 冷启动概率请求命中冷实例的比例。实例回收越频繁、流量越稀疏,这个概率越高,相当于客人撞上“灶台刚熄火”的概率。
- 冷热延迟加权冷启动延迟乘以命中概率,热启动延迟乘以互补概率,两个乘积相加,得到大多数用户会感受到的延迟水平。
- p99 指标含义延迟分布的 99% 分位,代表最差的那批用户体验。AI 推理服务通常用 p99 而非平均值来衡量稳定性。
自动伸缩——饭点自动加人手
深夜的餐厅门可罗雀,一位厨师百无聊赖地擦着灶台;到了中午十二点,乌泱泱的客人涌进来,一位厨师瞬间被淹没。这时,神奇的餐厅经理开始行动:他观察每张餐桌的占用情况,一旦现有厨师忙不过来,就立刻从后台唤来新的厨师,几十秒内厨房从 1 人变成 20 人。这就是 Cloud Functions 的自动伸缩。
在技术层面,每个函数实例有自己的并发上限。当并发请求数超过当前实例的承载量,平台会自动启动新的实例来分摊流量。不同代次的 Cloud Functions 并发上限不同,通常一个实例可同时处理数十到数百个并发请求。平台会根据请求速率的陡增,在几秒到几十秒内完成扩容,流量回落后再逐步回收闲置实例。
但自动伸缩并非没有边界。每个 GCP 区域都有函数实例配额,比如默认最多几百个并发实例;你也可以用 --max-instances 参数主动限制最大实例数,防止突增流量把成本打穿。在设计推理服务时,要预留两个数字:一是预期峰值 QPS,二是单实例能扛的并发数。两者的比值,就是你需要向平台申请的实例配额,也决定了你的费用上限。
饭点的人手调度搞清楚了。可餐厅不能只靠客人推门进店接客——有的客人会打电话订餐,有的会从窗口递纸条,有的会约好固定时间上门取餐。不同方式进来的订单,需要不同的接单渠道。云函数的触发器,就是这些五花八门的接单渠道。
- 当前并发请求数此刻同时到达、尚未处理完的请求总量,相当于餐厅当前入座的客人总数。
- 单实例最大并发一个实例能承受的并发上限,超过这个值函数可能超时或报错,相当于一位厨师最多能同时炒几个菜。
- 向上取整并取下限请求数除以并发上限后向上取整,保证实例数够用;再与最小实例数取较大值,保证冷启动优化策略依然生效。
触发器集成——从按铃到全自动下单
一家优秀的餐厅不会只有一扇门。服务员站在门口欢迎散客(HTTP 请求),电话铃响接听外送订单(Pub/Sub 消息),后厨窗口偶尔递进来一份供应商的送货单(Storage 事件),而老顾客则会提前预约,到了点自动开饭(定时调度)。每种渠道进来的是同一份订单,却需要不同的接单动作。Cloud Functions 的强项,正是被 GCP 生态中各种事件“叫醒”。
最常见的触发器是 HTTP 触发器。部署时生成一个 HTTPS URL,任何客户端(网页、App、curl)都能通过 POST 请求调用,适合在线推理 API,比如图片分类、文本审核。其次是 Cloud Pub/Sub:消息发布到主题后,函数订阅并消费,适合异步批量推理——一批图片 URL 被推送到消息队列,多个函数实例并行处理,天然解耦且支持重试。Cloud Storage 触发器则更“懒人”:模型监控服务把新文件丢进 GCS 存储桶,函数自动被触发去做 OCR、目标检测或数据预处理。Cloud Scheduler 按 cron 表达式定时触发函数,适合每天凌晨做一次推理质量评估或模型漂移检测。
接单渠道越丰富,餐厅的业务场景就越立体。这时候你可能要问了:既然接单能力这么强,是不是所有 AI 服务都该用 Cloud Functions?别急,隔壁还有一家叫 Cloud Run 的正餐餐厅,招牌菜更长线、更硬核——我们得先弄明白到底该去哪家。
- 事件产生与投递从数据生成(如图片上传完成)到事件被 Cloud Functions 捕获的时间,通常毫秒级。
- 队列等待时间Pub/Sub 这类消息队列在高峰期可能积压消息,新消息要等前面的消息消费完才能被处理,对应顾客点完餐后等待叫号的时间。
- 函数执行时间函数从启动到推理完成返回结果的总时长,包含冷启动和模型推理开销。
对比Cloud Run——大排档 vs 正餐餐厅
两条街对面开着两家无服务器餐厅。Cloud Functions 是快餐大排档:菜单固定、一份炒饭 30 秒出锅、吃了就走,适合翻台率高的短平快场景。Cloud Run 是正餐餐厅:客人可以慢慢用餐,厨师能处理更复杂的菜品,包间更大、允许你自带餐具(自定义容器),但上菜节奏也更长。两家各有各的客群。
从技术维度拆解差异:执行超时上,Cloud Functions 默认 60 秒,最高可调到 540 秒;Cloud Run 默认 300 秒,最高可达 60 分钟——如果你的推理任务要做长上下文生成或大批量处理,Functions 可能根本不够用。资源上限上,Cloud Functions 的内存上限为 16GiB,Cloud Run 可以配到 64GiB 甚至更多 vCPU,适合加载大型模型。服务形态上,Cloud Functions 只能部署单一函数,适合单入口点;Cloud Run 部署的是完整容器镜像,可以有多个路由、多个端点,甚至自定义 gRPC 服务。
选型不是非此即彼,而是按需求对号入座:推理请求轻量短小(单次 60 秒内)、以事件为主、追求极致简单,选 Cloud Functions;推理任务重、耗时长、需要完整 Web 服务框架、或者要自定义运行时,选 Cloud Run。一句话总结——快餐能解决的问题,不必开正餐餐厅。
选好了餐厅类型,招牌菜也上架了,接单渠道打通了,高峰期有人手了。可餐厅要想天天开门、月月盈利,靠的不只是开业那天的热闹——日常的账目、检修、换菜单和防盗措施,才是稳健经营的真正考验。
- 执行时间条件测量推理任务的最坏情况耗时,若不超过 Cloud Functions 实践推荐的安全阈值 60 秒,才具备选型的前提。
- 资源条件模型文件加载后的内存占用不超过 16GiB,否则函数会因内存不足而崩溃。
- 分支选择两个条件都成立走 Functions 分支,否则走 Cloud Run 分支,用更重的容器换取更长的执行时间和更大的资源空间。
生产实践——让云端餐厅稳健营业
一家餐厅开张第一周,客似云来;到了第三个月,水电费账单暴涨、后厨出现了一次食材过期、老顾客抱怨上菜慢,甚至门口还来了个冒充服务员收钱的人。开餐厅,运营的细节决定生死。Cloud Functions 推理服务上线后,同样要面对成本、可观测性、版本和安全四件大事。
成本优化是第一张账单。计费模型我们已经学过,控制成本的方向就藏在那条公式里:合并多次调用成一次批量推理,降低调用次数;调低内存规格到刚够用,减少内存占用;用异步触发器把峰值流量削平,避免高峰期实例数飙升。第二件事是日志监控:Cloud Logging 收集每一次调用的日志,Cloud Monitoring 提供延迟、错误率、实例数指标,配合告警策略,能在 p99 延迟升高或错误率突破阈值时第一时间收到通知。第三件事是版本管理:Cloud Functions 支持流量拆分,你可以让新版本接收 10% 的流量做金丝雀发布,验证稳定后再全量切换,出问题就一键回滚。第四件事是安全配置:对外暴露的推理 API 要用 API Gateway 或身份感知代理做身份验证,避免被匿名调用刷爆账单;敏感模型和数据建议放到 VPC 内,函数通过 VPC Connector 访问而不过公网。
云餐厅的故事接近尾声:从按单出餐的原理,到搬进菜谱的部署,再到热锅、加人手、多渠道接单、选对店型、日常运营,一座完整的无服务器 AI 推理餐厅终于可以平稳营业了。记住那句终极心法:Cloud Functions 不是万能的,但在它适合的场景里,它是把 AI 从 Jupyter Notebook 送进生产环境最快的路。
- 不可用比例1 减去 SLA 指标,得到服务在一年中允许失效的时间比例,比如 0.1% 对应 99.9%。
- 一年总分钟数365 天乘以 24 小时再乘以 60 分钟,把离散的百分比换成可感知的分钟数。
- 允许停机时间两者相乘即得到年度可容忍停机分钟数,这是制定监控告警和容灾策略的量化依据。
AI 应用场景
在线图像分类 API
阶段:模型部署与推理服务
解决的问题:传统方式需要租一台常驻 GPU/CPU 服务器,24 小时跑着一个图像分类 Web 服务,深夜无人调用时也在烧钱;用 Cloud Functions,只有请求到达时才执行推理,白天高峰自动扩容,深夜自动缩到零实例,成本下降 70% 以上。
具体案例:一家电商平台用 Cloud Functions 部署了训练好的服装分类模型。用户在 App 上传商品图,HTTP 请求直接打到函数端点,函数加载模型权重、完成前向推理、返回服装品类标签。流量峰值时 500 QPS 自动扩容到 20 个实例,低谷时缩回 2 个常驻实例,p99 延迟稳定在 200ms 以内。
文档智能审核流水线
阶段:数据接入与事件驱动推理
解决的问题:合同、发票等 PDF 文件持续上传到 GCS 存储桶,传统方案要用轮询脚本定时扫描新文件,存在时效性差、空转浪费的问题;用 Cloud Storage 触发器,文件一落桶就自动触发函数,立即执行 OCR + 关键信息抽取,异步且天然支持并发。
具体案例:某金融公司把用户提交的身份证扫描件自动存入 GCS,Cloud Functions 监听到新对象事件后触发文本识别模型,提取姓名、证件号并写入数据库。Pub/Sub 订阅重试机制保证了偶发失败后自动重试,整个审核流水线零人工介入。
定时模型质量巡检
阶段:模型监控与反馈
解决的问题:线上推理模型的精度会随着数据分布漂移而衰减,人工每天检查不现实;用 Cloud Scheduler 定时触发一个评估函数,每天凌晨自动拉取昨日样本、重跑推理、对比标签、计算准确率,异常时通过 webhook 通知团队。
具体案例:某推荐系统团队用 Cloud Scheduler 配置 cron 表达式 0 2 * * *,每天凌晨 2 点触发评估函数,加载线上模型快照,对过去 24 小时的用户反馈数据做批量推理评估,生成漂移报告存入 BigQuery,每月成本不到一杯咖啡的钱。
Python 演示
"""Cloud Functions 推理服务演示:模型加载 + HTTP 入口函数 + 本地模拟调用运行:python cloud_functions_inference_demo.py"""import json import numpy as npfrom sklearn.linear_model import LogisticRegression class MiniClassifier: """迷你模型封装,模拟生产环境中的模型仓库""" def __init__(self): self._model = self._train_dummy_model() def _train_dummy_model(self): X = np.array([[0, 0], [1, 1], [1, 0], [0, 1], [2, 2], [3, 3]]) y = np.array([0, 1, 1, 0, 1, 1]) model = LogisticRegression() model.fit(X, y) return model def predict(self, features): data = np.array(features).reshape(1, -1) label = int(self._model.predict(data)[0]) prob = float(self._model.predict_proba(data)[0][1]) return {"label": label, "probability": round(prob, 4)} # 全局加载模型:等同 Cloud Functions 部署时的模块级代码,# 只执行一次,后续请求复用,避免冷启动后反复加载。_model = MiniClassifier() def predict(request): """Cloud Functions 推荐的 HTTP 入口函数签名""" payload = request.get_json(silent=True) or {} features = payload.get("features") if features is None: return json.dumps({"error": "missing features field"}), 400 result = _model.predict(features) return json.dumps(result), 200 if __name__ == "__main__": class FakeRequest: _body = b'{"features": [1.1, 2.2]}' def get_json(self, silent=False): try: return json.loads(self._body) except Exception: return {} if silent else None fake = FakeRequest() response, code = predict(fake) print("响应:", response) print("状态码:", code) print("说明:模型在全局作用域加载,请求处理函数只做解析和推理")
_model = MiniClassifier()在模块加载时训练并持有模型,这是冷启动优化中“模型加载放全局作用域”的直接落地。def predict(request):Cloud Functions 约定的入口函数签名,平台将 HTTP 请求封装为 request 对象传入。payload = request.get_json(silent=True) or {}容错解析请求体,请求体不是合法 JSON 时返回空字典而不是抛异常。result = _model.predict(features)调用模型执行推理,features 是请求中携带的输入特征数组。return json.dumps(result), 200返回 JSON 字符串和 HTTP 状态码,真实部署到 GCP 后,这个返回值会直接变成 API 响应。
常见误区
误区Cloud Functions 用起来太简单了,我只要 `gcloud functions deploy` 一下,任何模型都能往上面丢,包括几个 GB 的大语言模型。
正解Cloud Functions 有硬性资源边界:内存上限 16GiB、执行超时上限 540 秒。大模型光加载就要数 GB 内存,推理一次可能几十秒,很容易触顶崩溃或超时。就像大排档的灶台炒不了佛跳墙——菜品超纲了。模型超过一定规模,应该选 Cloud Run 或 Vertex AI 这类资源更宽的平台。
为何常见:无服务器平台隐藏了底层机器规格,开发者只看到“上传即运行”的丝滑,容易忽略它的资源天花板。
误区函数启动慢?把内存从 512MiB 加到 2GiB,CPU 也变强了,冷启动总该快了吧?
正解调高内存确实会按比例提升 CPU 性能,对模型加载有轻微加速,但冷启动的根源是“新实例要从零初始化”,包括分配容器、启动 Python 运行时、执行全局代码。就算机器快一倍,这些固定开销依然存在。治本要靠最小实例数常驻,治标靠精简依赖和轻量框架。加大内存是止痛药,设 min-instances 才是不再犯病。
为何常见:人们习惯用“加配置”解决性能问题,因为这是传统服务器时代的通用解法,但在冷启动场景里,瓶颈在初始化流程,不在硬件速度。
误区设置了最小实例数后,函数闲着也是闲着,平台应该不扣钱,因为没人调用。
正解常驻实例会持续占用内存和少量 CPU,平台按占用时间计费,只是不产生“调用次数”费用。这就好比餐厅养着一个全职厨师,没客人时厨师在擦桌子,但工资照发。实践中,一个 1GiB 常驻实例一个月的空闲占用费大约几十元人民币,这是你用钱买冷启动消失,属于明确的成本权衡。
为何常见:“按量付费”常被误读成“没跑就不花钱”,忽略了资源占用本身也是被计量的量。
误区既然是 Serverless,那流量再大平台也能自动扛住,我不需要关心什么配额和上限。
正解每个 GCP 区域的 Cloud Functions 都有实例配额,默认上限通常在数百个并发实例。另外,突增流量可能导致实例创建速率跟不上请求速率,造成超时。生产中要么用 --max-instances 明确设限防止成本失控,要么提前向 GCP 申请提高配额,并做压测验证扩容速度。就像餐厅虽然能临时加桌,但桌椅总数、厨师总数都有上限,容不下整个城市的人。
为何常见:无服务器宣传语“从零到无限扩展”深入人心,但“无限”是在配额和物理资源约束前提下的相对概念。
误区所有推理都用 HTTP 调用最简单,批量场景也写个 for 循环发几百个 HTTP 请求,不就行了?
正解同步 HTTP 只适合在线低延迟推理。批量异步场景用 HTTP 会带来几个问题:客户端需要长时间保持连接、失败难以重试、并发请求直接冲击函数实例。用 Pub/Sub + Cloud Functions,消息进队列后由平台调度消费,天然支持重试、削峰和解耦;用 Storage 触发器,文件一上传就自动开始处理,完全不用写轮询代码。选触发器和选交通工具一样,短途步行(HTTP),长途货运上货车(Pub/Sub)。
为何常见:HTTP 是开发者最熟悉的第一反应,而事件驱动需要理解消息模型,认知门槛更高,所以容易被忽略。
面试题
Q1. Cloud Functions 属于哪类云服务模型?
- A.基础设施即服务(IaaS)
- B.平台即服务(PaaS)
- C.函数即服务(FaaS)← 正确答案
- D.软件即服务(SaaS)
答案:C。Cloud Functions 是典型的 FaaS(函数即服务),开发者只上传函数代码,平台管理运行时和扩缩容。IaaS 要自己管虚拟机,PaaS 要部署完整应用,SaaS 是最终用户直接使用的软件。就像云餐厅模式:你只提供菜谱(函数),不关心灶台(服务器)怎么摆。
Q2. 以下哪个操作最能直接缓解 Cloud Functions 的冷启动延迟?
- A.增加函数代码注释说明
- B.设置最小实例数保持常驻← 正确答案
- C.删除日志记录代码片段
- D.使用更低版本运行时环境
答案:B。设置最小实例数(min-instances)让平台保持至少一个常驻实例,请求进来直接走热启动,是治本手段。加注释、删日志对启动时间没有决定性影响,用更低版本运行时反而可能损失性能。就像餐厅提前把灶火烧着,客人来了就能直接掂勺。
Q3. 函数空闲但设置了常驻实例时,平台收取哪项费用?
- A.调用次数产生的计费
- B.空闲实例占用的费用← 正确答案
- C.网络出站流量的费用
- D.模型存储租赁的费用
答案:B。常驻实例即使不处理请求,也持续占用内存和 CPU,平台按资源占用时间计费,只是不产生“调用次数”费用。模型存储费属于 GCS 等其他产品,与函数实例计费无关。类比餐厅养着全职厨师,没客人时工资照发。
Q4. 部署模型到 Cloud Functions 时,模型加载代码应该放在哪里?
- A.每次调用按需重新加载
- B.全局作用域加载一次← 正确答案
- C.请求处理函数内部加载
- D.日志输出函数内部加载
答案:B。Cloud Functions 的模块级代码只在实例启动时执行一次,把模型加载放在全局作用域,后续所有请求都复用已加载的模型实例,大幅降低推理延迟。A 和 C 会在每次请求时重复加载模型,正是冷启动优化的反面教材。
Q5. 当并发请求超过单实例上限时,Cloud Functions 会如何处理?
- A.拒绝所有超出部分的请求
- B.排队等待当前实例空闲处理
- C.自动创建新的函数实例响应← 正确答案
- D.降级返回错误提示信息
答案:C。Cloud Functions 的核心卖点就是自动伸缩:单实例并发饱和后,平台自动启动新实例分摊流量,整个过程对调用方透明。排队等待是 Pub/Sub 这类消息队列的行为,而不是同步 HTTP 函数的默认行为。就像餐厅坐满后自动叫来更多厨师,而不是让客人一直等着。
Q6. 定时触发 AI 批处理任务,应优先选择哪种触发器?
- A.HTTP 触发器方式(HTTP)
- B.定时调度器(Scheduler)← 正确答案
- C.消息队列(Pub/Sub)
- D.对象存储(Storage)
答案:B。Cloud Scheduler 支持 cron 表达式定时触发,适合每天凌晨跑批。HTTP 触发器需要外部手动调用,Pub/Sub 是消息驱动的异步解耦,Storage 是文件事件触发——它们都不是“到点自动执行”的定时器。就像闹钟负责叫你起床,门铃和电话都做不到。
Q7. 某 AI 服务需常驻内存 10GiB 且单次任务最长运行 10 分钟,最合适的选型是什么?
- A.Cloud Functions 提高内存上限
- B.Cloud Functions 调高超时时间
- C.Cloud Run 提供更大资源规格← 正确答案
- D.关闭无服务器改用自建平台
答案:C。Cloud Functions 内存上限 16GiB 虽然能容纳 10GiB 模型,但 10 分钟等于 600 秒,超过 Functions 的超时上限 540 秒,非常危险。Cloud Run 支持最长 60 分钟的执行超时和更大内存,明显更适合。D 选项放弃无服务器并非必要。类比:这道菜要炖很久,应该去正餐餐厅而不是快餐档口。
Q8. Cloud Functions 支持哪些事件触发源?(多选)
- A.HTTP 请求触发函数← 正确答案
- B.Pub/Sub 消息触发函数← 正确答案
- C.SQL 数据更新直接触发
- D.Storage 文件变化触发← 正确答案
答案:ABD。Cloud Functions 支持 HTTP、Pub/Sub、Cloud Storage 等触发器。C 错误:Cloud SQL 本身不直接作为事件源触发函数,通常需要上层应用监听数据库变更后发消息到 Pub/Sub 再触发。就像餐厅接单靠门铃、电话和窗口,数据库更新更像“后厨盘点”,不会自动催你做饭。
Q9. 生产环境部署 Cloud Functions 推理服务,推荐的做法有哪些?(多选)
- A.配置日志监控和告警规则← 正确答案
- B.用流量拆分做灰度发布← 正确答案
- C.API 网关增加身份鉴权访问← 正确答案
- D.关闭所有日志以降低成本
答案:ABC。日志监控、灰度发布、身份鉴权是生产环境的三大标配。D 错误:日志费用远低于故障排查成本,生产环境必须保留结构化日志用于追踪推理错误和性能瓶颈。就像餐厅每天要记账、试菜、查卫生,省掉这些省下的钱不够一次事故赔的。
Q10. 关于 Cloud Functions 与 Cloud Run 的对比,说法正确的有哪些?(多选)
- A.Cloud Run 基于容器灵活自定义← 正确答案
- B.Cloud Functions 只支持 HTTP 触发
- C.Cloud Run 支持更长执行超时时间← 正确答案
- D.Cloud Functions 自动伸缩能力弱
答案:AC。A 正确,Cloud Run 部署完整容器镜像,可自定义运行时和多路由。C 正确,Cloud Run 最长执行 60 分钟,Functions 最高 540 秒。B 错误,Functions 支持 HTTP、Pub/Sub、Storage 等多种触发器。D 错误,Functions 的自动伸缩能力与 Run 一样强。类比:正餐餐厅能办长时间宴会,快餐档口也能多开几个窗口——但说快餐只能接外卖、不能应对高峰,就不对了。