aws-doc/课程/第二阶段-核心服务/第11天-Lambda无服务器计算.md
2026-05-08 10:24:39 +08:00

6.0 KiB
Raw Blame History

第11天AWS Lambda——不用管服务器的计算

今天你将学到什么

今天学习一种全新的计算方式无服务器Serverless。你不需要启动任何服务器只需要写一段代码函数AWS 帮你运行。用一次付一次的钱,不用的时候一分钱不花。


什么是"无服务器"

"无服务器"这个名字容易让人误解——当然还是有服务器的,只是你不需要管理它

传统方式EC2 你租了一台服务器 → 你要选配置、装系统、部署代码、打补丁、监控运行状态、处理故障...

无服务器方式Lambda 你写了一段代码 → 上传到 AWS → 有人触发时 AWS 自动运行 → 运行完毕自动释放

生活类比

  • EC2 像是你雇了一个全职员工:不管有没有活干,你都要付工资。他生病了你还得找人替班。
  • Lambda 像是你叫了一个兼职:有活的时候叫他来干,干完就走,按小时付钱。没活的时候不花钱。

Lambda 怎么工作

Lambda 的执行单位是"函数"。一个函数就是一段代码,它的生命周期很简单:

某个事件发生 → 触发你的函数 → 函数执行 → 返回结果 → 结束

什么能触发 Lambda

几乎 AWS 生态中的任何事件都能触发 Lambda

触发源 场景举例
用户访问 API 用户点击"提交订单",触发处理订单的函数
文件上传到 S3 用户上传了一张照片,自动触发压缩和生成缩略图
数据库数据变化 用户修改了个人资料,自动触发同步到搜索引擎
定时触发 每天凌晨 2 点自动生成报表
消息队列 有新订单消息进入队列,触发发货通知

一个具体的例子

场景:用户上传头像,需要自动生成三种尺寸的缩略图。

传统做法

  • 启动一台 EC2 服务器
  • 安装图片处理软件
  • 写一个程序持续监听上传事件
  • 服务器 7×24 运行,即使没人上传也在空转

Lambda 做法

  • 写一个函数:接收图片 → 生成三种尺寸 → 保存回 S3
  • 配置触发器S3 有新文件上传时触发
  • 完成!

有人上传时函数自动运行,没人上传时什么都不发生(也不花钱)。


Lambda 的计费方式

Lambda 的计费精确到不可思议:

按两个维度收费

  1. 请求次数:每调用一次函数算一次请求
  2. 执行时长:函数运行了多长时间 × 分配了多少内存

免费额度(永久免费,不是 12 个月)

  • 每月 100 万次请求免费
  • 每月 40 万 GB-秒计算时间免费

这意味着什么?

假设你的函数:

  • 分配 128MB 内存
  • 每次执行 200 毫秒
  • 每月调用 100 万次

计算100万 × 0.2秒 × 0.125GB = 25,000 GB-秒

这完全在免费额度内。一分钱不花。

对于个人项目和小型应用Lambda 几乎是免费的。


Lambda 的限制

Lambda 不是万能的,它有一些限制:

限制 意味着什么
最长运行时间 15 分钟 不能跑长时间任务
最大内存 10GB 不能处理超大数据集
部署包大小 250MB解压后 不能打包太多依赖
并发数 1000默认 同时最多 1000 个函数在跑

Lambda 适合什么,不适合什么

非常适合 Lambda 的场景

  • API 后端:用户请求来了处理一下返回结果(配合 API Gateway
  • 文件处理图片压缩、视频转码、PDF 生成
  • 定时任务:每天发报表、清理过期数据、健康检查
  • 事件响应:用户注册后发欢迎邮件、订单创建后通知仓库
  • 数据转换:从一个格式转成另一个格式

不适合 Lambda 的场景

  • 长时间运行的任务:超过 15 分钟的任务(比如训练机器学习模型)
  • 需要持续连接的服务WebSocket 服务器、游戏服务器
  • 高性能计算:需要 GPU 或大量 CPU 的任务
  • 有状态的应用:需要在内存中保持数据的服务

Lambda vs EC2什么时候用哪个

我的需求是... 选择
处理偶尔的事件(每天几百次到几万次) Lambda
7×24 持续运行的服务 EC2
不想管任何服务器 Lambda
需要完全控制运行环境 EC2
运行时间可能超过 15 分钟 EC2
流量极不稳定(有时 0有时暴涨 Lambda
稳定的高流量 EC2更便宜

很多项目是混合使用的

  • 主要的 Web 服务跑在 EC2/ECS 上
  • 后台的定时任务、文件处理用 Lambda
  • 这样既有稳定性,又有灵活性

冷启动问题

Lambda 有一个需要了解的特性:冷启动

当你的函数一段时间没被调用AWS 会回收它的运行环境。下次调用时需要重新准备环境,这个过程叫"冷启动",会增加几百毫秒到几秒的延迟。

就像:你叫了一个兼职,如果他正好在附近(热启动),马上就能开始干活。如果他在家(冷启动),需要先赶过来。

解决方案

  • 对于大多数场景,几百毫秒的冷启动完全可以接受
  • 如果对延迟要求极高,可以使用"预置并发"Provisioned Concurrency——提前准备好运行环境但要额外付费

今天的小测验

  1. "无服务器"是不是真的没有服务器?这个名字的含义是什么?
  2. Lambda 的计费方式和 EC2 有什么本质区别?
  3. 举一个适合用 Lambda 的场景和一个不适合的场景。
  4. 什么是"冷启动"?它会造成什么影响?

延伸阅读


明天预告

明天进入存储领域S3 对象存储。它是 AWS 最早的服务之一,也是用途最广的服务——从存网站图片到做大数据湖,几乎无处不在。