伸縮組成本優化模式以成本爲目標,始終建立最低價的實例,同時,經過多可用區,多實例規格分佈,以此來提升服務穩定性。可是,對於成本優點最大化的競價實例,伸縮組難以防範競價實例大範圍回收可能致使的服務雪崩,本次升級容許用戶制定更詳細的成本控制策略,在成本和穩定性之間進行調整和權衡。java
當您的伸縮配置選擇了多實例規格,並想以最低的價格來使用同等規模的 ECS 實例配置時,您能夠選擇使用 成本優化策略
的伸縮組,來下降您的 ECS 實例使用成本;當您的伸縮配置選擇的實例爲搶佔式實例時,您可能會遇到因爲價格、庫存等緣由致使搶佔式實例建立失敗場景,從而致使擴容不及時,影響到業務,您也能夠選擇使用 成本優化策略
的伸縮組,在搶佔式實例建立失敗的時候自動爲您嘗試建立同規格的按量實例,來保證業務的穩定性。maven
從上述的描述,咱們能夠清晰的看到,成本優化模式的核心策略:優化
咱們將上述的策略稱爲最低價策略(LowestPrice)。url
關於成本優化模式更詳細的信息,請查看 AutoScaling 推出成本優化模式。code
成本優化模式的升級策略主要針對競價實例回收機制可能帶來的業務雪崩狀況。主要集中在如下兩點:接口
在下面的文章中,咱們將原成本優化伸縮組稱爲普通成本優化伸縮組,將指定實例混合策略的成本優化伸縮組稱爲成本優化混合實例伸縮組。ci
伸縮組所須要的按量實例的最小個數,當伸縮組中按量實例個數小於該值時,將優先建立按量實例。get
知足 OnDemandBaseCapacity 條件後,建立實例中按量實例所佔的比例。it
SpotInstancePools 指定了最低價的多個實例規格,當建立競價實例時,將在 SpotInstancePools 中進行均衡分佈。io
是否開啓競價實例的補償機制。開啓後在競價實例被回收前5分鐘左右,將主動替換掉當前競價實例。
成本優化混合實例伸縮組與普通成本優化伸縮組在接口和功能方面是徹底兼容的。當您不指定混合實例策略的相關參數時,您將建立出普通成本優化伸縮組。同時,對於成本優化混合實例伸縮組,經過合理的制定混合實例策略,可以具備與普通成本優化伸縮組徹底相同的行爲。下面舉例說明:
此時,你建立的成本優化混合實例伸縮組只須要指定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);
本文爲雲棲社區原創內容,未經容許不得轉載。