1. 程式人生 > 實用技巧 >EC2 中擴充套件與縮減的方法

EC2 中擴充套件與縮減的方法

EC2 中擴充套件與縮減的方法

今天要討論的是 Auto Scaling Out/In 自動擴充套件或縮減這樣的配置有何可以再改進的地方:
首先,根據 AWS 官方教材的作法,它們會建議把 Auto Scaling Group 放在私有子網,而 Elastic Load Balancing (ELB) 放在公有子網中。這樣的配置比較合理,因為這樣比較安全。

對於 Auto Scaling Group 的擴充套件與縮減政策需要做進一步的說明

擴充套件與縮減的方法

維持固定數量執行例項 Maintain current instance levels at all times

直接指定要執行的例項數量,簡單的做法就是在 Auto Scaling Group 中將所需容量 desired capacity/容量下線 minimum size/容量上限 maximum size 這三個值都設定一樣就可以。

Auto Scaling Group 維持固定數量執行例項
圖 1. Auto Scaling Group 維持固定數量執行例項

手動擴充套件 Manual scaling

手動將 EC2 例項附加到 Auto Scaling Group,到 EC2 控制檯,選擇左邊選單中的 例項 Instances,按下右邊的建立啟動組態按鈕,當然也可以用相同操作將EC2 例項從 Auto Scaling Group 中移除。

將 EC2 例項附加到 Auto Scaling Group
圖 2. 將 EC2 例項附加到 Auto Scaling Group

排程擴充套件 Scale based on a schedule

排程擴充套件表示擴充套件動作將以時間和日期的函式的形式自動執行。當您確切知道何時要增加或減少群組中例項的數量時,這一點非常有用,這完全是因為需求是按照可預測的時程而產生的。

到 EC2 控制檯,選擇左邊選單中的 Auto Scaling Groups,選擇指定的自動縮放群 ithomeASG ,按下下方的 自動調整規模(Automatic scaling) 頁籤,在這個頁籤會找到排定的動作欄,按下建立排定的動作,需入預定的時間以及需要的例項數量

在 Auto Scaling Group 中建立排定的動作
圖 3. 在 Auto Scaling Group 中建立排定的動作

需求擴充套件 Scale based on demand

Amazon EC2 Auto Scaling 支援下列擴充套件政策型別:

  1. 目標跟蹤縮放政策 Target tracking scaling policies — 基於特定度量標準的目標值增加或減少組的當前容量,預設就是使用這個縮放政策。
  2. 步驟縮放政策 Step scaling policies — 基於一組擴充套件調整來增加或減少組的當前容量,稱為步驟調整,根據警報觸發來調整縮放的大小。
  3. 簡單縮放政策 Simple scaling policies — 基於單個縮放調整增加或減少組的當前容量。

在詳細討論上述政策時我們先了解整個政策的制定過程,原則上所有政策應該都需要以下要件:

  • 目標值:比方說CPU使用率達到50%以上、請求數達到10個以上等等。
  • 動作:增加一個或是20%個實體、減少兩個實體。
  • 觸動器:監控上述的目標值並通知這是一個 Auto Scaling Group 進行動作,這是由 CloudWatch 負責。

我們以下圖為例,這是一個 Auto Scaling Group 使用的是步驟縮放政策,一開始的所需容量: 10 個例項、最少:5 個例項、最多:20 個例項,而步進調整策略為:

  1. 新增 2 個例項,當(平均 CPU 利用率為 80-100% 時)
  2. 新增 1 個例項,當(平均 CPU 利用率為 60-80% 時)
  3. 刪除 1 個例項,當(平均 CPU 利用率為 20-40% 時)
  4. 刪除 2 個例項,當(平均 CPU 利用率為 0-20% 時)

當平均 CPU 利用率超過 60% 時,並沒有立即發出 CloudWatch Alerm ,這原因在於 CloudWatch 監控標準週期是 5 分鐘,如果希望有較小的監控週期,必須要調整為詳細監控,則為 1 分鐘檢查一次。從這可以發現,並非事件發生的同時就會立刻觸動指定的政策,監控時間間格設定越小,事件發生與觸動的時間差就會越小。

