Lambda 并发 1,000 的幕后 - Firecracker 预热池与 Worker Manager 的机制

解析 Lambda 在默认并发数 1,000 限制内管理微型虚拟机的机制、预热池的复用策略、Worker Manager 的放置决策、降低冷启动率的内部优化。

Lambda 执行环境的生命周期

Lambda 函数调用到达时,Lambda 服务分配执行环境(Execution Environment)。执行环境是运行在 Firecracker 微型虚拟机上的沙箱,包含函数代码、运行时和配置的环境变量。执行环境的生命周期由三个阶段组成。INIT 阶段启动运行时并执行处理程序外的全局作用域代码。INVOKE 阶段执行处理程序函数。SHUTDOWN 阶段在一段时间无调用后关闭运行时并销毁执行环境。

预热池的管理策略

Lambda 的预热池管理是在最小化冷启动率和最大化资源效率之间取得平衡的优化问题。长时间在预热池中保持执行环境可减少冷启动,但持续占用内存会压缩物理主机容量。反之,立即销毁可释放资源但增加冷启动。AWS 在 2019 年的论文中描述了 Lambda 预热池管理使用基于历史调用模式的预测模型。对于定期调用的函数,执行环境保持更长时间;对于偶发调用的函数,较快释放。

Worker Manager - 放置到哪台物理主机

Lambda 的 Worker Manager 是决定将新执行环境放置到哪台物理主机(Worker)的组件。该放置决策需同时满足多个约束。第一,物理主机的容量(CPU、内存)有空余。第二,同一客户的执行环境分散到多台物理主机(故障隔离)。第三,需要 VPC 连接的函数必须放置在可访问目标 VPC 的主机上。Worker Manager 综合这些约束做出最优放置决策。

并发数管理与突发限制

Lambda 每账户的默认并发数 1,000 在区域内所有函数间共享。如果函数 A 使用 800 并发,函数 B 只能使用 200。突发限制是并发数急增速度的限制。在 us-east-1、us-west-2、eu-west-1 初始突发为 3,000,之后每分钟增加 500。其他区域初始突发为 500 至 1,000。该限制防止突发流量瞬间耗尽物理主机容量。

执行环境复用的注意事项

执行环境的复用(热启动)从性能角度有利,但开发者需注意副作用。第一,全局变量的状态会被保留。上次调用设置的全局变量值在下次调用时仍然存在。利用这一点缓存数据库连接(连接池)是推荐模式,但将请求特有数据保存在全局变量中会导致下次调用使用错误数据。第二,/tmp 目录的内容会保留。上次调用写入的临时文件在下次调用时仍然存在,需注意磁盘空间(512MB 或配置的临时存储)的管理。