天天看點

【ECS】使用彈性供應組API批量建立ECS執行個體

背景資訊

在業務需要使用按量付費ECS執行個體的場景下,RunInstances是使用最頻繁的API。RunInstances擁有一次調用能夠最多建立100台ECS執行個體的能力,但是在實際的生産環境中,如果需要超過100台的大批量建立ECS執行個體場景,直接使用RunInstances會存在一定的技術瓶頸。更多資訊,請參見本文RunInstances建立執行個體時存在的問題章節。

說明 如果您已了解RunInstances批量建立執行個體過程中存在的技術瓶頸,可以跳過該章節。

為了解決大批量建立ECS執行個體的需求場景,阿裡雲提供了彈性供應組,您可以通過CreateAutoProvisioningGroup建立彈性供應組,一鍵式的部署跨計費方式、跨可用區、跨執行個體規格族的執行個體叢集。相較于RunInstances,CreateAutoProvisioningGroup更适合大批量建立ECS執行個體的業務場景。兩者的功能對比與優勢分析,請參見RunInstances與CreateAutoProvisioningGroup功能對比以及彈性供應組的優勢。

RunInstances與CreateAutoProvisioningGroup功能對比

本章節對比

RunInstances

CreateAutoProvisioningGroup

兩接口的部分功能,使您可以快速了解兩者的差異,選擇合适的建立執行個體方式。

對比項
單次批量建立執行個體的數量上限 100台 1000台(vCPU上限為10000)
容量傳遞方式 執行個體數量 執行個體數量、vCPU核數、執行個體規格的權重等
是否支援多可用區
是否支援多個執行個體規格
是否支援多種磁盤規格
是否提供了建立執行個體的政策 是。提供了如下政策:
  • 按量付費執行個體
    • 成本優化政策:從備選執行個體規格中選取成本最低的執行個體規格,建立執行個體。
    • 優先級政策:按照備選執行個體規格設定的優先級,依次嘗試建立執行個體。
  • 搶占式執行個體
    • 可用區均衡分布政策:在備選的可用區之間,數量均勻的建立執行個體。
    • 容量優化分布政策:根據搶占式執行個體的庫存情況,選擇最優的執行個體規格及可用區進行建立執行個體。
傳遞穩定性 受資源庫存影響較大 多可用區、多執行個體規格的配置組合有效降低了資源庫存造成的影響
API響應格式 同步傳回建立結果

建立執行個體的方式由RunInstances更換為CreateAutoProvisioningGroup的部分示例場景:

  • 如果您之前使用RunInstances在單可用區、單執行個體規格的配置下批量建立執行個體,更換為CreateAutoProvisioningGroup後,您隻需配置一組執行個體規格與可用區的組合,即可實作批量建立執行個體。
  • 如果您之前使用RunInstances時手動設定了業務部署方案,更換為CreateAutoProvisioningGroup後,将由系統為您提供一鍵式的多可用區、多執行個體規格、多磁盤配置的部署能力,并且系統提供了多種建立執行個體的政策供您選擇。例如:您之前手動設定了周遊多個執行個體規格及可用區的方案進行RunInstances調用,以提高執行個體建立的成功率。更換為CreateAutoProvisioningGroup後,您隻需要通過參數配置多個執行個體規格及可用區的組合,選擇合适的建立政策,系統将自動完成批量建立執行個體的操作。
注意 彈性供應組的建立政策存在使用限制,單次最大可建立1000台執行個體,如果指定了執行個體規格的權重(

WeightedCapacity

),則單次建立的最大權重容量為10000。

RunInstances建立執行個體時存在的問題

基于RunInstances功能的限制,您在大批量建立執行個體時,可能遇到下表所示的問題。

