扩展与并发控制
使用 AWS Lambda 构建无服务器应用
Claudio Canales
Senior DevOps Engineer
一图看扩展
- 需求越高 -> 并行运行越多。
- 每次运行占用一个执行环境。
- 并发 = 当前正在运行的数量。
什么是并发?
- 一次调用 = 一个工作单元。
- 并发 = 现在在跑多少个。
- 若有 10 个在跑,并发 = 10。
估算所需并发
- 经验公式:
concurrency = rps * duration。
- 降低时长可降低并发。
- 用此安全设定上限。
示例:50 rps、200 ms
- 200 ms = 0.2 秒。
- 50 * 0.2 = 10 个并发执行。
- 代码越快,并行数越少。
限制:账户池 vs 函数切片
- 并发在账户级受限。
- 为关键函数预留部分配额。
- 其余函数共享剩余。
预留并发:硬性上限
- 安全阀。
- 限制并行工作量。
- 超过上限将被限流。
- 吵闹的函数不会耗尽容量。
限流:表象
- Lambda 在并发上限处限流。
- 调用方无法获得正常执行。
- 监控中可看到限流。
预留 vs 预置(不同问题)
- 预留用于控制负载。
- 预置用于控制启动时延。
- 许多生产函数两者并用。
保护下游系统
- 数据库能承载的连接有限。
- 并发上限可防止超载。
- 否则流量尖峰可能引发故障。
突发 vs 稳定流量
- 突发会创建大量并行环境。
- 处理器慢会维持高并发。
- 上限可平滑尖峰。
- 缩短时长也是扩展策略。
故障与重试会增大负载
- 重试会放大量。
- 并发上限可缩小影响面。
- 失败循环会压垮依赖。
简单调优流程
- 先做测量。
- 出现限流或压力时设并发上限。
- 冷启动影响延迟时加预置容量。
要点回顾
- 并发有助于思考扩展。
- 估算:
rps * duration。
- 预留用于限载;关注限流。
- 预置可降低冷启动延迟。
¡Vamos a practicar!
使用 AWS Lambda 构建无服务器应用
Preparing Video For Download...