之前压测过2万用户在30秒内每个用户每秒5次请求,OPS大概在3千左右,但是弹性伸缩虽然在扩容预期值的时候很给力,也能将新加的服务器添加到负载均衡中,但是当cpu使用率超过80%的时候,我其实是有配置报警任务的,当超过这个阀值时,让它添加一台服务器,可惜没生效。
具体场景可以查看前面的文章:
jemeter压测【2万用户每秒5次请求在30秒内处理完请求】
【红包雨功能的】环境部署(弹性伸缩、负载均衡、Redis读写分离、云服务器部署)
给出解答:
报警任务在触发伸缩规则时受伸缩规则冷却时间影响,伸缩规则在冷却时间内时,会拒绝执行伸缩规则。伸缩组内新增加的ECS实例或ECI实例从加入伸缩组到完成系统启动配置,部署您的业务,获取到监控数据需要一定的时间(通常需要几分钟)。报警任务会受冷却时间的影响,即便你配置的冷却时间很短,但启动新的服务器到部署你的业务仍然需要花费几分钟的时间,这个时间是无法避免的。
举个例子:2万用户在30秒内每个用户每秒5次请求,报警任务超过80%添加一台服务器,冷却时间是10秒,10后如果cpu使用率还是超过80%,继续添加1台服务器,以此类推。由于压测时间只有30秒,ECS实例开机都是分钟级,从开启一台新服务器到后面部署业务运行需要几分钟,所以伸缩无法扩容。而且如果后期压测时间缩短到10秒内,那么就更加无法弹性扩容了。
如果说现在只是想测弹性伸缩且不要求秒级扩容,也可以不用那么麻烦,先按照目标追踪规则来配置,直接弹ECS也是可行的,通常而言,并发也是慢慢的上去的,很少会突然爆。只不过考虑到红包雨这种业务场景,像过年的那种春节红包,10秒以内用户疯狂点击,还是需要做到秒级扩容的。
解决方案有3种:
一种是直接预估峰值,配置多台ECS服务器,由于时间短,造成的资源浪费还算能承受。
一种是可以考虑用ECI,这个是专门针k8s设计的容器实例,需要本身业务是可以支持容器化的,非常适合弹性部分的业务 ,文档链接:https://help.aliyun.com/zh/eci/getting-started/use-elastic-container-instances?spm=a2c4g.750001.0.i1
一种是直接用阿里云的ack服务,就是master节点由阿里云托管,我那边只管理worker节点。稳态业务用ECS+ACK比较适合,这个两种方案:
- ACK+ECS,通过ACK在ECS上创建多个node节点,在node创建多个pod节点,
- ACK severless+ECI,直接创建ECI实例,在上面创建多个pod环境
文档链接:https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/product-overview/what-is-ack
如果文档看不懂,没关系,有视频可以看:
https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/getting-started/getting-started-with-ack-using-the-ack-console?spm=a2c4g.11186623.0.0.14b83c62EQBH7Z#a8474b9017txc
操作步骤:
默认即可
默认即可
根据提示给予授权
然后就会有短信提示