本文介绍函数级按量实例伸缩控制的背景信息、应用场景、使用限制、使用说明以及TPS计算公式。

背景信息

为了防止过度调用函数导致费用失控,每个账号在当前地域中按量实例数存在限制,该限制为账号级别限制,所有函数共享按量实例数的最大限制值。例如,账号164901546557****在某地域的按量实例数上限为300,该账号下有3个函数function-a、function-b、function-c。在某一时刻所有正在处理调用的函数按量实例数之和最大为300。

除了账号级别的实例数限制,函数计算为函数的调用提供了更细粒度的按量调用实例数限制,您可以通过控制台或API设置函数级别实例限制数来防止单个函数过度调用导致的实例占用,保护后端资源,避免预期外的费用开销。例如,账号164901546557****下有函数function-a、function-b、function-c。您可以为函数function-a设置按量实例数上限10,调用函数function-a时最多只能占用10个实例。

应用场景

  • 保护函数的正常并发度。

    例如,有function-a、function-b两个函数共享账号级别实例限制数,其中function-a是需要保护的重点业务函数,而function-b有可能被过度调用而影响function-a的正常请求。此时,可以单独为function-b设置实例限制防止function-b抢占大量的按量实例数,使function-a分配不到足够的实例。

  • 保护下游服务。

    例如,在函数计算中需要大量访问RDS数据库,由于数据库处理能力有限,您需要保护RDS不被打垮,您可以为访问RDS的函数设置实例限制。

  • 禁止异常函数调用。

    例如,如果发现某个函数调用异常,可以设置最大函数实例数为0,禁止其调用。

  • 防止过度调用函数。

    例如,浏览器端或客户端用户的操作行为不受控制,设置函数级实例数限制可以防止调用失控而产生意外费用。

  • 配合预留模式使用。

    通过设置函数级按量模式实例数限制,配合预留模式实例数,您可以只使用预留模式实例、只使用按量模式实例或混合使用以上两种模式的实例。

设置函数级按量实例限制后的调用行为

调用类型 调用行为
同步调用 函数调用所需要占用的实例数超过所设置的值后,超出的请求会被拒绝,并收到ResourceExhausted流控错误。
异步调用 函数调用所需要占用的实例数超过所设置的值后,请求不会被拒绝,请求会在队列里以所有实例满负荷执行的速度逐渐被消费。

更多信息,请参见函数调用

函数级按量实例与预留模式实例的配合使用

如果您给指定的函数分配了预留模式实例资源,则优先使用预留资源,在预留资源用满的情况下,再使用按量实例资源。按量实例资源与预留资源配合使用示例如下。

按量模式实例限制 预留模式实例限制 资源使用情况
0 10 不使用按量模式实例,只使用预留模式实例,最多可用10个预留模式实例。

当前预留模式实例不足以支撑并发请求时,新请求会被流控,收到429错误。

20 0 不使用预留模式实例,只使用按量模式实例,最多可用20个按量模式实例。
50 30 优先使用30个预留模式实例,用满后再使用按量模式实例,最多使用50个按量模式实例,总共最多使用80个实例资源。

使用限制

  • 每个账号在当前地域下最多设置100条函数级按量实例数限制规则,每条限制规则的实例限制值不得超过账号级别实例限制值300。
  • 函数级按量实例数限制规则必须设置在指定别名或LATEST版本之上,可以针对函数的多个不同别名设置不同的实例限制。

TPS计算公式

TPS指一秒钟内一个函数所能处理的请求数目。您可以结合TPS和您的业务需求,设置函数按量实例数。

TPS的计算公式为:TPS = 1 / DurationInSecond × InstanceConcurrency × MaxInstances

假设一个函数执行平均时长(DurationInSecond)为0.1s,该函数的按量实例数上限(MaxInstances)为5。如果单个实例并发度(InstanceConcurrency)为2,那么这5个函数实例每秒能处理100个(1/0.1× 2 × 5)这样的请求,即TPS为100。

更多信息

关于如何创建函数级按量实例数,请参见弹性管理(含预留模式)