2***@qq.com
2***@qq.com
  • 发布:2021-11-23 15:08
  • 更新:2021-11-24 11:08
  • 阅读:810

我对于云函数冷启动和高并发的理解,是否正确

分类:uniCloud

云函数是否开始存在于一台服务器(假设一台机器能同时处理的用户需求为100)上,当开始只有100个用户的时候,都是在这台机器上启动多线程,每个用户请求使用独立的线程,在这台机器除了第一个人是冷启动,后面的2~100号用户都是热启动。当用户达到150人的时候,复制云函数到另一台服务器,那么101号用户属于冷启动,102~150号属于热启动。所以说定时触发,只是解决了一台机器的冷启动(复制云函数到该机器),当高并发的时候,每100人就会存在一人是属于冷启动。不知道我的想法是否正确,对于云函数的启动原理和高并发实现原理不是很了解。

2021-11-23 15:08 负责人:无 分享
已邀请:
DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

稍微有点不对,默认一个云函数实例同一时间只能处理一个请求,阿里云可以开启单实例多并发增加同时处理请求的数量。如果这个实例处理完第一个请求之后被复用就不存在冷启动。如果同时来两个请求,那么会启动两个实例,这两个实例分别冷启动一次

  • 2***@qq.com (作者)

    大佬帮我分析一下下面的情况,不知道对不对

    2021-11-23 21:23

2***@qq.com

2***@qq.com (作者)

假如冷启动为1s,热启动为0.1s,数据处理0.3s

第一阶段先同时来了5个相同请求,过了1分钟之后,第二阶段又同时来了10个相同请求,又过了一分钟,来了10个请求。过了1小时都不使用,全部实例销毁,第四阶段先同时来了15个相同请求,过了1分钟之后,第五阶段又同时来了5个相同请求

所用耗时:
云函数设置并发度为 1:

先开始启动5个实例,5个实例并发进行处理
第一阶段耗时(5个实例):
1 0.3=1.3s

第二阶段耗时:
10个请求,需要10个实例,之前5个实例为热启动了,剩余5个为冷启动
0.1 0.3=0.4s(5个第一阶段留下的热启动的实例)
1 0.3=1.3s(10个第二阶段冷启动的实例)
max(0.4s,1.3s)=1.3s

第三阶段耗时
15个请求,需要15个实例,之前5个实例为热启动了,剩余10个为冷启动
0.1 0.3=0.4s(5个第一阶段留下的热启动的实例)
1 0.3=1.3s(10个第二阶段冷启动的实例)
max(0.4s,1.3s)=1.3s

第四阶段耗时(15个实例):
开始启动15个实例,15个实例并发进行处理
1 0.3=1.3s

第五阶段耗时
5个请求,需要5个实例,之前15个实例为热启动了,选择其中5个即可
0.1 0.3=0.4s(5个第一阶段留下的热启动的实例)

云函数设置并发度为10:

先开始第一阶段1个实例即可处理5并发,第二阶段需要2个实例处理15并发)
第一阶段耗时(1个冷启动的实例)
1 0.3=1.3s

第二阶段耗时
0.1 0.3=0.4s(1个第一阶段留下的热启动的实例)

第三阶段耗时
0.1 0.3=0.4s(1个第一阶段留下的热启动的实例)
1 0.3=1.3s(1个第二阶段冷启动的实例)
max(0.4s,1.3s)=1.3s

第四阶段耗时(2个冷启动的实例)
1 0.3=1.3s

第五阶段耗时
0.1 0.3=0.4s(1个第一阶段留下的热启动的实例)

由第一阶段看出,是否开启单实例多并发,开始阶段都需要同样的时间消耗。
由第二阶段看出,开启单实例多并发,有容纳请求的空间,可以不再启动新实例,减少冷启动
由第三阶段看出,当都存在热启动和冷启动的实例时,两者耗时一样,但因为多并发有容纳请求的空间,需要等待冷启动的用户量相对少些
由第四阶段看出,只要没有热启动,开始阶段都需要同样的时间消耗
由第五阶段看出,只要前面的热启动多,后面所用时间都是一样的

总的来说,如果流量是逐步上升的,开启多并发体验会更好点,有容纳空间,
如果是突然暴升的,卡点才会发生请求抢红包的,所耗费时间差不多,如果是在比较小的时间段都可以抢购的,使用多并发更好。

请问我的分析正确吗

  • DCloud_uniCloud_WYQ

    上面说的对的,结论的话需要验证一下,单实例多并发在一些情况下是负优化

    2021-11-24 11:07

2***@qq.com

2***@qq.com (作者)

还有就是,文档说设置过大的单实例多并发可能会导致实例底层网络请求排队从而导致请求超时,请问所有的实例但是在同一台机器运行吗,如果这样的话,无论是否设置多并发,到达机器的请求都是一样需要排队,单并发一样会导致超时。这句话的意思是指排队是属于该实例的网络排队吗?

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

一般情况下不要设置单实例多并发。数据库请求也是网络请求,单实例多并发时也会排队发送请求(只是发送请求时排队,等待请求是同时等待的)。单实例多并发更适合请求第三方服务,网络请求耗时长云函数闲置时间长的场景

该问题目前已经被锁定, 无法添加新回复