tencent cloud

文档反馈

函数并发管理实践

最后更新时间:2023-05-04 18:16:56

    操作场景

    腾讯云 Serverless 云函数已上线并发管理能力升级版,该升级版提供3个维度的并发额度管理功能。通过该功能,可以获得更强的函数并发管理控制权限,无需再等待申请云函数配额即可自行根据业务需求快速调整。
    说明
    目前 函数并发 管理功能已上线,函数可以配置 最大独占配额。另外 预置并发 功能目前处于内测阶段,如需体验您可以提交工单申请开通此功能。
    未使用并发管理功能前,一个云函数默认具有300的并发数量上限。针对使用量较小的低频业务,300并发值已足够满足业务使用。但遇到业务量上涨、支撑大型运营活动等大并发场景,开发者则需提交工单申请提升函数并发额度,该解决方案存在以下3种情况:
    业务每遇到一次大并发,就需要联系腾讯云申请提升云函数配额,时效性弱。
    申请等待周期时会导致上涨的业务部分有损。
    在评估量级时,可能会因评估不足而未通过,导致需要再次申请,效率较低。
    本文将为您全方位介绍并发管理功能,并针对多种使用场景提供配置建议。

    功能介绍

    并发能力升级

    相对于原有的函数默认固定并发值,云函数新上线的并发管理能力,有以下方面优化:
    开放单一函数的并发调整,用户可自行控制并发数。
    并发额度由单一的函数维度转移到账号维度。
    账号默认具有一定的并发额度,由账号下的函数所共享,无需单独为其中一个大并发函数申请额度。
    通过并发管理能力,当前账号维度的并发配额为128000MB,即可支持1000个128MB配置的函数实例同时运行。用户无需再申请提升配额,即可获得比调整前更高的一个并发额度,用于支撑上涨的业务。云函数额度变化如下图所示:
    

    内存和并发额度的关系

    当前并发额度按内存进行计算,配置内存大的函数,并发运行时占用的额度多,而配置内存小的函数在多并发运行时占用的额度小。
    由于函数服务的资源用量计费项和函数的配置内存强相关,如需通过内存进行额度控制,建议您针对业务选择适合的函数内存,可针对整体支出进行有效控制。内存变化如下图所示:
    

    实践建议

    并发使用场景建议

    一个账号下有多个业务同时使用云函数进行支撑时,云函数的并发配额则需要进行按需调度。根据不同的业务特性来进行合理的设置。本文分别从不同的业务类型、特点及要求进行分析:
    业务类型
    业务特点
    业务要求
    前端业务
    存在波峰波谷
    保障用户体验,要求加载速度快,可以有一定的错误容忍度
    数据处理业务
    平稳运行波动不大
    不能接收延迟、波动或失败
    运维任务
    定时任务,偶尔运行一次
    无需投入过多关注,运行正常即可
    视频处理业务
    并发量不大但计算量复杂、计算时间长
    接受按需调度,失败时能自动运行即可
    根据不同的业务特性、容错额度、业务波动情况、时延要求,即可按照不同的场景进行不同的配置。上述几项业务中,并发配置建议如下:
    前端业务
    数据处理业务
    运维任务
    视频处理业务
    针对要求加载速度快、存在波峰波谷的前端业务,可以为函数配置一定量的预置额度。例如,按最大使用量的60%来设置,但同时不配置函数的最大独占配额,确保在高峰到来时能充分利用总配额。云函数额度变化如下图所示:
    
    针对波动不大但是容错低的数据处理业务,可以为函数配置一定量的最大独占配额,确保其他业务不会使用共享额度导致数据处理业务的问题。云函数额度变化如下图所示:
    
    针对要求不高、定时运行的运维任务,可以不做任何配置,使用账号维度的配额处理即可。
    针对计算量大且按需排队处理任务的视频处理业务,可以配置一定的预置额度,让业务跑满并发额度,充分利用和控制好计算资源。云函数额度变化如下图所示:
    

    最大独占配额处理

    账号级别的额度由账号下的多个函数之间共享,在多个函数同时运行的情况下,因为流量突增、业务上涨导致并发增高的函数在占用完全部空闲额度后,可能会与平稳运行的函数产生冲突。
    针对上述场景,有以下两种解决方案:
    解决方案1(推荐):最大独占配额配置,通过将部分额度分配给具体函数,来保障具体函数的运行可靠性。
    解决方案2:通过购买更高规格的 套餐包 来获得更高的并发额度,以满足业务量上涨带来的并发上涨。

    最大独占配额配置示例

    本文以解决方案1(最大独占配额配置)为例详细介绍如何使用最大独占配额:
    示例场景:在同个账号下,函数 A 提供 H5 页面用于秒杀的运营活动,函数 B 在进行后台的流式数据处理。在 B 函数启动300并发进行业务处理时,运营活动会受限于 A 函数,最多仅能运行700并发。而在此时函数 A 的业务压力下,如果 B 函数也面临业务量上涨,将无配额可用导致无法启动更多实例。云函数额度变化如下图所示:
    
    示例配置:在上述示例中,如需保证 B 函数数据处理流程的可靠性,可以为 B 函数设置到350的最大独占配额。此时,该额度将从账号维度划给 B 函数单独使用,而运营活动所使用的 A 函数将仅可以最大使用650并发的额度。函数 B 在设置到350的最大独占配额额度后,在业务持续上升后,最大也仅可使用到配置的额度,即使账号维度的额度仍然有剩余,B 函数也无法使用。云函数额度变化如下图所示:
    
    通过最大独占配额的配置:
    可以保障函数正常运行,避免多个函数共享额度时,由于其他业务的函数占用导致本函数无法运行产生损失。
    定义了函数的运行额度上限。
    最大独占配额配置建议:针对函数的并发管理控制,可以基于业务来进行更精细的控制,您可参考以下3点建议进行配置:
    针对开发测试阶段的函数,由于请求量小、无业务压力、并发极少,可以不配置最大独占配额而仅仅使用账号维度的共享额度。
    针对稳定运行的函数,通常可以确定并发量,浮动范围不会很大,可以为该函数配置有一点余量的最大独占配额,来保障函数的额度不受共享的影响。
    针对运营活动、有可能突增并发的函数,可以利用账号维度的高额度,来充分利用和支撑业务爆发。
    

    相关说明

    当前预置额度设置在函数的版本上,是从账号维度的并发配额或函数上的预置额度扣减而出。
    通过配置预置额度可以预设启动所需量的并发实例,完成实例的初始化并等待事件发生。针对函数的请求将不会有冷启动时间,可直接在已完成准备、初始化完成的实例中得到运行。
    针对时延敏感的业务(例如前端的 SSR 页面响应)、或是初始化时间较长的业务(例如 AI 推理的模型加载过程),通过为函数配置上一定的预置可以保障业务更好的运行。
    同时,预置的配额并非实例并发的上限,在业务量上涨到超过已经预置的实例可以承载的最大量时,云函数仍会根据函数的预置额度或者账号配额,拉起更多的实例来支持业务运行。云函数额度变化如下图所示:
    

    最大独占配额其他用法

    对业务的限制或关停同样可以通过最大独占配额来配置。在突发紧急事项时,例如漏洞攻击、循环调用失控等,为避免出现重大损失,可以通过配置最大独占配额,将额度控制在极小的值以避免运行失控,甚至可以配置为0关闭函数的运行,详情请参见 最大独占配额。配置如下图所示:
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持