Serverless

你可能会说

我就一个小功能,不想买服务器也不想运维,有没有按次跑代码的?

Serverless 是让云平台按需要运行后端代码、免去自己维护服务器的一种方式。例如用户提交联系表单后,云平台按这次提交运行一段代码,保存内容并发送通知。它不是没有服务器,而是服务器由平台管理;运行多久、能否保留内容和怎样收费仍受平台规则限制。
也常被叫作Serverless 函数无服务器计算
请求POST /api/contact
⚡ 函数平台按需启动
响应200 OK
没有请求时实例为 0 · 按运行次数计费

什么时候用

  • 小型网站的 API、表单提交、支付回调和定时任务
    适合短小、事件驱动的任务
    HTTP提交表单Webhook支付回调Cron每日汇总
  • 希望跟随前端一起部署,不想先维护 VPS
    前端与函数一起部署
    git push构建页面 + API获得网址
    可由平台托管运行环境,仍需管理配置、监控和成本
  • 把每个函数设计成短小、无状态、可重复执行
    状态放到外部服务
    请求短时函数数据库 / 存储
  • 在平台设置中配置 环境变量 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()
    平台专用 API 过多会提高迁移或重构核心规则的成本
组成结构 · Anatomy
平台入口函数实例外部状态
平台负责网址、HTTPS、扩缩容和请求分发
你的代码只在请求或事件到来时执行
持久数据放数据库或存储服务,不依赖函数内存
典型使用场景
Next.js API Route
Next.js API Route可随前端项目一起发布
git push平台构建/api/contact 可用
以仓库分支和平台部署配置为准
联系表单发送邮件
联系表单一次请求发送一封邮件
发送
函数结果邮件已发送
支付平台回调
支付回调收到平台事件后更新订单
payment.succeeded验证签名订单改为已支付
应设计为幂等,避免同一回调重复记账
每天运行一次定时任务
定时任务每天自动执行一次汇总
计划每天 09:00动作生成昨日数据最近运行✓ 12.4s