# 第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 最早的服务之一,也是用途最广的服务——从存网站图片到做大数据湖,几乎无处不在。