天天看點

AutoScaling 成本優化模式更新--混合執行個體政策

伸縮組成本優化模式以成本為目标,始終建立最低價的執行個體,同時,通過多可用區,多執行個體規格分布,以此來提高服務穩定性。但是,對于成本優勢最大化的競價執行個體,伸縮組難以防範競價執行個體大範圍回收可能導緻的服務雪崩,本次更新允許使用者制定更詳細的成本控制政策,在成本和穩定性之間進行調整和權衡。

成本優化模式簡介

當您的伸縮配置選擇了多執行個體規格,并想以最低的價格來使用同等規模的 ECS 執行個體配置時,您可以選擇使用

成本優化政策

的伸縮組,來降低您的 ECS 執行個體使用成本;當您的伸縮配置選擇的執行個體為搶占式執行個體時,您可能會遇到由于價格、庫存等原因導緻搶占式執行個體建立失敗場景,進而導緻擴容不及時,影響到業務,您也可以選擇使用

成本優化政策

的伸縮組,在搶占式執行個體建立失敗的時候自動為您嘗試建立同規格的按量執行個體,來保證業務的穩定性。

從上述的描述,我們可以清晰的看到,成本優化模式的核心政策:

  1. 建立執行個體時,以單核cpu價格價格最低來選擇建立執行個體的 InstanceType(執行個體規格),ZoneId(可用區)等配置資訊。
  2. 競價執行個體建立失敗時,調整為建立按量執行個體,以保證業務連續性。

我們将上述的政策稱為最低價政策(LowestPrice)。

關于成本優化模式更詳細的資訊,請檢視

AutoScaling 推出成本優化模式

成本優化模式更新

成本優化模式的更新政策主要針對競價執行個體回收機制可能帶來的業務雪崩情況。主要集中在以下兩點:

  1. 混合執行個體配比。允許使用者為成本優化伸縮組制定按量執行個體與競價執行個體的混合政策。
  2. 競價執行個體主動替換。在競價執行個體釋放前建立新執行個體,主動替換掉目前的競價執行個體。

在下面的文章中,我們将原成本優化伸縮組稱為普通成本優化伸縮組,将指定執行個體混合政策的成本優化伸縮組稱為成本優化混合執行個體伸縮組。

參數詳解

  • OnDemandBaseCapacity

伸縮組所需要的按量執行個體的最小個數,當伸縮組中按量執行個體個數小于該值時,将優先建立按量執行個體。

  • OnDemandPercentageAboveBaseCapacity

滿足 OnDemandBaseCapacity 條件後,建立執行個體中按量執行個體所占的比例。

  • SpotInstancePools

SpotInstancePools 指定了最低價的多個執行個體規格,當建立競價執行個體時,将在 SpotInstancePools 中進行均衡分布。

  • SpotInstanceRemedy

是否開啟競價執行個體的補償機制。開啟後在競價執行個體被回收前5分鐘左右,将主動替換掉目前競價執行個體。

相容性介紹

成本優化混合執行個體伸縮組與普通成本優化伸縮組在接口和功能方面是完全相容的。當您不指定混合執行個體政策的相關參數時,您将建立出普通成本優化伸縮組。同時,對于成本優化混合執行個體伸縮組,通過合理的制定混合執行個體政策,能夠具有與普通成本優化伸縮組完全相同的行為。下面舉例說明:

  1. 假設普通成本優化伸縮組建立的全為按量執行個體。

此時,你建立的成本優化混合執行個體伸縮組隻需要指定OnDemandBaseCapacity=0, OnDemandPercentageAboveBaseCapacity=100,spotInstancePools=1,那麼将擁有完全相同的行為。

  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(價格依此上升)。

擴容數量 按量執行個體配置設定情況 競價執行個體配置設定情況
3 1(tiny)
1 4
2 5
6
7
1(tiny)1(small)
2(tiny)1(small)
8
2(tiny)2(small)
縮容政策

成本優化混合執行個體伸縮組的釋放政策不遵循伸縮組上指定的釋放政策,為了保持執行個體伸縮組内執行個體的混合配比,将采用以下描述的執行個體釋放政策。首先,将根據伸縮組執行個體混合政策,确定将要釋放的按量執行個體與競價執行個體的個數,我們将在保證足夠數量的執行個體被釋放的前提下,按照伸縮組整體趨近期望配比的方式确定釋放按量執行個體和競價執行個體的個數。當按量執行個體個數不足時,将釋放更多的競價執行個體;當競價執行個體個數不足時,将改為釋放按量執行個體。

  • 按量執行個體縮容政策

