扩展 Lambda 托管实例
Lambda 托管实例不会在调用到达时进行扩展,并且不支持冷启动。相反,它通过资源消耗信号进行异步扩展。托管实例目前根据 CPU 资源利用率和多并发饱和状态进行扩展。
主要区别:
-
Lambda(默认):当没有可用的执行环境来处理传入的调用时(冷启动)进行扩展
-
Lambda 托管实例:根据 CPU 资源利用率和执行环境的多并发饱和状态进行异步扩展
如果您的流量在 5 分钟内增长超过一倍,您可能会在 Lambda 纵向扩展实例和执行环境以满足需求时看到节流出现。
扩缩生命周期
Lambda 托管实例使用分布式架构来管理扩缩:
组件:
-
托管实例:在您的账户中,于您提供的子网内运行
-
路由器和扩缩器:用于路由调用和管理扩缩的共享 Lambda 组件
-
Lambda 代理:在每个托管实例上运行,以管理执行环境生命周期并监控资源消耗情况
工作原理:
-
当您使用容量提供程序发布函数版本时,Lambda 会在您的账户中启动托管实例。默认情况下,它会启动三个实例以实现可用区的容错功能,并在将您的函数版本标记为 ACTIVE 之前启动三个执行环境。
-
每个托管实例都可以为映射到同一个容量提供程序的多个函数运行执行环境。
-
随着流量进入您的应用程序,执行环境会消耗资源。Lambda 代理会向扩缩器发送通知,后者则会决定是否要扩展新的执行环境或托管实例。
-
如果路由器尝试向资源消耗较高的执行环境发送调用,则该实例上的 Lambda 代理会通知它在另一个执行环境上重试。
-
随着流量的减少,Lambda 代理会通知扩缩器,后者会做出决定,即纵向缩减执行环境并横向缩减托管实例。
调整扩缩行为
您可以通过四个控件自定义托管实例的扩缩行为:
函数级别控件
1. 函数内存和 vCPU
为您的函数选择内存大小和 vCPU 分配量。支持的最小函数大小为 2GB 和 1 个 vCPU。
注意事项:
-
选择能够支持您的函数的多并发执行的内存和 vCPU 设置。
-
您不能为函数配置少于 1 个 vCPU,因为托管实例上运行的函数应能够支持多并发工作负载。
-
您不能选择低于 2GB,因为这符合 c 实例 2:1 的内存与 vCPU 比(这种比例是所有比例中最低的)
-
对于 Python 应用程序,由于 Python 处理多并发的方式,您可能需要选择较高的内存与 vCPU 比(例如 4:1 或 8:1)
-
如果您正在运行 CPU 密集型操作或执行的 IO 很少,则应选择多个 vCPU
2. 最大并发数
为每个执行环境设置最大并发数
默认行为:Lambda 选择合理的默认设置,这些设置能平衡资源消耗与吞吐量,同时适用于各种各样的应用程序。
调整指南:
-
提高并发数:如果您的函数调用所占用的 CPU 极少,可提高最大并发数(最高至每个 vCPU 64 个)
-
降低并发数:如果您的应用程序占用大量内存但 CPU 使用率很低,您可以降低最大并发数
重要提示:由于 Lambda 托管实例适用于多并发应用程序,因此并发度极低的执行环境在进行扩缩时可能会遇到节流的情况。
容量提供程序级别控件
3. 目标资源利用率
选择您自己的 CPU 利用率消耗目标。
默认行为:Lambda 会保留足够的余量,让您的流量在 5 分钟翻倍也不会受到节流。
优化选项:
-
如果您的工作负载非常稳定或者您的应用程序对节流不敏感,您可以将目标设定得较高,以实现更高的利用率和更低的成本。
-
如果您希望为突发流量留出足够的空间,可以将资源目标设定为较低水平,这样就需要更大的容量
4. 实例类型选择
设置允许或排除的实例类型。
默认行为:Lambda 会为您的工作负载选择最佳实例类型。我们建议让 Lambda 托管实例为您选择实例类型,因为限制可能的实例类型数量可能会导致可用性降低。
自定义配置:
-
特定的硬件要求:将允许的实例类型设置为兼容的实例列表。例如,如果您的应用程序需要较高的网络带宽,您可以选择多种 n 系列实例类型。
-
成本优化:对于测试或开发环境,您可以选择较小的实例类型,例如 m7a.large 实例类型
后续步骤
-
查看特定于运行时的指南,了解如何处理多并发
-
监控扩缩指标以优化扩缩行为