预置并发
并发概述
并发是云函数在某个时刻同时处理的请求数。在业务其他服务可以支撑的情况下,您可以通过简单的配置实现云函数从几个并发到数以万计并发的拓展。
并发运行原理
在调用函数时,云函数会分配一个并发实例处理请求或事件。函数代码运行完毕返回后,该实例会处理其他请求。如果在请求到来时,所有实例都在运行中,云函数则会分配一个新的并发实例。
云函数遵循一个并发实例同一时刻仅处理一个事件的运行逻辑,保障每个事件的处理效率和稳定性。
并发的计算
云函数的并发指的是函数代码同时处理请求或调用的数量,您可以通过以下公式估算:
并发数 = 请求速率 × 函数运行时间 = 每秒请求次数 × 每个请求的平均耗时
您可以在监控信息中的“运行时间”看到每个请求的平均耗时。 例如:某业务 QPS 为2000,每个请求的平均耗时为0.02s,则每个时刻的并发数为 2000qps × 0.02s = 40
并发实例复用与回收
当并发实例处理完事件请求后,不会立刻被回收,而是会保留一段时间以便复用。在保留期内,如有新的请求事件需要处理,将会优先使用保留中的并发实例,从而实现事件的快速处理,无需新启动并发实例。
- 保留期过后,如果没有请求需要该实例处理,云函数平台则会回收该实例。对于低并发的场景,不再设置保留期,平台将启动智能回收机制进行回收。
- 并发保留的时间由云函数平台根据情况动态调整,故函数业务代码中不能假设某个特定保留时间进行程序编写。
并发扩容
如果请求到来时,没有该版本的并发实例可以处理该请求,云函数平台会启动新的并发实例来处理。新启动的并发实例在初始化的过程后,便可以处理事件,我们称之为由弹性并发带来的扩容。
在地域维度,每个账号的弹性并发的扩容速度默认限制为500个/分钟,即在1分钟内,最多可以启动500个新的并发实例。如在1分钟内已经达到了当前限制,则将无法再启动新的并发实例,持续到下1分钟。在此期间有新的并发扩容请求,将会产生扩容受限错误(429 ResourceLimit)。
例如,广州地域的账号默认并发额度可以支撑128MB函数的1000个并发实例。有大量请求到来时,第一分钟可以从0个并发实例启动到500个并发实例。如果还有请求需要处理,第二分钟可以从500个并发实例启动到1000个并发实例,直至并发实例可以满足请求的需要或达到并发上限。
500个/分钟的弹性并发扩容速度可以满足多数业务场景。如果您的业务遇到该扩容速度的限制,您可以选择使用预置并发进行预热或购买 预留资源套餐 以提高弹性并发扩容速度限制。
预置并发
云函数平台弹性并发扩容的并发实例需要经历初始化的过程:包括运行环境初始化及业务代码初始化等过程。您可以使用预置并发功能,预先配置并发实例。云函数平台将在您配置后开始启动并发实例,同时不会主动回收预置并发的实例,尽可能地保障有相应数量的并发实例。如遇到并发实例因代码内存泄漏等错误,云函数平台会将其替换为新的实例。
并发服务承诺
扩容并发限制
限制类型 | 个人用户 | 企业用户 |
---|---|---|
弹性扩容并发限制 | 500并发/分钟 | 1000并发/分钟 |
预置扩容并发限制 | 100并发/分钟 | 100并发/分钟 |
在地域维度,个人用户弹性并发的扩容速度默认限制为500并发/分钟,企业用户为1000并发/分钟。例如客户有10w并发的诉求,按照最大弹性并发的扩容速度,需要10w/ 1000 =100分钟就能完成扩容操作,需要提升配额可以购买 预留资源套餐。
并发额度配额:单个环境下最大为256,000MB。
预置并发
预置并发支持并发实例按配置预先启动,同时云函数平台不会主动回收这些实例,会尽可能地保障有相应数量的可以处理请求的并发实例。您可通过此功能,为函数的指定版本设定预置并发额度。通过配置预置并发,可预先进行计算资源的准备,降低冷启动、运行环境初始化及业务代码初始化引起的耗时。
预置并发是在版本维度上解决请求到来时遇到并发实例初始化的问题。当您为一个函数版本配置预置并发之后,将会有以下效果:
- 云函数平台立刻开始启动并发实例,直至达到配置值。
- 云函数平台不会主动回收预置并发实例,同时会尽可能地保障预置并发实例数。
- 预置并发与弹性调用的并发实例启动速度是分开的,预置并发的启动不会占用地域维度500个/分钟的弹性扩容速度。云函数平台会根据您业务的情况调整预置并发的启动速度,默认为100个/分钟。
- 云函数平台不会主动回收预置并发实例,但并发实例可能由于进程退出、内存超限等问题不可用。一旦有不可用的实例,云函数平台会回收同时准备新的并发实例以达到预置并发实例的配置。期间可能出现短暂的实际并发实例数小于预置并发实例的情况,未启动的并发实例不会纳入计费范围。您可以在函数的监控信息“并发执行个数和预置并发”图中查看预置并发启动情况。
- 预置并发只能配置在已发布的版本上,无法配置在 $LATEST 版本上。$LATEST 版本处于可编辑态,而预置并发需要在请求到来前启动并发实例。为了保障业务的稳定,避免因代码和配置编辑带来的版本不一致问题,预置并发只能配置在已发布的版本上。已发布版本的代码和配置无法修改,适合生产环境使用。
操作步骤
新增预置并发
针对函数已发布的版本,可以设定期望数量的预置并发数。
- 登录云开发控制台,选择左侧导航栏中的”云函数“。
- 在“函数服务”列表页面,单击需进行配置函数名操作下的预置管理,进入”预置并发“页面。如下图所示:
- 在云函数详情页单击预置并发。如下图所示:
- 在弹出的“新增预置并发”窗口中,选择期望版本,单击下一步。如下图所示:
- 完成版本选择后进行预置实例,设置预置并发数后单击确认即可。如下图所示:
设置完成后,您可在“预置并发”中查看配置的状态。云函数后台将花费一定的时间完成预置并发的扩容,并将已启动准备的并发数、完成情况展示在列表中。
通过 灰度发布,逐步将流量从旧版本切到新版本。如遇到问题,则流量切回旧版本。
更新预置并发
当后台完成预置并发的扩容时,您可按需修改并发数。
- 登录云开发控制台,选择左侧导航栏中的”云函数“。
- 在“函数服务”列表页面,单击需进行配置函数名操作下的预置管理,进入”预置并发“页面。如下图所示:
- 在“预置并发”页面中,选择需更新版本所在行右侧的设置。如下图所示:
- 在弹出的“设置预置并发”窗口中,更新设置值并单击确定即可。
设置完成后,平台将根据您的修改情况,在一定时间内再次完成并发数的增加或减少。
删除预置并发
流量完全切至新版本,观察一段时间无异样后,删除旧版本的预置并发或当您不再计划使用某个预置并发配置时,可进行删除操作。
- 登录云开发控制台,选择左侧导航栏中的”云函数“。
- 在“函数服务”列表页面,单击需进行配置函数名操作下的预置管理,进入”预置并发“页面。如下图所示:
- 在“预置并发”页面中,选择需调整版本所在行右侧的删除。如下图所示:
- 在弹出的“删除函数预置并发配额”窗口中单击确认即可。如下图所示:
配置删除后,平台将逐步回收并发实例。
最佳实践
并发是云函数在某个时刻同时处理的请求数。在业务其他服务可以支撑的情况下,您可以通过简单的配置实现云函数从几个并发到数以万计并发的拓展。
应用场景
高 QPS 短运行时长
使用云函数进行简单的数据、文件处理,例如云存储触发云函数进行信息上报、对文件处理等。此类场景下单次请求运行时间较短。
实践建议
一个账号下有多个业务同时使用云函数进行支撑时,云函数的并发配额则需要进行按需调度。例如,根据客户端业务的特点进行分析配置:客户端业务,会随着用户流量存在波峰波谷,为了保障用户体验,要求加载速度快,可以有一定的错误容忍度。 针对上述业务,可以为函数配置一定量的预置额度。如按最大使用量的60%来设置,但同时不配置函数的最大独占配额,确保在高峰到来时能充分利用总配额。云函数额度变化如下图所示: