点击围观!腾讯 TAPD 助力金融行业研发提效、敏捷转型最佳实践! 了解详情
写点什么

腾讯云 Serverless 云函数并发管理能力解读

  • 2021-04-07
  • 本文字数:2794 字

    阅读完需:约 9 分钟

腾讯云 Serverless 云函数并发管理能力解读

近期,腾讯云 Serverless 云函数发布了并发管理能力升级版,提供了 3 个维度的并发额度管理的功能。该功能究竟提供了哪些能力,有哪些使用场景?本文将为您全方位解读并发管理功能,并对多种使用场景提供配置建议。


背景介绍


原先,创建一个函数,默认具有 300 的并发数量上限。针对小的低频业务,300 的并发值足够使用。但是遇到业务量上涨、支撑大型运营活动等大并发的情况,开发者就需要通过提工单联系平台方,申请提升函数并发额度。这样可能导致:


  1. 每遇到一次大并发,就需要联系一次平台方来提升配额,时效性弱。

  2. 申请等待周期时会导致上涨的业务部分有损。

  3. 在评估量级时,也可能出现评估不足,导致需要再次申请,低效。


并发能力升级


相对于原有的函数默认固定的并发值,本次上线的并发管理能力,有以下方面的优化:


  1. 将单一函数的并发调整放开给了出来,用户可以自行来控制并发数。

  2. 并发额度由单一的函数维度,移到了账号维度。

  3. 账号下默认具有一定的并发额度,由账号下的函数所共享的,不需要单独为其中一个大并发的函数申请额度。


因此,在当前的模式下,默认账号具有的 128000 MB 的额度,可以供 128 MB 配置内存函数启动运行 1000 个并发;在这种情况下,用户无需去寻找平台申请,就可以获得比调整前更高的一个并发额度,用于支撑上涨的业务。



并发的处理


由于账号级别的额度是在账号下的多个函数间共享的,在多个函数同时运行的情况下,因为流量突增、业务上涨导致并发增高的函数在占用完全部空闲额度后,可能会和平稳运行的函数之间产生冲突。


这种情况下,有两种解决方案:


一方面可以通过平台申请提升更高的账号额度,来满足上涨业务带来的并发上涨;

另外一方面,也可以通过将部分额度分配给具体函数,来保障具体函数的运行可靠性。


下面我将具体说一下第二种方式。举个例子,在同样的账号下,函数 A 提供 H5 页面用于秒杀的运营活动,函数 B 在进行后台的流式数据处理。在 B 函数启动了 300 并发进行业务处理时,运营活动会受限于 A 函数,最大仅能跑到 700 并发;而函数 A 的业务压力下,如果 B 函数也有业务量上涨,将无配额可用导致无法启动更多实例。



在上面的例子中,如果要保证 B 函数数据处理流程的可靠性,可以为这个函数设置到 350 的保留并发配额;此时,这个额度将从账号维度划给这个函数单独使用,而运营活动所使用的 A 函数将仅仅可以最大使用的 650 并发的额度。函数 B 在设置到 350 的保留并发额度后,在业务持续上升后,最大也仅仅可以使用到配置的这个额度,此时,就算是账号维度的额度仍然有剩余时,B 函数也无法去使用。



通过保留额度的设置,一方面,我们可以对函数的运行进行保障,避免多个函数共享额度时,由于其他业务的函数占用导致本函数无法运行产生损失,另外一方面,保留配额也定义了函数的运行额度上限。

因此,针对函数的并发管理控制,可以基于业务来进行更精细的控制,有以下三点建议:


  1. 针对开发测试阶段的函数,由于请求量小,无业务压力,并发也极少,可以不配置保留额度而仅仅使用账号维度的共享额度;

  2. 针对稳定运行的函数,并发通常是确定的,浮动范围也不会很大,这个时候可以给这个函数设置稍微有一点余量的保留额度,来保障函数的额度不受共享的影响;

  3. 针对运营活动、有可能性突增并发的函数,可以利用账号维度的高额度,来充分利用和支撑业务爆发。



当前预置额度的设置,是设置在函数的版本上,也是从账号维度的并发配额或函数上的保留额度中扣减下来的。


通过设置预置额度可以预想启动所需量的并发实例,完成实例的初始化并等待事件的到来。针对函数的请求将不会有冷启动时间,直接就可以在已经完成准备、初始化完成的实例中得到运行。


在时延敏感的业务,例如前端的 SSR 页面响应;或者是初始化时间较长的业务,例如 AI 推理的模型加载过程;这些场景下,通过给函数设置上一定的预置可以保障业务更好的运行。


同时,预置的配额也不是实例并发的上限,在业务量上涨到超过已经预置的实例可以承载的时候,函数平台仍然会根据函数的保留配额或者是账号的配额,拉起更多的实例来支持业务运行。



并发使用场景设置建议


一个账号下有多个业务都在同时使用云函数进行支撑时,函数的并发配额就需要进行按需调度。根据不同的业务特性来进行合理合适的设置。


例如有波峰波谷的前端业务,有平稳运行波动不大的数据处理业务,有偶尔才运行一次的定时运维任务,也有并发不大但是计算量重、计算时间长的视频处理业务;


在这些业务中,根据重要性、是否接受一定损失来说,又有不同的区分:前端业务保障用户体验,要求加载速度快,但是可以有一定的错误容忍度;数据处理的要求高,不能接收延迟、波动或失败;定时运维任务偶尔运行,不用投入过多的关注,运行正常即可;而视频处理业务,可以接受按需调度,失败时能自动重试就行。


