无服务器计算 Lambda

AWS Lambda

你只管交一段代码,有人调用就跑一下,没人调用不花钱,也完全不用管服务器。

计算与运行时出现时间 · 2014按调用次数与执行时长(内存乘以运行秒数)计费,每月有相当可观的免费额度。Serverless事件驱动免运维按用量计费
看官方文档

01 它是干嘛的

Lambda 把云计算往前推了一步:过去你租的是机器,哪怕没人访问,机器也一直开着、一直付钱;Lambda 让你只交一段代码,平台负责在事件发生时把它跑起来。它的观念价值在于「你不再为服务器开着付费,而是为代码被执行付费」,这把运维的负担几乎一次性去掉。

02 为什么会有它

2014 年之前:哪怕网站半夜没人访问,服务器也得整夜开着

用传统服务器有个说不通的地方:无论有没有人访问,机器都在那里开着、耗着电、也一直计费。一个每天只用到两小时的服务,仍旧要付全天二十四小时的钱。更麻烦的是,你还得给它打补丁、盯监控、担心内存泄漏,明明只是想让程序在需要时跑一下,却被服务器的日常琐事绑住。

有人试过让运维写脚本,在夜里把机器关掉、白天再开,但这既不优雅,又无法应对突发的访问:流量突然来了,机器还在关机状态,用户就只能干等。

2014 年,Lambda 换了一个视角:既然大部分代码都是「某件事发生时才需要跑一下」,那为什么要有「服务器长期开着」这个概念?把代码交出去,让平台在事件发生时自动找人执行,事件结束就回收,按实际执行的时间收钱。程序员从此不再思考机器在哪里、有几台、够不够用,这门理念后来被统一称为「无服务器」。

03 它怎么工作

Lambda 的执行模型是「事件驱动」:不是有人一直守着程序,而是等某件事发生(上传了文件、收到请求、到了定时点),平台才临时把代码跑起来,跑完立刻回收。

函数计算:有事件才运行,没人用不花钱① 事件触发按并发自动扩② 读写外部状态HTTP 请求用户点了一下按钮消息队列有新消息进来定时任务每天凌晨触发你的函数只写业务逻辑自动扩缩1 个请求也是 1 个实例数据库 / 存储状态存在外面日志与监控每一次调用都有记录没有请求的时候,实例数就是 0;因此不为闲置的服务器付钱。被执行时才存在弹性能力
看「事件」如何把一段静止的代码唤醒,以及旁边标注的「冷启动」那一格:它是复用已就绪环境与临时新建环境的差别,也是无服务器计算唯一需要提防的延迟来源。

一次调用是怎么发生的:事件触发、冷启动与按量计费

  1. 1
    ① 某个事件发生

    触发源很多:收到一个网页请求、有人上传了文件、数据库记录变了、定时器到点,任何一个都能唤醒你的代码。

  2. 2
    ② 平台准备运行环境

    如果附近有闲置环境就复用;如果长时间没人调用、环境已被回收,就要先建立一个新环境,这一步产生的延迟叫冷启动。

  3. 3
    ③ 执行你的处理函数

    代码收到一个「事件对象」,里面装着触发它发生的事情的详细信息,处理完返回结果即可。

  4. 4
    ④ 按实际用量计费

    计费只看「被调用了多少次」与「每次跑了多久」,精确到毫秒级,没人调用的时候费用为零。

  5. 5
    ⑤ 出错自动重试,多次失败进死信

    执行失败时平台按策略自动重试;反复失败的消息会被放进「死信队列」单独留存,方便事后排查。

04 谁在用它

轻量后端接口

把网站的接口做成函数,平时不占资源,来一个请求跑一次,天然扛得住流量忽高忽低。

文件自动处理

有人上传图片到存储,立刻自动生成缩略图;上传视频,自动触发转码流程。

定时任务

每天定时跑报表、清理临时数据、发送提醒,不需要为此专门养一台机器。

事件驱动的业务逻辑

订单创建后自动发通知、更新库存、写日志,各步骤解耦,互不拖累。

数据管道的一环

每当有新数据落进存储,就自动触发一次清洗或统计,形成自动流动的处理链。

05 怎么用

会写一段函数就能上手,但要把「无状态」这件事记牢,否则会在场景切换时踩坑。

  1. 01在控制台创建一个函数,选择运行语言(Node、Python、Java 等都支持)。
  2. 02写处理函数并导出为约定的入口,函数会收到事件对象与上下文对象两个参数。
  3. 03为它配置一个触发源:可以是网页接口、文件上传、定时计划或消息队列。
  4. 04如果需要访问其他服务,为函数绑定一个「角色」,靠权限而不是靠写在代码里的密钥。
  5. 05设置内存与超时上限,跑一次测试调用,在日志里确认结果符合预期。
  6. 06上线后关注调用次数、错误率与执行耗时,据此调整配置与并发上限。
一个最小的 Lambda 处理函数(Node.js)js
// index.mjs:导出的 handler 就是平台要执行的入口
export const handler = async (event, context) => {
  // event 里是触发方传来的数据,例如网页请求带的查询参数
  const name = event.queryStringParameters?.name ?? 'world'

  // 返回的内容会被序列化成一次 HTTP 响应
  return {
    statusCode: 200,
    headers: { 'content-type': 'application/json' },
    body: JSON.stringify({ message: `Hello, ${name}` })
  }
}

避坑提示

  • !函数应当「无状态」:每次执行的环境可能换一台机器,不要把用户数据放在内存里指望它还在。
  • !冷启动在网页接口这类延迟敏感场景会影响体验,可以用定时预热或预留并发来缓解。
  • !单个函数有执行时长上限,长任务(视频转码、大批量计算)应当拆开或交给更合适的服务。

06 关键概念

无服务器(Serverless)
不是没有服务器,而是你不用管服务器:平台负责机器,你只负责代码。
事件驱动
代码不是一直开着,而是等某件事发生时才被唤醒执行一次。
冷启动
长时间没人调用后,首次执行要先建立环境,因此会多花一点时间。
执行时长计费
按代码实际运行的毫秒数和使用内存计费,没人调用时费用为零。
死信队列
反复处理失败的消息被单独存放的「收容所」,便于人工排查而不会丢数据。

07 容易混淆的对比

Cloudflare Workers同样是无服务器函数,但部署在全球每个边缘节点,冷启动几乎为零,适合请求改写类场景。
自建容器服务一台机器跑多个隔离容器,控制力强、成本可预测,但仍需自己运维机器与扩缩容。
图软件图鉴

纯静态站点,无后端、无追踪。内容为中文原创撰写,用于帮助非技术读者理解主流软件产品。

关于本站

全部内容在构建时生成
产品名称与商标归各自公司所有

© 2026 软件图鉴Nuxt 4 · Vue 3 · Tailwind 4 · 纯静态