問題 說明 解決方案
批量建立的能力有限 調用一次RunInstances最多可以建立100台ECS執行個體。 當您需要建立大于100台ECS執行個體時,需要通過循環或并發的方式多次調用該接口,以完成業務需求。
批量建立的穩定性不足 調用RunInstances隻支援設定單可用區、單執行個體規格。是以您在批量建立ECS執行個體的過程中,可能因為執行個體規格的庫存不足、停止售賣或使用限制等問題。引發以下情況:
  • 在某一時間段,執行個體規格的庫存不足導緻批量建立失敗。
  • 在某一時間段,執行個體規格停止售賣導緻無法再建立指定的執行個體規格。
  • 指定的執行個體規格隻在部分可用區售賣。
  • 指定的執行個體規格隻能搭配指定的磁盤類型。
  • 庫存問題是導緻批量建立ECS執行個體失敗的主要原因。是以阿裡雲會推薦您在批量建立ECS執行個體之前,先調用 DescribeAvailableResource

    查詢執行個體規格與可用區下資源的庫存情況,手動确認多個庫存充足的可用區與執行個體規格的組合後,再批量建立ECS執行個體。通過複雜的建立方式,換來了較高的業務傳遞穩定性。

    示例場景:當您确認多個庫存充足的可用區與執行個體規格的組合後,您還需要建構合适的建立ECS執行個體的政策。例如,您可以根據手動确認的多個組合順序,依次建立100台ECS執行個體,如果第一個組合的資源庫存隻支援建立50台ECS執行個體,那麼您需要使用第二個組合嘗試建立其餘50台ECS執行個體。

  • 執行個體規格存在使用限制。您可以通過

    查詢限制,并自行建立容錯方案,避免因使用限制變更帶來的影響。

    說明 您也可以根據文檔提供的執行個體規格特點确定相關限制。更多資訊,請參見

    執行個體規格族

    示例場景:

    ecs.g6e.large

    執行個體規格隻支援ESSD雲盤類型、

    cn-beijing-x

    可用區下不支援選擇ESSD雲盤類型等。
建立政策過于單一 RunInstances僅支援設定單可用區、單執行個體規格。如果您的業務需要多可用區部署實作異地容災、需要按照最低成本建立ECS執行個體等,則需要您自行建構業務部署方案,以保障執行個體的成功部署。自行建構的業務部署方案存在以下問題:
  • 開發成本高。自行建構的業務部署方案需要處理一系列的問題。例如,庫存不足時如何順利的建立ECS執行個體、擴容伺服器時如何在擷取搶占式執行個體最低成本的同時保證計算能力等
  • 穩定性與專業性不足。對于阿裡雲提供的資源,您難以用專業的方式自行建構業務部署方案,并無法對方案進行測試,進而将對生産環境造成一定的風險。
自行解決或聯系阿裡雲提供幫助。

彈性供應組的優勢

針對RunInstances批量建立ECS執行個體存在的問題,阿裡雲提供了彈性供應組,解決了大批量建立ECS執行個體的場景下存在的問題。彈性供應組支援一鍵部署跨計費方式、跨可用區、跨執行個體規格族的執行個體叢集。您可以通過彈性供應組穩定提供計算力,緩解搶占式執行個體的回收機制帶來的不穩定因素,免去重複手動建立執行個體的繁瑣操作。本章節主要介紹彈性供應組的優勢。

優勢
批量建立ECS執行個體的數量上限更高 彈性供應組支援單次建立最多1000台ECS執行個體。
支援設定多可用區、多執行個體規格、多種磁盤類型

彈性供應組支援您配置最多10種執行個體規格或可用區的組合、最多5種磁盤類型的選擇,幫助您實作高可用的批量建立ECS執行個體。

當您通過彈性供應組提供的均衡可用區分布政策建立ECS執行個體時,可以配置多個可用區和多個執行個體規格。按照政策的要求,多個可用區下,建立執行個體的數量應相對平均,但如果其中某個可用區無法完成建立,彈性供應組會嘗試将該可用區待建立的執行個體數量,轉移到其他可用區進行建立。

如果您指定了多種磁盤規格,彈性供應組将按照指定順序作為各磁盤類型的優先級順序,當某一種磁盤不可用時,自動更換磁盤類型。

說明 當所有磁盤類型都不可用時,系統将會自動更換其它建立方式,不再嘗試該種建立方式。

