并发、节流与预留并发
了解 Lambda 如何并发扩展,设置预留并发以保护下游服务,并处理节流错误。
并发、节流与预留并发 是 CoddyKit 上的免费 AWS Solutions Architect 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AWS Solutions Architect 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AWS Solutions Architect 课程共包含 4 节课。
Lambda 如何并发扩展
Lambda 通过运行函数的多个并发执行来扩展,每个同时发生的事件对应一次执行。当同时到达 100 个请求时,Lambda 会运行 100 个函数实例并行处理。底层基础设施由 AWS 自动管理。默认情况下,账户级并发限制为每个区域 1,000 个并发执行,这是一个软限制,可通过服务限额申请提高。
并发计算
并发量的计算方式为:并发量 = 每秒请求数 × 平均执行时长(秒)。如果您的函数每秒处理 500 个请求,且每个请求耗时 0.2 秒,则需要 100 个并发执行。理解此公式有助于您预测账户限制是否足够,以及是否需要在高流量事件前申请提高限额。
# Example concurrency calculation
# RPS = 500, avg_duration = 0.2s
# Concurrency = 500 * 0.2 = 100
# To check current concurrency limits:
aws lambda get-account-settings限流:达到限制时会发生什么
当 Lambda 收到的请求数超过并发限制时,会对超出的请求进行限流。对于同步调用(例如 API Gateway),被限流的请求会立即收到 429 TooManyRequestsException,调用方必须处理此错误。对于异步调用(例如 S3 事件),Lambda 会将事件加入队列,并在最多 6 小时内进行重试,然后将其发送到死信队列。
详解预留并发
预留并发为特定函数保证一定数量的并发执行,并从账户并发池中预留这些容量。它有两个作用:(1)保证容量:即使其他函数正在消耗账户配额,该函数也始终有指定数量的可用执行容量;(2)限制并发量:该函数的并发执行数永远不会超过预留数量,从而避免下游依赖服务不堪重负。
# Reserve 100 concurrent executions for a critical function
aws lambda put-function-concurrency \
--function-name 'CriticalProcessor' \
--reserved-concurrent-executions 100使用预留并发保护下游服务
这是一个重要的考试场景:某个 Lambda 函数向连接数限制为 50 的 RDS 数据库写入数据。如果没有并发控制,Lambda 可能扩展到数百个并发执行,耗尽所有数据库连接,导致每个函数都发生错误。将预留并发设置为 40,可确保 Lambda 同时使用的数据库连接不会超过 40,从而保护 RDS 实例。这是所有调用连接数受限服务的 Lambda 函数都应采用的关键模式。
使用预置并发消除冷启动
预置并发会预先初始化指定数量的 Lambda 执行环境,使其无需冷启动即可立即响应。这对于延迟敏感型 API 至关重要,因为即使 100 毫秒的冷启动也可能无法接受。即使这些环境处于空闲状态,您仍需按小时支付预置并发费用,因此请将其与自动扩缩容结合使用,根据预测的流量模式调整预置容量。
aws lambda put-provisioned-concurrency-config \
--function-name 'LatencySensitiveAPI' \
--qualifier 'prod' \
--provisioned-concurrent-executions 50预留并发与预置并发
这两个概念经常被混淆,但用途不同。预留并发限制并保证从账户并发池中分配的容量,但不会消除冷启动。预置并发会预热执行环境以消除冷启动,但不会阻止其他函数使用同一个并发池。使用预留并发限制吞吐量,使用预置并发改善延迟。两者可以同时用于同一个函数。
突发限制与初始扩展
Lambda 不会瞬间扩展到完整并发量。账户级别存在一个突发限制(初始扩展速率),其数值因区域而异,通常为初始突发 3,000 个执行,之后每分钟增加 500 个执行,直到达到限制。对于预计会出现突然大幅流量增长的应用(病毒式流量、限时抢购),请使用预置并发预热足够的环境,以免突发限制在初始流量激增期间导致限流。
CloudWatch 中的 Lambda 并发指标
请使用以下关键 CloudWatch 指标监控 Lambda 并发情况:
- ConcurrentExecutions:当前正在运行的实例数量
- Throttles:被限流的调用次数(健康系统中应为零)
- UnreservedConcurrentExecutions:账户级未预留并发池
- ProvisionedConcurrencyUtilization:预置容量的使用量
请针对 Throttles 设置告警,以便在限流影响最终用户之前收到通知。
aws cloudwatch put-metric-alarm \
--alarm-name 'LambdaThrottlesAlert' \
--metric-name Throttles \
--namespace AWS/Lambda \
--dimensions Name=FunctionName,Value=MyFunction \
--statistic Sum \
--period 60 \
--threshold 1 \
--comparison-operator GreaterThanOrEqualToThreshold \
--evaluation-periods 1在应用代码中处理限流
设计同步调用 Lambda 的系统(API Gateway、SDK 直接调用)时,请在调用方实现带抖动的指数退避。AWS SDK 内置了重试逻辑,但对于由 API Gateway 接入的 Lambda,您必须在客户端应用中处理 429 响应。对于由 SQS 触发的 Lambda,SQS 服务本身会处理重试;请为源队列适当设置最大接收次数,并为重试耗尽的消息配置 DLQ。
并发与基于流的触发器
对于 Kinesis Data Streams 和 DynamoDB Streams,Lambda 的并发量受分片(Kinesis)或分区(DynamoDB)数量限制。每个分片或分区恰好由一个并发 Lambda 执行处理。如果您有 10 个 Kinesis 分片,Lambda 将为该触发器运行最多 10 个并发执行。这意味着,基于流的触发器出现限流问题时,通常应增加分片数量,而不是提高并发限制。
快速检查
请测试您对本课 AWS 解决方案架构师(SAA-C03)相关概念的理解。
课程回顾
本课中您学习了:预留并发既能保证函数的并发执行容量,又能限制其并发执行数,从而保护下游服务并确保可用性;预置并发会预先初始化环境,为延迟敏感型工作负载消除冷启动;而限流在同步调用中表现为 429 错误,在异步调用中表现为排队重试,可通过 CloudWatch 的 Throttles 指标进行监控。接下来,我们将学习 Lambda 层和部署包,以管理大型依赖项。
常见问题解答
「并发、节流与预留并发」课时是免费的吗?
是的 — 「并发、节流与预留并发」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AWS Solutions Architect 课程的其余内容,请升级到 CoddyKit PRO。 AWS Solutions Architect 课程共包含 4 节课。
「并发、节流与预留并发」这节课中我会学到什么?
了解 Lambda 如何并发扩展,设置预留并发以保护下游服务,并处理节流错误。 你通过在浏览器中直接运行的动手代码来练习 AWS Solutions Architect,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AWS Solutions Architect 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AWS Solutions Architect 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「并发、节流与预留并发」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AWS Solutions Architect 课中编写并运行代码吗?
能。每节 AWS Solutions Architect 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。