伸缩组成本优化模式以成本为目标,始终建立最低价的实例,同时,经过多可用区,多实例规格分布,以此来提升服务稳定性。可是,对于成本优点最大化的竞价实例,伸缩组难以防范竞价实例大范围回收可能致使的服务雪崩,本次升级容许用户制定更详细的成本控制策略,在成本和稳定性之间进行调整和权衡。java
当您的伸缩配置选择了多实例规格,并想以最低的价格来使用同等规模的 ECS 实例配置时,您能够选择使用 成本优化策略
的伸缩组,来下降您的 ECS 实例使用成本;当您的伸缩配置选择的实例为抢占式实例时,您可能会遇到因为价格、库存等缘由致使抢占式实例建立失败场景,从而致使扩容不及时,影响到业务,您也能够选择使用 成本优化策略
的伸缩组,在抢占式实例建立失败的时候自动为您尝试建立同规格的按量实例,来保证业务的稳定性。maven
从上述的描述,咱们能够清晰的看到,成本优化模式的核心策略:优化
咱们将上述的策略称为最低价策略(LowestPrice)。spa
成本优化模式的升级策略主要针对竞价实例回收机制可能带来的业务雪崩状况。主要集中在如下两点:code
在下面的文章中,咱们将原成本优化伸缩组称为普通成本优化伸缩组,将指定实例混合策略的成本优化伸缩组称为成本优化混合实例伸缩组。接口
伸缩组所须要的按量实例的最小个数,当伸缩组中按量实例个数小于该值时,将优先建立按量实例。ci
知足 OnDemandBaseCapacity 条件后,建立实例中按量实例所占的比例。get
SpotInstancePools 指定了最低价的多个实例规格,当建立竞价实例时,将在 SpotInstancePools 中进行均衡分布。it
是否开启竞价实例的补偿机制。开启后在竞价实例被回收前5分钟左右,将主动替换掉当前竞价实例。io
成本优化混合实例伸缩组与普通成本优化伸缩组在接口和功能方面是彻底兼容的。当您不指定混合实例策略的相关参数时,您将建立出普通成本优化伸缩组。同时,对于成本优化混合实例伸缩组,经过合理的制定混合实例策略,可以具备与普通成本优化伸缩组彻底相同的行为。下面举例说明:
此时,你建立的成本优化混合实例伸缩组只须要指定OnDemandBaseCapacity=0, OnDemandPercentageAboveBaseCapacity=100,spotInstancePools=1,那么将拥有彻底相同的行为。
此时,你建立的成本优化混合实例伸缩组只须要指定OnDemandBaseCapacity=0, OnDemandPercentageAboveBaseCapacity=0,spotInstancePools=1,那么将拥有彻底相同的行为。
成本优化混合实例伸缩组拥有一套相对独立的扩缩容策略,您在大多数状况下不须要关注实例的选择过程,若是您须要对伸缩组行为具备更详细的了解,本节中对扩缩容过程进行了详细的描述。
扩容策略
当指定了伸缩组的实例混合策略以后,伸缩组并不是仅对新建立出来的实例按照混合比例进行建立,而是保证伸缩组总体的实例配比趋近目标配比。
按量实例部分,采用了 LowestPrice 的建立方式,多实例规格与多可用区按照优先级方式依此进行选择,该部分与普通成本优化伸缩组保持一致。
竞价实例部分,采用了 LowestPrice 的建立方式,当配置多实例规格时,将根据 SpotInstancePools 配置,在最低价的多个实例规格之间平均分配,针对每一种实例规格,当没法成功建立时,按照价格顺序依次选取下一规格继续进行建立,当竞价实例所有不可建立,将退回到建立对应的按量实例。多可用区则按照优先级的方式依次进行选择。
下面,咱们经过示例来描述成本优化混合实例伸缩组的扩容行为:
假设伸缩组组内按量实例个数为3,竞价实例为1个ecs.n1.tiny规格实例,OnDemandBaseCapacity = 5,OnDemandPercentageAboveBaseCapacity = 40,SpotInstancePools = 2,伸缩组实例规格配置为:ecs.n1.tiny, ecs.n1.small,ecs.n1.medium(价格依此上升)。
扩容数量 | 按量实例分配状况 | 竞价实例分配状况 |
---|---|---|
0 | 3 | 1(tiny) |
1 | 4 | 1(tiny) |
2 | 5 | 1(tiny) |
3 | 6 | 1(tiny) |
4 | 7 | 1(tiny) |
5 | 7 | 1(tiny)1(small) |
6 | 7 | 2(tiny)1(small) |
7 | 8 | 2(tiny)1(small) |
8 | 8 | 2(tiny)2(small) |
缩容策略
成本优化混合实例伸缩组的释放策略不遵循伸缩组上指定的释放策略,为了保持实例伸缩组内实例的混合配比,将采用如下描述的实例释放策略。首先,将根据伸缩组实例混合策略,肯定将要释放的按量实例与竞价实例的个数,咱们将在保证足够数量的实例被释放的前提下,按照伸缩组总体趋近指望配比的方式肯定释放按量实例和竞价实例的个数。当按量实例个数不足时,将释放更多的竞价实例;当竞价实例个数不足时,将改成释放按量实例。
释放按量实例时,将按照如下条件选择可释放的实例:
释放竞价实例时,将按照如下条件选择可释放的实例:
若是还须要释放规格类型属于spotInstancePools的实例,将进一步选择释放所须要的实例,选择方式以下:
下面,一样咱们经过简单的示例来描述成本优化混合实例伸缩组在缩容时的实例选择过程:
假设伸缩组组内按量实例个数为8,竞价实例为2个ecs.n1.tiny规格实例,2个ecs.n1.small规格实例,OnDemandBaseCapacity = 5,OnDemandPercentageAboveBaseCapacity = 40,SpotInstancePools = 2,伸缩组实例规格配置为:ecs.n1.tiny, ecs.n1.small,ecs.n1.medium(价格依此上升)。
缩容数量 | 按量实例分配状况 | 竞价实例分配状况 |
---|---|---|
0 | 8 | 2(tiny)2(small) |
1 | 8 | 2(tiny)1(small) |
2 | 7 | 2(tiny)1(small) |
3 | 7 | 1(tiny)1(small) |
4 | 7 | 1(tiny) |
5 | 6 | 1(tiny) |
6 | 6 | 0 |
7 | 5 | 0 |
8 | 4 | 0 |
竞价实例在系统回收以前五分钟左右将会发送系统回收消息,当您开启竞价实例主动替换功能以后,在系统发送竞价实例的回收消息以后,弹性伸缩将会为该竞价实例建立补偿任务,并在稍后经过建立新的竞价实例来替换即将释放的实例。咱们将这一主动替换即将被回收的竞价实例的行为称为竞价实例补偿
。
竞价实例补偿是保障业务连续性的辅助保障机制,该补偿机制具备如下特色,你须要对这些特色有充分的认识,以便您配置合理的成本优化伸缩组。
这里咱们主要展现如何使用java SDK建立伸缩规则,并采用maven进行依赖管理。建立目标追踪伸缩规则,须要使用aliyun-java-sdk-ess 2.3.1及以上版本。
程序所需的maven依赖以下:
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>3.0.8</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-ess</artifactId> <version>2.3.1</version> </dependency>
建立混合实例的成本优化伸缩组:
CreateScalingGroupRequest request = new CreateScalingGroupRequest(); request.setScalingGroupName(name); request.setMinSize(0); request.setMaxSize(100); request.setVSwitchId(vsId); request.setMultiAZPolicy("COST_OPTIMIZED"); request.setOnDemandBaseCapacity(onDemandBaseCapacity); request.setOnDemandPercentageAboveBaseCapacity(onDemandPercentageAboveBaseCapacity); request.setSpotInstanceRemedy(spotInstanceRemedy); request.setSpotInstancePools(spotInstancePools); CreateScalingGroupResponse response = client.getAcsResponse(request);
原文连接 本文为云栖社区原创内容,未经容许不得转载。