支援多種建立執行個體的政策 針對按量付費執行個體和搶占式執行個體,分别提供了以下建立政策:
可提高搶占式執行個體的可用性 搶占式執行個體因其價格優勢使用量越來越高,但是其價格的不穩定性與系統回收的特性,造成管理搶占式執行個體存在一定的難度。您可以通過彈性供應組,實作在低成本的前提下,提高搶占式執行個體的可用性。具體方式如下:
  • 建立政策選擇預設的成本優化政策,每次的擴容政策将按照執行個體規格價格從低到高的順序嘗試建立。
  • 搶占式執行個體對應的不同執行個體規格與可用區的資源庫存情況互相隔離。多個執行個體規格與多個可用區的配置組合,可以有效降低所有組合都無庫存的機率。
  • 建立彈性供應組時,配置多種備選的磁盤類型,保證建立執行個體的過程中,系統能夠自動選取合适的磁盤類型。
  • 配置

    SpotInstancePoolsToUseCount

    參數,指定搶占式執行個體在多個最低價格的執行個體規格及可用區的組合中建立。避免某一種執行個體規格對應的執行個體回收,造成計算能力産生雪崩效應。

CreateAutoProvisioningGroup最佳實踐

本章節提供CreateAutoProvisioningGroup接口對應的Java代碼示例,使您快速了解該接口的使用方式。

  1. 安裝ECS Java SDK以及阿裡雲核心庫。具體操作,請參見 安裝Java SDK
  2. 編寫調用CreateAutoProvisioningGroup接口的Java代碼。

代碼示例如下:

CreateAutoProvisioningGroupRequest request = new CreateAutoProvisioningGroupRequest();
request.setRegionId(regionId);
request.setLaunchConfigurationImageId(RequestHelper.IMAGE_ID);
request.setLaunchConfigurationSecurityGroupId(securityGroupId);
request.setTotalTargetCapacity(totalTargetCapacity);
request.setPayAsYouGoTargetCapacity(payAsYouGoTargetCapacity);
request.setSpotTargetCapacity(spotTargetCapacity);
request.setLaunchConfigurationSystemDiskCategory("cloud_ssd");
request.setLaunchConfigurationSystemDiskSize(40);
request.setAutoProvisioningGroupType("instant");
// 設定搶占式執行個體的建立政策
request.setSpotAllocationStrategy("lowest-price");
request.setSpotInstancePoolsToUseCount(spotInstancePoolsToUseCount);
// 設定按量付費執行個體的建立政策
request.setPayAsYouGoAllocationStrategy("prioritized");
request.setMaxSpotPrice(maxSpotPrice);
// 多執行個體規格,多可用區配置資訊,最大支援10種
request.setLaunchTemplateConfigs(launchTemplateConfigs);
request.setClientToken(clientToken);
CreateAutoProvisioningGroupResponse response = client.getAcsResponse(request);      

JSON傳回值示例如下:

{
    "autoProvisioningGroupId":"apg-****",
    "launchResults":[
        {
            "instanceIds":[
                "i-****"
            ],
            "instanceType":"ecs.c5.large",
            "spotStrategy":"NoSpot",
            "zoneId":"cn-shanghai-b"
        },
       {
            "instanceIds":[],
            "instanceType":"ecs.c5.large",
            "spotStrategy":"NoSpot",
            "zoneId":"cn-shanghai-b",
            "errorCode" : "Invalid.Parameter",
            "errorMsg" : "Specific Parameter 'imageId' is not valid"
        }
    ],
    "requestId":"20DA1E9F-BF7F-4BE7-8204-E4DE58E4FC7B"
}      

通過CreateAutoProvisioningGroup建立彈性供應組時,您隻需要設定批量建立執行個體的相關配置項,無需關心建立過程,彈性供應組将以盡力傳遞的方式,完成建立。

說明 盡力傳遞的方式是指,當您配置的某些資源組合無法建立執行個體時,将自動切換到其他可用的資源組合繼續進行建立。該方式建立執行個體需要一定的時間,并且可能導緻實際建立結果與建立政策存在一定的偏差。