在您的业务负载对资源需求降低时,伸缩组会根据您的策略触发缩容活动,自动减少伸缩组中的资源数量,从而避免资源浪费。本文将指导您更优雅地完成缩容操作。
缩容流程介绍
在弹性收缩活动发生时,伸缩组会根据您配置的策略,在伸缩组中筛选出合适的实例移出伸缩组,实例被移出后会按照您预先设置的回收模式回收。您可以在不同的伸缩流程中配置相应的操作,具体可配置的操作环节如图展示。
触发缩容活动
确保缩容后资源满足基础业务负载(控制缩容边界)
实现方式:为伸缩组设置组内最小实例数。
最小实例数是伸缩组内实例缩容的下界,当发生缩容活动时,若缩容后实例数小于最小实例数时,该缩容活动会被拒绝,以此防止您的伸缩组资源无法满足业务基础负载。
具体操作:请参见配置伸缩组。
根据负载的阶梯变化缩容(步进规则)
实现方式:为伸缩组设置步进规则。
您可以设置步进规则实现根据负载的阶梯变化缩容,以避免因快速减少大量实例而引起的系统压力或服务中断,实现优雅缩容。如您期望按照伸缩组集群的CPU平均占用率的阶梯变化来设计缩容方案,如:
在CPU平均占用率低于20%时缩容5个实例。
在CPU平均占用率低于30%时缩容3个实例。
在CPU平均占用率低于50%时缩容1个实例。
您可以为伸缩组设置如下步进规则。
具体操作:请参见配置伸缩规则。
设置冷却时间和报警任务触发频率以控制缩容速度和频率
您可以通过设置冷却时间和报警任务触发频率以防止缩容过快引起业务波动,从而实现优雅的触发缩容。
自定义触发缩容的时机
您可以根据您的需求,自定义触发缩容的时机,以实现优雅的触发缩容。实现方式如下。
选择被缩容的实例
伸缩组默认会按照您伸缩组配置的交换机的顺序进行缩容(优先级策略),您可以根据您的需求,调整缩容策略为其他方式,来选择被缩容的实例。
如果您不想让某个关键实例被缩容,您可以为该实例开启保护状态,防止该实例被意外缩容而影响正常业务。具体操作说明,请参见手动将实例转为或移出保护状态。
ECI伸缩组不支持配置扩缩容策略和实例移出策略,ECI伸缩组默认先筛选最早伸缩配置对应的实例,再从筛选结果中移出最早创建的实例。
方案一:缩容后实例在可用区分布均匀(均衡分布策略)
本方案侧重容灾,使用本方案,在缩容后可以保持实例在可用区之间分布均匀,以达到多可用区容灾的效果。
实现方式:设置扩缩容策略为均衡分布策略。
在配置该策略之后,伸缩组会优先从实例数最多的可用区筛选出可被缩容的实例来进行缩容操作,当存在多个实例时,会通过伸缩组的实例移出策略进一步选择被缩容的实例,包括移除最早/最新创建的实例、最早伸缩配置对应的实例。
具体操作:请参见场景二:扩缩容策略(均衡分布策略)+实例移出策略。
方案二:优先缩容单价最高的实例(成本优化策略)
此方案侧重成本控制,通过采用成本优化策略优先缩减成本效益最低(单价最高)的云实例,实现高效资源利用。
实现方式:设置扩缩容策略为成本优化策略。
在配置该策略之后,伸缩组会优先缩容vCPU单价最高的实例。伸缩组会优先筛选出vCPU单价最高的实例,当存在多个实例时,会通过伸缩组的实例移出策略进一步选择被缩容的实例,包括移除最早/最新创建的实例、最早伸缩配置的实例。
具体操作:请参见场景三:扩缩容策略(成本优化策略)+实例移出策略。
本方案也支持设置伸缩组中抢占式实例和按量实例的比例,以达到平衡成本的目的。
方案三:自定义伸缩组内容量分布策略(自定义组合策略)
您可以根据实际业务需求,组合方案一和方案二的策略。
实现方式:设置扩缩容策略为自定义组合策略。
使用该策略,您可以根据需要,调整按量实例和抢占式实例的比例、可用区间的容量均衡,也可以分别制定按需和抢占式实例的容量分布策略。
具体操作:请参见设置伸缩组的实例终止策略。
方案四:自定义缩容策略
如果伸缩组支持的缩容策略不满足您的需求,您可以参考本方案通过函数服务自定义您的缩容策略。
实现方式:设置实例移出策略为自定义策略。
通过在函数服务以编程的方式自定义您的缩容策略,每次触发缩容活动都会调用您配置好的函数,您可以在函数内自定义哪些实例可以缩容、哪些实例不能被缩容。
具体操作:请参见通过函数自定义ECS实例缩容策略。
优雅缩容
优雅缩容是指在实例被移出时,如果当前实例正在执行任务,暂停该实例的移出流程,等待任务执行完成后继续进行实例移出,避免引起服务中断。
实现方式:设置生命周期挂钩。
在触发缩容活动后移出实例时,您可以使用生命周期挂钩挂起实例,执行自定义操作,您还可以调用API延长生命周期挂钩的挂起时间等待实例完成未完成的任务。
具体操作:请参见生命周期挂钩概述、RecordLifecycleActionHeartbeat - 延长生命周期挂钩触发后ECS实例被挂起等待时间。
ECI伸缩组不支持生命周期挂钩,不支持本方案。
通过在伸缩组中直接移出、删除、停止实例达到类似缩容的效果时,不会触发生命周期挂钩,不支持本方案。
回收被缩容实例
为了提高缩容效率,伸缩组默认会采用强制释放模式回收实例,在此模式下,实例移出后将直接释放实例,释放后的实例无资源保留。修改实例回收模式,请参见配置伸缩组。