Amazon EC2 現貨的最佳實踐 - Amazon Elastic Compute Cloud

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon EC2 現貨的最佳實踐

Amazon EC2 可 AWS 雲端 透過 Spot 執行個體存取備用EC2運算容量,相較於隨需價格,最多可節省 90%。隨需執行個體和競價型執行個體之間的唯一區別是,如果 Amazon EC2 需要回收容量EC2,Amazon 可能會中斷 Spot 執行個體,在兩分鐘的時間內通知。為了確保使用 Spot 執行個體的最佳體驗,請務必瞭解並套用最佳做法以供其使用。

競價型執行個體 建議用於無狀態、容錯、靈活的應用程式。例如,Spot 執行個體適用於大數據、容器化工作負載、CI/CD、無狀態 Web 伺服器、高效能運算 (HPC) 和轉譯工作負載。

執行時,競價型執行個體 與 隨需執行個體 完全相同。但是,Spot 並無法保證您可以保持執行中的執行個體有足夠時間來完成工作負載。Spot 也無法保證您可以立即取得所尋找執行個體的可用性,也無法保證您一律可以取得所請求的彙總容量。此外,Spot 執行個體中斷和容量可能會隨著時間而改變,因為 Spot 執行個體可用性會因供給和需求而有所不同,而過去的效能並不能保證未來的結果。

競價型執行個體 不適合執行個體節點之間不靈活、可設定狀態、錯誤不容忍或緊密結合的工作負載。對於無法容忍整個目標容量無法完全可用的偶爾期間的工作負載,我們不建議使用 Spot 執行個體。儘管遵循 Spot 最佳實務可靈活調整執行個體類型,而可用區域可提供高可用性的最佳機會,但無法保證容量可用,因為隨需執行個體的需求激增可能會中斷 Spot 執行個體上的工作負載。

我們強烈建議將 Spot 執行個體用於這些工作負載,或嘗試容錯移轉到隨需執行個體以處理中斷或無法使用的期間。容錯移轉到隨需執行個體可能會無意中導致其他 Spot 執行個體的中斷。此外,如果執行個體類型和可用區域組合的 Spot 執行個體遭到中斷,您可能很難獲得具有相同組合的隨需執行個體。

無論您是經驗豐富的 Spot 使用者或 Spot 執行個體的新使用者,如果您目前遇到 Spot 執行個體中斷或可用性問題,建議您遵循這些最佳做法,以獲得使用 Spot 服務的最佳體驗。

針對中斷準備個別執行個體

從容處理 Spot 執行個體中斷的最佳方法,就是建立容錯的應用程式架構。若要完成此操作,您可以利用EC2執行個體重新平衡建議和 Spot 執行個體中斷通知。

EC2執行個體重新平衡建議是一種訊號,會在 Spot 執行個體有中斷風險增加時通知您。該訊號使您有機會在兩分鐘 Spot 執行個體中斷通知之前主動管理 Spot 執行個體。您可以決定將工作負載重新平衡至未處於提高之中斷風險的新的或現有 競價型執行個體。我們使用 Auto Scaling 群組和EC2叢集中的容量重新平衡功能,讓您輕鬆使用此訊號。

Spot 執行個體中斷通知是在 Amazon 中EC2斷 Spot 執行個體前兩分鐘發出的警告。如果您的工作負載具有「時間彈性」,當執行個體中斷時,您可以將它們設定為停止或休眠,而非終止。Amazon EC2 會在中斷時自動停止或休眠您的 Spot 執行個體,並在我們有可用容量時自動恢復執行個體。

我們建議您在 Amazon EventBridge 中建立擷取重新平衡建議和中斷通知的規則,然後觸發檢查點以檢查工作負載的進度,或妥善處理中斷。如需詳細資訊,請參閱監控重新平衡建議訊號。如需逐步引導您如何建立和使用事件規則的詳細範例,請參閱利用 Amazon EC2 Spot 執行個體中斷通知

如需詳細資訊,請參閱 EC2例項重新平衡建議Spot 執行個體中斷

對執行個體類型和可用區域具有彈性

競價型容量集區是具有相同EC2執行個體類型 (例如m5.large) 和可用區域 (例如 us-east-1a) 的一組未使用執行個體。您應該對於請求的執行個體類型,以及可在其中部署工作負載的可用區域具有彈性。這讓 Spot 有更好的機會找到並配置您所需的運算容量。例如,不要只要求 c5.large 是否願意使用來自 c4、m5 和 m4 系列的 large。

根據您的特定需求,您可以評估哪些執行個體類型可以具彈性,以滿足您的運算需求。如果工作負載可以垂直擴展,則應在請求中包含較大的執行個體類型 (更多 vCPUs 和記憶體)。如果您只能水平擴展,則應納入舊一代執行個體類型,因為隨需客戶的需求較少。

一個很好的經驗法則是針對每個工作負載的至少 10 個執行個體類型上具有彈性。此外,請確定所有可用區域均已設定為在您的工作負載中使用,VPC並為您的工作負載選取。

使用屬性型執行個體類型選取範圍

透過以屬性為vCPUs基礎的執行個體類型選取,您可以為要執行的工作負載指定執行個體屬性,例如記憶體和儲存體。EC2然後,Auto Scaling 或EC2叢集將自動識別並啟動符合您指定屬性的執行個體。這樣就省去了手動選擇特定執行個體類型所需的工作量,這需要深入了解每個執行個體類型的產品。

此外,以屬性為基礎的例證類型選取可讓您在新發行的例證類型可用時自動使用它們。這可確保無縫存取日益廣泛的競價型執行個體容量。