根据不同的业务特性、容错额度、业务波动情况、时延要求,我们就可以按照不同的情况来进行不同的设置。上述几项业务中,并发设置有以下几点建议:


  • 对前端业务来说,要求加载速度快,但是有波峰波谷,这种情况我们就可以为函数配置一定量的预置额度,例如按最大使用量的 60%来设置,但是同时不设置函数的保留额度,确保在高峰到来时能充分利用总配额;

  • 针对数据处理业务,波动不大但是容错低,我们可以为函数配置一定量的保留额度,确保不会有其他业务使用的共享额度导致数据处理业务的问题;

  • 运维任务定时运行,没有高要求,可以不做任何配置,使用账号维度的配额来处理就行;

  • 针对视频处理业务,计算量大,而且可以按需排队处理任务,我们设定好一定的保留额度,让业务跑满并发额度,充分利用好且控制好计算资源。





保留配额另一种用法


保留配额还有另外一种用法——对业务的限制或关停。在有紧急事项发生,例如漏洞攻击、循环调用失控等情况出现时,为了避免有重大损失,可以通过设置保留配额,将额度控制在极小的值上来避免运行失控,甚至可以设置为 0 来关闭函数的运行。



内存和并发额度的关系


当前额度按内存进行计算,配置内存大的函数,并发运行时占用的额度多,而配置内存小的函数在多并发运行时占用的额度小;


由于函数服务的资源用量计费项和函数的配置内存强相关,通过内存进行额度控制,一方面可以让我们尽量采用合适的内存来实现业务,另外一方面,针对整体的支出也可以进行有效的控制。



总结


通过提供多层次的并发配额管理能力,目前我们可以获得更强的函数并发管理控制的权限,无需再等待平台方的调整就可以自行根据业务需求快速调整。


目前并发管理功能已经上线,函数可以配置保留并发,同时预置并发功能也处于内测阶段,欢迎大家申请试用。针对并发管理的更多场景、用法,也欢迎大家留言探讨和反馈。


头图:Unsplash

作者:Alfred

原文:https://mp.weixin.qq.com/s/bCbADa7KFsg9PuztZrnURw

原文:腾讯云 Serverless 云函数并发管理能力解读

来源:TencentServerless - 微信公众号 [ID:ServerlessGo]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2021-04-07 09:331387

评论

发布
暂无评论
发现更多内容

好文推荐:RxHttp-完美适配Android-10-11-上传-下载-进度监听

android 程序员 移动开发

如何缩减接近 50% 的 Flutter 包体积,android开发计算器课程设计

android 程序员 移动开发

如果你在中小厂,这些你一定要搞懂,分享一些行业经验

android 程序员 移动开发

字节跳动+京东+360(1),Android工程师必备知识

android 程序员 移动开发

字节跳动+京东+360,字节跳动+京东+美团+腾讯面试总结

android 程序员 移动开发

如何实现一个 System Services?,超详细

android 程序员 移动开发

如何用10行代码让app全局置灰,扫地阿姨看完都学会了

android 程序员 移动开发

如何通俗理解设计模式及其思想_,Android自学资料

android 程序员 移动开发

头条Android 岗年薪45W+面经分享(技术 6面,Android开发者值得深入思考的几个问题

android 程序员 移动开发

如何在-Android-中完成一个-APT-项目的开发?,android文件下载实战

android 程序员 移动开发

如果你打算跳槽BAT这样的大厂,不妨看看这篇文章,android蓝牙串口收发

android 程序员 移动开发

字节码插桩--你也可以轻松掌握,2021年Android工作或许更难找

android 程序员 移动开发

如何看待:程序员(研究生学历,kotlin协程切换线程

android 程序员 移动开发

如何评价-Google-的-Fuchsia、Android、iOS-跨平台应用框架-Flutter

android 程序员 移动开发

字节一面:https-真的安全吗?可以抓包吗,分享一点面试小经验

android 程序员 移动开发

如何高效、快速学习Flutter?如何避坑(1),安卓消息分发机制

android 程序员 移动开发

如果你使用Jetpack中还没踩过这些坑,请务必收下这篇文章

android 程序员 移动开发

妈蛋!HR你搞我,我的缺点就是身体不好不能加班,安卓面试题及答案2020百度

android 程序员 移动开发

字节码插桩--你也可以轻松掌握(1),收割快手,字节,百度,美团的Offer之旅

程序员 移动开发

如何让你的app在后台被干掉后优雅的启动,flutter调用原生sdk

android 程序员 移动开发

如何让你的回调更具Kotlin风味,基于h5框架的移动app开发

android 程序员 移动开发

字节三面:ButterKnife为什么执行效率为什么比其他注入框架高?它的原理是什么(1)

android 程序员 移动开发

字节三面:ButterKnife为什么执行效率为什么比其他注入框架高?它的原理是什么

android 程序员 移动开发

如何高效、快速学习Flutter?如何避坑,膜拜大牛

android 程序员 移动开发

字节Android岗面试:Handler中有Loop死循环,为什么没有阻塞主线程

android 程序员 移动开发

好不容易撑过了腾讯三面!却因为虚报工资被刷了,挥泪整理面经

android 程序员 移动开发

如何在复杂业务场景中优雅实现Android指纹验证?,rust移动端跨平台开发

android 程序员 移动开发

如何有效地刷算法题?,武汉软通动力android面试

android 程序员 移动开发

如果你不是天才,那么你一定要看看这篇—,android开发书籍推荐

android 程序员 移动开发

如果你使用Jetpack中还没踩过这些坑,请务必收下这篇文章(1)

android 程序员 移动开发

字节跳动1面Too simple2面怀疑人生,宅家修炼“65天,flutter开源项目集合

android 程序员 移动开发

腾讯云 Serverless 云函数并发管理能力解读_文化 & 方法_TencentServerless_InfoQ精选文章