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

177 lines
6.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第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. 什么是"冷启动"?它会造成什么影响?
---
## 延伸阅读
- [Lambda 开发者指南](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
- [Serverless Land — 模式和示例](https://serverlessland.com/)
- [Lambda 定价计算器](https://aws.amazon.com/lambda/pricing/)
---
## 明天预告
明天进入存储领域S3 对象存储。它是 AWS 最早的服务之一,也是用途最广的服务——从存网站图片到做大数据湖,几乎无处不在。