基於屬性的執行個體類型選擇非常適合工作負載和架構,這些工作負載和架構可靈活運用於執行的執行個體類型,例如高效能運算 (HPC) 和大數據工作負載。

如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南和指定EC2叢集或 Spot 叢集的執行個體類型選取屬性本指南中的使用以屬性為基礎的執行個體類型選擇建立混合執行個體群組。

使用 Spot 放置分數來識別最佳區域和可用區域

競價型執行個體是未使用的EC2容量,而且此容量會根據EC2供給和需求而波動。因此,您可能無法始終在特定時間在特定位置獲得所需的確切 Spot 容量。若要降低這種不可預測性,您可以使用競價位置分數功能。此功能針對較有可能具有足夠容量以滿足 Spot 容量需求的區域或可用區域提供建議,而不需要您先在這些位置啟動競價型執行個體。

Spot 放置分數最適合用於可彈性執行個體類型及其可使用的區域或可用區域或可用區域的工作負載。您只需指定所需的競價型容量、執行個體類型需求,以及是否要針對區域或可用區域提供建議。作為回報,您會收到每個區域或可用區域的分數介於 1 到 10 之間,指出在該位置成功佈建請求的 Spot 容量的可能性。分數為 10 表示您的 Spot 請求很有可能成功。

請務必注意,Spot 放置分數是一項 point-in-time 建議,因為容量可能會隨時間而有所不同。它不保證可用容量或預測中斷的風險。

您可以使用 Amazon EC2 主控台中的競價位置分數功能 AWS CLI,或使用SDK. 如需詳細資訊,請參閱Spot 配置分數

使用 EC2 Auto Scaling 群組或EC2叢集來管理您的彙總容量

Spot 可讓您以彙總容量 (包括記憶體vCPUs、儲存或網路傳輸量為單位) 進行思考,而不是以個別執行個體來思考。Auto Scaling 群組和EC2叢集可讓您啟動和維護目標容量,並自動請求資源以取代任何中斷或手動終止的容量。設定 Auto Scaling 群組或EC2叢集時,只需根據應用程式需求指定執行個體類型和目標容量。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南和本使用者指南建立EC2艦隊中的自動擴展群組

使用價格和容量最佳化分配策略

Auto Scaling 群組中的分配策略可協助您佈建目標容量,而無需手動尋找具有備用容量的 Spot 容量集區。建議使用 price-capacity-optimized 策略,因為此策略會自動從最可用且價格最低的 Spot 容量集區佈建執行個體。您也可以利用EC2艦隊中的price-capacity-optimized配置策略。由於您的 Spot 執行個體容量來自具有最佳容量的集區,因此可降低回收 Spot 執行個體的可能性。如需有關配置策略的詳細資訊,請參閱 Amazon EC2 Auto Scaling 使用者指南中的 Spot 執行個體和本使用者指南當工作負載具有較高的中斷成本時中的。

使用整合式 AWS 服務來管理 Spot 執行個體

其他 AWS 服務與 Spot 整合,可降低整體運算成本,而無需管理個別執行個體或叢集。我們建議您針對適用的工作負載考慮下列解決方案:Amazon EMR、Amazon 彈性容器服務 AWS Batch、Amazon Elastic Kubernetes Service SageMaker AWS Elastic Beanstalk、Amazon 和 Amazon。 GameLift若要進一步了解這些服務的競價型最佳實務,請參閱 Amazon S EC2 pot 執行個體研討會網站

使用哪種 Spot 請求方法最好?

請使用下表決定請求 Spot 執行個體時要使用哪API個。

API 何時使用? 使用案例 我應該使用這個API嗎?

CreateAutoScalingGroup

  • 您需要具有單一組態或混合組態的多個執行個體。

  • 您想要透過可設定的自動化生命週期管理API。

建立 Auto Scaling 群組,管理執行個體的生命週期,同時維護所需的執行個體數量。支援在指定的最小和最大限制之間水平擴展 (新增更多執行個體)。

CreateFleet
  • 您需要具有單一組態或混合組態的多個執行個體。

  • 您希望自行管理您的執行個體生命週期。

  • 如果您不需要自動擴展,建議您使用 instant 類型機群。

在單一請求中建立隨需執行個體和 Spot 執行個體的叢集,並具有多個啟動規格,這些規格會因執行個體類型AMI、可用區域或子網路而異。Spot 執行個體分配策略預設為每單位 lowest-price,但您可以將其變更為 price-capacity-optimizedcapacity-optimizeddiversified

是 – 在 instant 模式中 (如果您不需要自動擴展)

RunInstances
  • 您已經在使用啟動隨需執行個體,而且只想變更單一參數來變更為啟動 Spot 執行個體。 RunInstances API

  • 您不需要具有不同執行個體類型的多個執行個體。

使用AMI和一個執行個體類型啟動指定數量的執行個體。

否 — 因為 RunInstances 不允許在單一要求中混合執行個體類型

RequestSpotFleet
  • 我們強烈不鼓勵使用, RequestSpotFleet API因為它是沒有計劃投資API的遺產。

  • 如果您想要管理執行個體生命週期,請使用 CreateFleet API.

  • 如果您不想管理執行個體生命週期,請使用 CreateAutoScalingGroup API.

做NOTUSE。 RequestSpotFleet 是遺產,沒API有計劃投資。

RequestSpotInstances
  • 我們強烈不鼓勵使用, RequestSpotInstances API因為它是沒有計劃投資API的遺產。

做NOTUSE。 RequestSpotInstances 是遺產,沒API有計劃投資。