并发概述

最近更新时间:2024-09-05 17:39:51

我的收藏
并发是云函数在某个时刻同时处理的请求数。在业务其他服务可以支撑的情况下,您可以通过简单的配置实现云函数从几个并发到数以万计并发的拓展。

并发运行原理

在调用函数时,云函数会分配一个并发实例处理请求或事件。函数代码运行完毕返回后,该实例会处理其他请求。如果在请求到来时,所有实例都在运行中,云函数则会分配一个新的并发实例。
云函数遵循一个并发实例同一时刻仅处理一个事件的运行逻辑,保障每个事件的处理效率和稳定性。

异步调用的并发处理

异步事件会先进入云函数平台的队列,并按照先进先出的原则依次处理异步请求。异步请求会根据队列长度、当前函数并发数等情况,选择合适的并发处理方式,拉起足够处理事件的并发实例依次处理事件。
若异步调用失败,云函数平台将遵循一定的规则重试,详情可参见 异步调用重试策略

同步调用的并发处理

同步事件到达云函数平台后,平台将会检测是否有空闲并发实例。如有,则事件将会立刻发送给空闲并发实例进行处理。如没有,则平台将会启动新的并发实例来处理事件。
若同步调用失败,您需要自行重试。

并发的计算

云函数的并发指的是函数代码同时处理请求或调用的数量,您可以通过以下公式估算:
并发数 = 请求速率 × 函数运行时间 = 每秒请求次数 × 每个请求的平均耗时
您可以在监控信息中的“运行时间”看到每个请求的平均耗时。 例如:某业务 QPS 为2000,每个请求的平均耗时为0.02s,则每个时刻的并发数为 2000qps × 0.02s = 40

并发实例复用与回收

当并发实例处理完事件请求后,不会立刻被回收,而是会保留一段时间以便复用。在保留期内,如有新的请求事件需要处理,将会优先使用保留中的并发实例,从而实现事件的快速处理,无需新启动并发实例。
保留期过后,如果没有请求需要该实例处理,云函数平台则会回收该实例。对于低并发的场景,不再设置保留期,平台将启动智能回收机制进行回收。
并发保留的时间由云函数平台根据情况动态调整,故函数业务代码中不能假设某个特定保留时间进行程序编写。

并发扩容

如果请求到来时,没有该版本的并发实例可以处理该请求,云函数平台会启动新的并发实例来处理。新启动的并发实例在初始化的过程后,便可以处理事件,我们称之为由弹性并发带来的扩容,而弹性并发的扩容速度上限即函数 burst
在地域维度,每个账号的弹性并发的扩容速度上限(函数 burst)默认限制为500个/分钟,即该地域下所有函数在1分钟内累计最多可以启动500个新的并发实例。如在1分钟内已经达到了当前限制,则将无法再启动新的并发实例,持续到下1分钟。在此期间有新的并发扩容请求,将会产生扩容受限错误(429 ResourceLimit),详情可参见 云函数状态码
例如,广州地域的账号默认并发额度可以支撑128MB函数的1000个并发实例。有大量请求到来时,第一分钟可以从0个并发实例启动到500个并发实例。如果还有请求需要处理,第二分钟可以从500个并发实例启动到1000个并发实例,直至并发实例可以满足请求的需要或达到并发上限。
目前500个/分钟的函数 burst 可以满足多数业务场景。如果您的业务遇到该扩容速度的限制或者需要增加命名空间级函数 burst的管理能力,您可以选择使用预置并发进行预热或购买 函数套餐包 提高函数 burst 限制。

预置并发

云函数平台弹性并发扩容的并发实例需要经历初始化的过程:包括运行环境初始化及业务代码初始化等过程。 您可以使用预置并发功能,预先配置并发实例。云函数平台将在您配置后开始启动并发实例,同时不会主动回收预置并发的实例,尽可能地保障有相应数量的并发实例。如遇到并发实例因代码内存泄漏等错误,云函数平台会将其替换为新的实例。详情可参见 预置并发

并发服务承诺

并发扩容限制

并发扩容限制
默认限制
额外可申请
弹性扩容并发速度限制(函数 burst)
500并发/分钟
支持万级并发扩容速度,可通过购买函数套餐包提升配额。
预置扩容并发速度限制(预置 burst)
100并发/分钟
根据业务情况自动调整预置并发的启动速度。
在地域维度,用户弹性并发的扩容速度默认限制为500并发/分钟。例如客户有5w并发的诉求,需要5w/ 500 =100分钟就能完成扩容操作,如需提升函数 burst 可直接购买 函数套餐包。云函数平台会根据您业务的情况调整预置并发的启动速度,预置扩容并发速度平均为100并发/分钟。

函数并发配额

云函数平台默认提供函数粒度的并发管理能力供您灵活控制不同函数的并发情况。每个账号在地域维度有总并发额度的限制,不同地域配置的函数并发配额并不相同,详情见表格。如果您需要提升各项配额或者增加命名空间维度的并发配额管理可直接购买 函数套餐包
函数并发配额
地域
默认配额
额外可申请
广州、上海、北京、成都、中国香港
128,000MB
百万MB级并发配额,可通过购买函数套餐包提升配额。
孟买、新加坡、东京、硅谷、法兰克福、深圳金融、上海金融
64,000MB

并发管理

云函数平台提供函数粒度的并发管理能力,详情可参见 并发管理

并发内存与并发数

为了您更准确的进行并发管理,云函数的并发配额按照内存为单位计算。例如256MB的并发配额代表着1个256MB内存的并发实例,或者是2个128MB内存的并发实例。

最大独占配额

当您为一个函数设置最大独占配额,将会有以下两个效果:
最大独占配额是此函数的并发额度上限,所有版本的并发额度加和小于等于最大独占配额。
并发额度划给该函数后为函数独享,不再提供给其它函数。

并发监控

函数的并发在处理实际请求时,该并发会被标记为执行并发。从云函数的监控中,可以查询到函数、函数某个具体版本、别名的执行并发。由于执行并发的采集有一定的时间间隔,如函数的执行时间很短而并发较高,则当前监控可能会有一定偏差。

使用场景

通过综合使用最大独占配额、预置并发等能力,您可以灵活调配多个函数间的资源用量情况,并按需预热函数。

共享配额

在未进行各项配置的情况下,各函数默认共享使用账号额度。如果有某个函数产生了突增业务调用,可以充分利用空闲未使用的额度,来保证突增不会引起函数的调用并发超限。

并发保障

如果有某个函数的业务功能比较敏感或关键,需要尽力保障请求的成功率,此时可以使用最大独占配额。最大独占配额可以给到函数独享额度,确保并发的可靠性,不会由于多函数的争抢导致的调用并发超限。

预置并发

在函数对冷启动敏感、或代码初始化流程耗时较长、加载库较多的情况下,可以通过设置具体函数版本的预置并发,预先启动函数实例来保障运行。