釋放按量執行個體時,将按照以下條件選擇可釋放的執行個體:

  1. 優先釋放價格高的執行個體;
  2. 價格相同時,按照伸縮組指定的釋放政策選取合适數量的執行個體進行釋放。
  • 競價執行個體縮容政策

釋放競價執行個體時,将按照以下條件選擇可釋放的執行個體:

  1. 将首先釋放不屬于spotInstancePools中規格類型的執行個體,這部分執行個體的釋放政策與上述按量執行個體的縮容政策相同;
  2. 如果還需要釋放規格類型屬于spotInstancePools的執行個體,将進一步選擇釋放所需要的執行個體,選擇方式如下:
    1. 選擇釋放的執行個體将使得剩餘執行個體的執行個體規格在spotInstancePools中趨于均衡分布;
    2. 相同規格的多個執行個體可供選擇時,将按照伸縮組指定的釋放政策選擇釋放的執行個體。

下面,同樣我們通過簡單的示例來描述成本優化混合執行個體伸縮組在縮容時的執行個體選擇過程:

假設伸縮組組内按量執行個體個數為8,競價執行個體為2個ecs.n1.tiny規格執行個體,2個ecs.n1.small規格執行個體,OnDemandBaseCapacity = 5,OnDemandPercentageAboveBaseCapacity = 40,SpotInstancePools = 2,伸縮組執行個體規格配置為:ecs.n1.tiny, ecs.n1.small,ecs.n1.medium(價格依此上升)。

縮容數量

競價執行個體補償

競價執行個體在系統回收之前五分鐘左右将會發送系統回收消息,當您開啟競價執行個體主動替換功能之後,在系統發送競價執行個體的回收消息之後,彈性伸縮将會為該競價執行個體建立補償任務,并在稍後通過建立新的競價執行個體來替換即将釋放的執行個體。我們将這一主動替換即将被回收的競價執行個體的行為稱為

競價執行個體補償

競價執行個體補償是保障業務連續性的輔助保障機制,該補償機制具有以下特點,你需要對這些特點有充分的認識,以便您配置合理的成本優化伸縮組。

  1. 競價執行個體補償的時間視窗。在收到競價執行個體系統回收消息後,将為對應的執行個體生成補償任務,大約五分鐘時間後執行個體将被回收,當執行個體被回收後,伸縮組内的對應執行個體将被健康檢查機制清除伸縮組(大約6分鐘)。競價執行個體補償任務的有效期為:補償任務生成到健康檢查将執行個體移除伸縮組之間。一旦錯過補償時間視窗,對應的補償任務将會失效和清理,意味着對應執行個體錯過補償期。
  2. 有限的補償能力。一次競價執行個體的補償過程分為新執行個體啟動和舊執行個體釋放兩個過程,補償任務執行過程中,伸縮組将處于鎖定狀态。由于暫時伸縮組不支援并行伸縮活動處理,是以,在有限的補償時間視窗内,能夠進行的補償任務次數和執行個體數是有限的。由于競價執行個體回收通常是呈現批次狀,是以,為了最大程度利用有限的補償能力,我們将對補償任務進行一定程度的聚合之後,按批次進行下發,最大程度的補償更多的執行個體。

最佳實踐

SDK建立

這裡我們主要展示如何使用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);           

控制台使用

控制台建立混合執行個體成本優化伸縮組,需要按照下圖所示進行配置:

AutoScaling 成本優化模式更新--混合執行個體政策

參數說明:

  • 組内最小按量執行個體數(台),伸縮組中按量執行個體小于最小按量執行個體數時将優先建立按量執行個體。
  • 按量執行個體所占比例(%),超出最小按量執行個體數後,按量執行個體所占的比例。
  • 最低價的多個執行個體規格(個),指定競價執行個體在最低價的多個執行個體規格中均衡配置設定。
  • 是否開啟搶占式執行個體補償,開啟後,當競價執行個體收到回收通知時,将主動建立新的執行個體進行替換。