當新增 1 個例項的動作發生後,同時間就有 3 個定時器被觸發,分別是冷卻時間、暖機時間、運作狀態檢查寬限期定時器。接下來每一分鐘步進調整策略 1 都會被監控到,但會被忽略,因為還在冷卻時間內。當平均 CPU 利用率超過 80% 時,步進調整策略 2 被觸發了,對冷卻時間定時器而言,因為時間還沒到,所以它忽略這個動作、而暖機時間定時器則整合了剛剛第一個政策,因為已經有新增一個了,所以就再加一個例項就可以滿足步進調整策略 2 。

步驟縮放政策練習
圖 4. 步驟縮放政策練習

冷卻時間 cooldown period: 是屬於 Auto Scaling Group,針對例項啟動或是終止都需套用這個時間,時間內忽略 CloudWatch 警告,物件是為 auto-scaling action,目的是以防止失控的擴充套件事件。如果系統的CPU使用率很高,並且您的自動縮放規則添加了一個例項,則將需要5分鐘左右的時間來完全啟動該例項並幫助減輕負載。如果沒有冷卻時間,該規則將繼續觸發,並可能在CPU指標下降之前新增4或5個例項,從而導致浪費的過度配置。或者在縮小的情況下,超調並導致配置不足。

運作狀態檢查寬限期 Health check grace period : 是屬於 Auto Scaling Group,針對例項啟動需套用這個時間,時間內忽略 CloudWatch 警告,物件是為例項。當 Amazon EC2 Auto Scaling 例項啟動時,等到 Health Check Grace Period 指定的時間到達才開始檢查例項的執行狀況。

暖機時間 Warm-up: 是屬於 scaling policies ,而只針對例項啟動時才需套用這個時間,時間內會整合 CloudWatch 警告,物件為 auto-scaling action。目的為設定例項和時加入或移除 Auto Scaling Group,執行向外擴充套件時,不會認為正在 warm-up 的例項是群組目前容量的一部分。執行向內擴充套件時,會認為正在中止的例項是群組目前容量的一部分。

AWS的定義

  • Cooldown period: the cooldown period helps to ensure that your Auto Scaling group doesn’t launch or terminate additional instances before the previous scaling activity takes effect. You can configure the length of time based on your instance warmup period or other application needs. From AWS documentation
  • Health check grace period: frequently, an Auto Scaling instance that has just come into service needs to warm up before it can pass the health check. Amazon EC2 Auto Scaling waits until the health check grace period ends before checking the health status of the instance. From AWS documentation
  • Warm-up period : allows you to control the time until a newly launched instance can contribute to the CloudWatch metrics, so when warm-up time has expired, an instance is considered part Auto Scaling group and will receive traffic. From AWS documentation

預測擴充套件 Use predictive scaling

這並不是 EC2 服務中所提供的功能,而是 AWS Auto Scaling,它可以通過結合預測擴充套件和動態擴充套件來維持最佳可用性和效能,從而擴充套件您的 Amazon EC2 容量更快。如需更多詳細資訊,請參閱 AWS Auto Scaling 使用者指南

References

  • Difference between auto scaling Cooldown period and health check grace period, https://stackoverflow.com/questions/55442279/difference-between-auto-scaling-cooldown-period-and-health-check-grace-period
  • What is the difference between AWS ASG cooldown period and the warmup period in the scaling policy?, https://stackoverflow.com/questions/58039006/what-is-the-difference-between-aws-asg-cooldown-period-and-the-warmup-period-in
  • 目標跟蹤擴充套件策略 Amazon EC2 Auto Scaling, https://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/as-scaling-target-tracking.html
  • 配置監控 Auto Scaling 例項, https://docs.aws.amazon.com/zh_tw/autoscaling/ec2/userguide/enable-as-instance-metrics.html
  • Dynamic scaling for Amazon EC2 Auto Scaling, https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html
    //docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html