01 它是干嘛的
Lambda 把云计算往前推了一步:过去你租的是机器,哪怕没人访问,机器也一直开着、一直付钱;Lambda 让你只交一段代码,平台负责在事件发生时把它跑起来。它的观念价值在于「你不再为服务器开着付费,而是为代码被执行付费」,这把运维的负担几乎一次性去掉。
02 为什么会有它
2014 年之前:哪怕网站半夜没人访问,服务器也得整夜开着
用传统服务器有个说不通的地方:无论有没有人访问,机器都在那里开着、耗着电、也一直计费。一个每天只用到两小时的服务,仍旧要付全天二十四小时的钱。更麻烦的是,你还得给它打补丁、盯监控、担心内存泄漏,明明只是想让程序在需要时跑一下,却被服务器的日常琐事绑住。
有人试过让运维写脚本,在夜里把机器关掉、白天再开,但这既不优雅,又无法应对突发的访问:流量突然来了,机器还在关机状态,用户就只能干等。
2014 年,Lambda 换了一个视角:既然大部分代码都是「某件事发生时才需要跑一下」,那为什么要有「服务器长期开着」这个概念?把代码交出去,让平台在事件发生时自动找人执行,事件结束就回收,按实际执行的时间收钱。程序员从此不再思考机器在哪里、有几台、够不够用,这门理念后来被统一称为「无服务器」。
03 它怎么工作
Lambda 的执行模型是「事件驱动」:不是有人一直守着程序,而是等某件事发生(上传了文件、收到请求、到了定时点),平台才临时把代码跑起来,跑完立刻回收。
一次调用是怎么发生的:事件触发、冷启动与按量计费
- 1① 某个事件发生
触发源很多:收到一个网页请求、有人上传了文件、数据库记录变了、定时器到点,任何一个都能唤醒你的代码。
- 2② 平台准备运行环境
如果附近有闲置环境就复用;如果长时间没人调用、环境已被回收,就要先建立一个新环境,这一步产生的延迟叫冷启动。
- 3③ 执行你的处理函数
代码收到一个「事件对象」,里面装着触发它发生的事情的详细信息,处理完返回结果即可。
- 4④ 按实际用量计费
计费只看「被调用了多少次」与「每次跑了多久」,精确到毫秒级,没人调用的时候费用为零。
- 5⑤ 出错自动重试,多次失败进死信
执行失败时平台按策略自动重试;反复失败的消息会被放进「死信队列」单独留存,方便事后排查。
04 谁在用它
把网站的接口做成函数,平时不占资源,来一个请求跑一次,天然扛得住流量忽高忽低。
有人上传图片到存储,立刻自动生成缩略图;上传视频,自动触发转码流程。
每天定时跑报表、清理临时数据、发送提醒,不需要为此专门养一台机器。
订单创建后自动发通知、更新库存、写日志,各步骤解耦,互不拖累。
每当有新数据落进存储,就自动触发一次清洗或统计,形成自动流动的处理链。
05 怎么用
会写一段函数就能上手,但要把「无状态」这件事记牢,否则会在场景切换时踩坑。
- 01在控制台创建一个函数,选择运行语言(Node、Python、Java 等都支持)。
- 02写处理函数并导出为约定的入口,函数会收到事件对象与上下文对象两个参数。
- 03为它配置一个触发源:可以是网页接口、文件上传、定时计划或消息队列。
- 04如果需要访问其他服务,为函数绑定一个「角色」,靠权限而不是靠写在代码里的密钥。
- 05设置内存与超时上限,跑一次测试调用,在日志里确认结果符合预期。
- 06上线后关注调用次数、错误率与执行耗时,据此调整配置与并发上限。
// 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)
- 不是没有服务器,而是你不用管服务器:平台负责机器,你只负责代码。
- 事件驱动
- 代码不是一直开着,而是等某件事发生时才被唤醒执行一次。
- 冷启动
- 长时间没人调用后,首次执行要先建立环境,因此会多花一点时间。
- 执行时长计费
- 按代码实际运行的毫秒数和使用内存计费,没人调用时费用为零。
- 死信队列
- 反复处理失败的消息被单独存放的「收容所」,便于人工排查而不会丢数据。