在需要大量建立隨用隨付執行個體的情況下,您可以通過調用API介面完成建立操作更為高效。本文主要介紹如何通過編寫調用CreateAutoProvisioningGroup API介面的Java代碼大量建立ECS隨用隨付執行個體,以及對比RunInstances和CreateAutoProvisioningGroup介面的功能、優劣勢。
背景資訊
在業務需要使用隨用隨付ECS執行個體的情境下,RunInstances
是使用最頻繁的API。RunInstances
擁有一次調用能夠最多建立100台ECS執行個體的能力,但是在實際的生產環境中,如果需要超過100台的大大量建立ECS執行個體情境,直接使用RunInstances
會存在一定的技術瓶頸。更多資訊,請參見RunInstances建立執行個體時存在的問題。
如果您已瞭解RunInstances
大量建立執行個體過程中存在的技術瓶頸,可以跳過該章節。
為瞭解決大大量建立ECS執行個體的需求情境,阿里雲提供了彈性供應組,您可以通過CreateAutoProvisioningGroup
建立彈性供應組,一鍵式的部署跨計費方式、跨可用性區域、跨執行個體規格類型系列的執行個體叢集。相較於RunInstances
,CreateAutoProvisioningGroup
更適合大大量建立ECS執行個體的業務情境。兩者的功能對比與優勢分析,請參見RunInstances與CreateAutoProvisioningGroup功能對比以及彈性供應組的優勢。
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執行個體的過程中,可能會出現執行個體規格的庫存不足、停止售賣或使用限制等問題。引發以下情況:
|
|
建立策略過於單一 | RunInstances僅支援設定單可用性區域、單一實例規格。如果您的業務需要多可用性區域部署實現異地容災、需要按照最低成本建立ECS執行個體等,則需要您自行構建業務部署方案,以保障執行個體的成功部署。自行構建的業務部署方案存在以下問題:
| 自行解決或聯絡阿里雲提供協助。 |
彈性供應組的優勢
針對RunInstances
大量建立ECS執行個體存在的問題,阿里雲提供了彈性供應組,解決了大大量建立ECS執行個體的情境下存在的問題。彈性供應組支援一鍵部署跨計費方式、跨可用性區域、跨執行個體規格類型系列的執行個體叢集。您可以通過彈性供應組穩定提供計算力,緩解搶佔式執行個體的回收機制帶來的不穩定因素,免去重複手動建立執行個體的繁瑣操作。本章節主要介紹彈性供應組的優勢。
優勢 | 說明 |
大量建立ECS執行個體的數量上限更高 | 彈性供應組支援單次建立最多1000台ECS執行個體。 |
支援設定多可用性區域、多執行個體規格、多種磁碟類型 | 彈性供應組支援您配置最多10種執行個體規格或可用性區域的組合、最多5種磁碟類型的選擇,協助您實現高可用的大量建立ECS執行個體。 樣本情境: 當您通過彈性供應組提供的均衡可用性區域分布策略建立ECS執行個體時,可以配置多個可用性區域和多個執行個體規格。按照策略的要求,多個可用性區域下,建立執行個體的數量應相對平均,但如果其中某個可用性區域無法完成建立,彈性供應組會嘗試將該可用性區域待建立的執行個體數量,轉移到其他可用性區域進行建立。 如果您指定了多種磁碟規格,彈性供應組將按照指定順序作為各磁碟類型的優先順序順序,當某一種磁碟不可用時,自動更換磁碟類型。 說明 當所有磁碟類型都不可用時,系統將會自動更換其它建立方式,不再嘗試該種建立方式。 |
支援多種建立執行個體的策略 | 針對隨用隨付執行個體和搶佔式執行個體,分別提供了以下建立策略:
|
可提高搶佔式執行個體的可用性 | 搶佔式執行個體因其價格優勢使用量越來越高,但是其價格的不穩定性與系統回收的特性,造成管理搶佔式執行個體存在一定的難度。您可以通過彈性供應組,實現在低成本的前提下,提高搶佔式執行個體的可用性。具體方式如下:
|
CreateAutoProvisioningGroup最佳實務
本章節提供CreateAutoProvisioningGroup介面對應的Java程式碼範例,使您快速瞭解該介面的使用方式。
安裝ECS Java SDK以及阿里雲核心庫。
具體操作,請參見安裝Java SDK。
編寫調用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建立彈性供應組時,您只需要設定大量建立執行個體的相關配置項,無需關心建立過程,彈性供應組將以儘力交付的方式,完成建立。
說明儘力交付的方式是指,當您配置的某些資源群組合無法建立執行個體時,將自動切換到其他可用的資源群組合繼續進行建立。該方式建立執行個體需要一定的時間,並且可能導致實際建立結果與建立策略存在一定的偏差。