切换·Esc 返回

Serverless 函数Serverless

上线与排错
把后端代码放到云端,有请求时由平台自动运行

Serverless 并不是没有服务器,而是平台负责运行和扩缩。它适合小型 API、表单和 Webhook;使用前要了解执行时长、冷启动、无状态和平台限制。

请求 唤醒函数 响应
空闲时不用一直养着一台机器

什么时候用

  • 小型网站的 API、表单提交、支付回调和定时任务
    适合短小、事件驱动的任务
    HTTP提交表单Webhook支付回调Cron每日汇总
  • 希望跟随前端一起部署,不想先维护 VPS
    前端与函数一起部署
    git push构建页面 + API获得网址
    不必先购买和维护一台 VPS
  • 把每个函数设计成短小、无状态、可重复执行
    状态放到外部服务
    请求短时函数数据库 / 存储
  • 在平台设置中配置 环境变量 Env Var,不要写进仓库
    密钥放平台设置
    环境变量AI_API_KEY = ••••••••Git 仓库不包含密钥

什么时候不用

  • 不要把长时间转码或永久连接直接放进短时函数
    任务时间超过函数上限
    视频转码预计 10 分钟 函数上限10 秒后超时
  • 依赖函数内存保存状态:下一次请求可能换一台机器
    下一次请求可能换实例
    实例 A 内存count = 8 实例 B 内存count = 0
    需要保留的数据应该写入数据库或缓存
  • 忽略超时、区域、并发和计费限制
    上线前先看平台限制
    超时10s区域sin1并发100本月调用82%
  • 把平台绑定写满业务每一层,未来难以迁移
    业务逻辑被平台 API 包住
    vercel.only.doBusinessRule()cloudflare.only.saveOrder()
    迁移时不得不重写核心规则
组成结构 · Anatomy
平台入口函数实例外部状态
1平台入口Gateway平台负责网址、HTTPS、扩缩容和请求分发
2函数Function你的代码只在请求或事件到来时执行
3外部状态External State持久数据放数据库或存储服务,不依赖函数内存
典型使用场景
Next.js API Route
Next.js API Route和前端项目一起发布
git pushVercel 构建/api/contact 上线
联系表单发送邮件
联系表单一次请求发送一封邮件
发送
函数结果邮件已发送
支付平台回调
支付回调收到平台事件后更新订单
payment.succeeded验证签名订单改为已支付
函数可重复执行,避免同一回调重复记账
每天运行一次定时任务
定时任务每天自动执行一次汇总
计划每天 09:00动作生成昨日数据最近运行✓ 12.4s