1. 背景
• 场景1:某视频公司,春晚或每周五热门节目来临时,如临大敌,需要按负载自动弹性伸缩。
• 场景2:某视频直播公司,无法预估业务负载情况,需要根据CPU利用率、Load、带宽利用率,自动弹性伸缩。
• 场景3:某游戏公司,每天中午12点,每天晚上6点-9点,需要定时扩容。
基于以上问题,在不使用弹性伸缩时,一般会有两种解决方式:
1) 超配资源:根据业务需求最高点峰值配置资源,这种方式解决了资源不够的情况,但也造成了资源的浪费。
2) 人工伸缩:以人工操作增减资源,但由于人工操作有滞后的情况,在某些时间点业务负载高于资源配置,会造成系统不稳定。
因此,需要一种系统自动伸缩的方式来配置资源,满足业务需求的变化。
2. AutoScaling(AS)介绍
1) 什么是弹性伸缩AS(AutoScaling)
弹性伸缩(AutoScaling,简称AS)是一种服务,可以自动调整弹性计算资源(ECS),以满足业务需求的变化。
应用场景:弹性扩张、弹性收缩、弹性自愈(即健康检查)。
弹性扩张 弹性自愈
2) 工作原理
弹性伸缩工作原理
弹性伸缩本质上是一组ECS实例集合,它可以根据用户指定的扩缩容策略(比如基于某些监控指标),在业务非高峰时,自动完成实例的创建;在业务低谷时,自动释放多余实例,最终实现业务的高可用。
工作原理解析
如果某Web应用使用ECS实例处理业务请求,系统架构分为三层(如上图右侧虚线框)。其中,最上层的负载均衡,负责将客户端的请求转发给伸缩组内的ECS实例;中间层的伸缩组内的ECS实例,负责处理客户端请求;最下层的RDS数据库,负责存储来自ECS实例的业务数据。
通过弹性伸缩调整中间层ECS实例数量,从而自动调整业务请求能力,具体流程如下:
a) 弹性伸缩在符合各种任务模式下自动伸缩触发任务:
• 定时任务:创建定时任务,在指定时间执行指定伸缩规则。
• 自定义任务:手动进行弹性伸缩,包括手动执行伸缩规则,或者手动添加、移出或者删除已有的ECS实例。
• 健康检查任务:如果在伸缩组开启健康检查功能,伸缩组会定期检查ECS实例的运行状态,如果发现一台ECS实例未处于运行中状态,则判定该ECS实例为不健康实例并移出。
• 云监控任务:基于云监控性能指标(例如CPU使用率)创建报警任务,比如例如伸缩组内所有ECS实例的CPU平均值大于80%时触发报警。
b) 通过ExecuteScalingRule接口触发伸缩规则。
c) 创建伸缩活动:根据需要增加的ECS实例数量、实例配置信息、需要配置的负载均衡实例和RDS实例创建伸缩活动。
d) 在伸缩活动中,自动创建实例并配置负载均衡和RDS。
e) 启动伸缩组的冷却功能,待冷却时间完成后,该伸缩组才能接收新的执行伸缩规则请求。
注意
冷却时间只适用于云监控的动态模式,其他模式不受影响。
3) AutoScaling的组成
• 伸缩组:具有相同应用场景的ECS的集合。定义组内ECS实例数的最大值、最小值及其相关联的SLB和RDS。
• 伸缩配置:用于弹性伸缩的ECS的配置。
• 伸缩规则:具体的扩展或收缩操作,例如加入或移出N个ECS实例。
• 触发任务:定时任务,报警任务。
• 伸缩活动:伸缩规则成功触发后,就会产生一条伸缩活动。
3. AutoScaling配置流程
1) 创建伸缩组
2) 创建伸缩配置
3) 启用伸缩组
4) 创建伸缩规则
5) 创建定时任务
6) 创建报警任务
4. 最佳实践:多种伸缩模式结合
各种伸缩模式无排他性,可以组合使用。
5. 应用场景
场景1:高弹性web应用服务
• 业务类型
如果弹性Web应用服务存在明显的峰谷变化(比如视频应用每天晚上9点到12点之间访问量会突增),无需提前准备大量云服务器,只需通过配置弹性伸缩组及合适的伸缩策略,系统能根据设置的伸缩策略自动地调整(增加或减少)云服务器资源的数量,在确保Web应用稳定提供服务的同时,大大降低系统稳定行的成本。
场景2:高可用计算集群部署
• 业务类型
如果使用云服务器作为分布式大数据的计算节点,或服务检索服务器的后端计算集群,该计算集群需要具备高可用性,且能随着负载的变化动态调整的能力。只需通过配置弹性伸缩的动态伸缩模式,系统会根据指定指标(比如CPU使用率)的阈值自动地增加或减少云服务器的数量;同时,系统还会自动检测云服务器的健康状态,将不健康的实例移除,并启用新实例,确保该集群的高可用性。