设置函数的最小实例数≥1后,可以根据业务情况,并结合实例扩容限制速度配置最小实例数的弹性策略:指定时间段或指定指标利用率达到设定阈值后对最小实例数进行扩缩容,保障性能的同时提高实例利用率。
实例伸缩行为
设置函数的最小实例数≥1后,系统在处理请求时,优先分配请求至基于最小实例数启动的弹性实例,实例不能满足当前负载,系统自动扩容弹性实例作为补充。
随着调用请求量的增加,函数计算会持续创建新的实例,直到有足够的实例处理请求或者达到设置的实例数上限。在实例扩容的过程中,将受到扩容速度限制,具体请参见各地域实例扩容速度限制。
随着函数调用请求增加,设置最小实例数≥1和最小实例数=0两种场景下,实例伸缩行为如下。
最小实例数=0
当实例总数或者实例扩容速度超过限制后,函数计算将返回流控错误(HTTP Status
为429
)。下图展示在一个调用量快速增长的场景下,函数计算的流控行为。
图示中①:在达到突增实例数前,函数计算立即创建实例,这个过程中有冷启动,但没有流控错误。
图示中②:达到突增实例数后,实例数的增长受速度限制,部分请求会收到流控错误。
图示中③:实例数超过配额限制后,部分请求收到流控错误。
最小实例数≥1
当突发的调用量较大时,大量的实例创建会受到流控限制导致请求失败,实例的冷启动也会增加请求延时。为避免这些问题,可以设置最小实例数≥1,提前锁定资源。
与最小实例数=0场景相同的负载的情况下,设置最小实例数≥1后的流控行为如下。
图示中①:在最小实例数被用满之前,请求立即被执行,这个过程既没有冷启动,也没有流控错误。
图示中②:在最小实例数被用满后,弹性实例达到突增实例数之前,函数计算立即创建实例,这个过程中有冷启动,但没有流控错误。
各地域实例扩容速度限制
地域 | 突增实例数 | 实例增长速度 |
华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华南1(深圳) | 300 | 300/分钟 |
其他 | 100 | 100/分钟 |
如果对扩容速度有更高的需求,请加入钉钉用户群(钉钉群号64970014484)申请。
最小实例数弹性策略
设置固定的最小实例数可能会导致资源利用不充分的问题,可以为其配置动态弹性策略,在满足条件时自动对最小实例数进行扩缩容,提高实例利用率。
配置的弹性策略生效期间,初始配置的最小实例数不生效。某段时间内,如果无有效的弹性策略,则当前最小实例数等于初始配置的最小实例数。
如果配置了多条弹性策略,系统会计算每条策略触发时的最小实例数,并取当前时间有效的弹性策略中最小实例数的最大值作为当前最小实例数。
更多信息,请参见如何计算当前最小实例数?。
定时伸缩
适用场景
函数有明显的周期性规律或可预知的流量高峰。当函数调用并发数大于最小实例数并发时,超出的部分系统自动扩容弹性实例。
配置示例
配置两个定时操作:在函数调用流量到来前,通过第一个定时配置扩容最小实例数;当流量减小后,通过第二个定时配置缩容最小实例数。具体如下图所示。
在使用PutProvisionConfig API配置定时伸缩的请求参数时可参考以下信息。为函数function_1配置定时伸缩策略,指定时区为Asia/Shanghai,即北京时间,配置的生效区间为2024-08-01 10:00:00至2024-08-30 10:00:00(北京时间),在每天20:00(北京时间)将最小实例数扩容至50,在每天22:00(北京时间)再将最小实例数收缩至10。
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 50,
"scheduleExpression": "cron(0 0 20 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
Cron表达式说明
水位伸缩
适用场景
函数计算系统周期性采集实例并发利用率、内存利用率或GPU实例的资源利用率指标,使用指标并结合配置的最小实例数范围来控制最小实例数的伸缩,使其更好的贴合资源的真实使用量。
配置示例
以采集实例并发利用率指标为例,当流量不断增加时,触发扩容阈值,最小实例数开始扩容,当达到设置的最小实例数范围的上限时停止扩容,超出部分的请求分配至按量弹性实例;当流量不断减小时,触发缩容阈值,最小实例数开始缩容。具体如下图所示。
配置最小实例数的水位伸缩策略时,必须开启实例级别指标功能,否则会报错
400 InstanceMetricsRequired
。关于开启实例级别指标的方法,请参见配置实例级别指标。实例并发利用率只统计最小实例数范围内弹性实例的并发情况,不包含按量弹性实例的数据。
实例并发利用率为当前最小实例数并发请求量与最小实例数范围内最大可支持的并发请求量的比值,数值范围为[0,1]。
在使用 PutProvisionConfig API配置水位伸缩的请求参数可参考以下信息。为function_1函数配置水位伸缩策略,指定的时区为Asia/Shanghai,即北京时间,配置的生效区间为2024-08-01 10:00:00至2024-08-30 10:00:00(北京时间),追踪实例并发利用率指标ProvisionedConcurrencyUtilization,实例并发利用率追踪值为60%,超过60%时开始扩容,扩容上限为100;低于60%时开始缩容,缩容下限为10。
"targetTrackingPolicies": [
{
"name": "action_1",
"startTime": "2024-08-01T10:00:00",
"endTime": "2024-08-30T10:00:00",
"metricType": "ProvisionedConcurrencyUtilization",
"metricTarget": 0.6,
"minCapacity": 10,
"maxCapacity": 100,
"timeZone": "Asia/Shanghai"
}
]
扩缩容计算原理
缩容时会通过缩容系数来实现相对保守的缩容过程,缩容系数取值范围为(0,1]。缩容系数为系统参数,用于减缓缩容速度,防止缩容过快,无需手动设置。扩缩容目标值对计算结果向上取整得到最终结果,计算逻辑如下。
扩容目标值=当前最小实例数×(当前指标值/设置的利用率阈值)
缩容目标值=当前最小实例数×缩容系数×(1-当前指标值/设置的利用率阈值)
例如,当前指标值为80%,设置的实例并发利用率为40%,当前最小实例数为100,经过计算100×(80%/40%)=200。根据计算结果,最小实例数会扩容到200(不能超出设置的函数配额),以保证扩容后利用率阈值维持在40%附近。
如何计算当前最小实例数?
通过以下示例,您将明确当前最小实例数的计算逻辑,即由初始配置的最小实例数与定时伸缩策略中设定的目标最小实例数共同决定。
假设,初始设置的最小实例数为5,并配置了两条定时伸缩策略,指定时区为Asia/Shanghai,即北京时间,配置的生效区间为2025-06-09 10:00:00至2025-06-11 00:00:00(北京时间),在生效区间内,每天10:00(北京时间)将最小实例数扩容至20,每天22:00(北京时间)将最小实例数收缩至10。策略内容如下:
{
"defaultTarget": 5,
"scheduledActions": [
{
"name": "scale_up_action",
"startTime": "2025-06-09T10:00:00",
"endTime": "2025-06-11T00:00:00",
"target": 20,
"scheduleExpression": "cron(0 0 10 * * *)",
"timeZone": "Asia/Shanghai"
},
{
"name": "scale_down_action",
"startTime": "2025-06-09T10:00:00",
"endTime": "2025-06-11T00:00:00",
"target": 10,
"scheduleExpression": "cron(0 0 22 * * *)",
"timeZone": "Asia/Shanghai"
}
]
}
在不同时间段,当前最小实例数的取值如下图所示:
最大可响应并发值
不同的实例并发数,函数实例可响应的最大并发值计算逻辑如下:
单实例单并发
最大可响应并发值=函数实例数量
单实例多并发
最大可响应并发值=函数实例数量×单实例并发度
关于实例并发度的应用场景、优势、配置及影响,请参见设置实例并发度。
相关文档
如果需要限制某个函数的实例上限,请参见配置函数配额。配置后,当此函数处于执行状态的函数实例总数超过限制后,函数计算将返回流控错误。