針對高擴充性應用程式使用自動調度資源功能

本教學課程說明如何使用自動調度資源功能,自動調整應用程式託管的 VM 執行個體數量,以讓應用程式適應不同的流量變化。

如要使用自動調度資源功能,請將應用程式在代管執行個體群組中託管。代管執行個體群組是指執行相同應用程式且可做為單一實體代管的執行個體集合。當代管執行個體群組啟用自動調度資源功能後,執行個體群組中的 VM 數量就會根據您為自動調度資源政策指定的目標值自動增加 (擴充) 或減少 (縮減)。

本教學課程包含以下主題的詳細步驟:在代管執行個體群組中啟動網路應用程式、設定自動調度資源、設定網路存取權,以及透過模擬負載尖峰和低點來觀察自動調度資源。本教學課程大約需要 20 分鐘才能完成,但實際情況需視您使用這些功能的經驗而定。

應用程式架構

應用程式包含以下 Compute Engine 元件:

啟動網路應用程式

本教學課程使用儲存在 GitHub 上的網頁應用程式。如要進一步瞭解應用程式的實作方式,請參閱 GitHub 上的 GoogleCloudPlatform/python-docs-samples 存放區。

在執行個體範本中加入開機指令碼,就能在代管執行個體群組中的每個 VM 上啟動網路應用程式。如要允許 HTTP 流量傳入網路應用程式,請建立防火牆規則。

建立防火牆規則

建立防火牆規則以允許 HTTP 流量傳入網路應用程式:

  1. 前往 Google Cloud 控制台的「Firewalls」(防火牆) 頁面。

    前往「Firewalls」(防火牆)

  2. 按一下「Create firewall rule」(建立防火牆規則)

  3. 在「Name」(名稱) 下方輸入 default-allow-http

  4. 將「Network」(網路) 設為 default

  5. 在「Targets」(目標) 中選取Specified target tags

  6. 在「Target Tags」(目標標記) 下方輸入 http-server

  7. 將「Source filter」(來源篩選器) 設為 IPv4 ranges

  8. 在「來源 IPv4 範圍」下方,輸入 0.0.0.0/0

    允許存取所有 IP 位址。

  9. 在「Protocols and ports」(通訊協定和通訊埠) 下選取「Specified protocols and ports」(指定的通訊協定和通訊埠)。 然後選取「TCP」TCP並輸入 80允許存取 HTTP 流量

  10. 點選「建立」

建立執行個體範本

建立在啟動時開啟示範網路應用程式的執行個體範本:

  1. 前往 Google Cloud 控制台的「Instance Templates」(執行個體範本) 頁面。

    前往「Instance templates」(執行個體範本) 頁面

  2. 點選「建立執行個體範本」

  3. 在「Name」(名稱) 下方輸入 autoscaling-web-app-template

  4. 在「Machine configuration」(機器設定) 下,將「Machine type」(機器類型) 設為 e2-standard-2

  5. 在「Firewall」(防火牆) 底下,勾選 [Allow HTTP traffic] (允許 HTTP 流量) 核取方塊。這會將 http-server 網路標記套用至由此範本建立的每個執行個體。

  6. 展開「進階選項」部分,即可查看進階設定。

  7. 展開「管理」部分。

  8. 在「Automation」(自動化) 專區中,輸入以下開機指令碼:

    sudo apt update && sudo apt -y install git gunicorn3 python3-pip
    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/compute/managed-instances/demo
    sudo pip3 install -r requirements.txt
    sudo gunicorn3 --bind 0.0.0.0:80 app:app --daemon
    

    此指令碼會使每個 VM 在啟動期間執行網路應用程式。

  9. 點選「建立」

建立代管執行個體群組

建立地區執行個體群組以開始執行網路應用程式:

  1. 前往 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面。

    前往執行個體群組

  2. 按一下 [Create Instance Group] (建立執行個體群組) 以建立新的執行個體群組。

  3. 選取「New managed instance group (stateless)」(新增代管執行個體群組 (無狀態))

  4. 在「Name」(名稱) 中輸入 autoscaling-web-app-group

  5. 在「Instance template」(執行個體範本) 中選取 autoscaling-web-app-template

  6. 在「Location」(位置) 中選取「Multiple zones」(多可用區)

  7. 在「Region」(區域) 中,選取「us-central1」

  8. 在「區域」部分,從下拉式清單中選取下列區域:

    • us-central1-b
    • us-central1-c
    • us-central1-f
  9. 為執行個體群組設定自動調度資源功能:

    1. 針對「Autoscaling mode」(自動調度資源模式),選取「On: add and remove instances to the group」(開啟:在群組中新增和移除執行個體)
    2. 將「Minimum number of instances」(執行個體數量下限) 設為 3

    3. 將「Maximum number of instances」(執行個體數量上限) 設為 6

    4. 將「Initialization period」(初始化期間) 設為 120 秒。

    5. 在「自動調度資源指標」下方,選取「CPU 使用率」做為指標類型。如要進一步瞭解自動調度資源指標,請參閱「自動調度資源政策」。

    6. 將「Target CPU utilization」(目標 CPU 使用率) 設為 60

    7. 按一下 [完成]

  10. 在「Autohealing」(自動修復) 下方,從「Health check」(健康狀態檢查) 下拉式清單中選取「No health check」(不執行健康狀態檢查)

  11. 點按「Create」(建立)。系統即會將您重新導向回「Instance groups」(執行個體群組) 頁面。

  12. 如要驗證您的執行個體是否正在執行:

    1. 在控制台的「Instance groups」(執行個體群組) 頁面中,按一下 Google Cloud autoscaling-web-app-group 即可查看該群組中的執行個體。
    2. 在「External IP」(外部 IP) 底下,點選用來連線至該執行個體的 IP 位址。 新的瀏覽器分頁隨即開啟,並顯示示範網頁應用程式:

      示範網路應用程式,其中列出執行個體的相關資訊及動作按鈕。

      完成後,關閉示範網頁應用程式的瀏覽器分頁。

觀察自動調度資源功能

如要進一步瞭解自動調度資源行為,請參閱瞭解自動調度資源決策相關文章。

監控自動調度資源

您建立的執行個體群組會使用以 CPU 使用率為基礎的自動調度資源政策。這意味著自動配置器會視需求擴充或縮減群組,以維持 60% 的目標 CPU 使用率。

如要監控執行個體群組的大小和 CPU 使用率,請使用 Google Cloud 控制台的自動調度資源圖表

  1. autoscaling-web-app-group 執行個體群組的「Instance groups」(執行個體群組) 頁面上,按一下 [Monitoring] (監控) 分頁標籤。
  2. 您可以透過「群組大小」圖表監控自動調度資源。圖表會顯示「Instances」(執行個體),代表群組中 VM 執行個體數量隨時間的變化。
  3. 選用:如要監控自動調度資源的容量與使用率,請參閱「Autoscaler utilization (CPU)」(自動調度資源使用率 (CPU)) 圖表。圖表會顯示「使用率」,這是群組中 VM 執行個體的 CPU 使用率總和;以及「容量」,這是群組的累計目標 CPU 使用率 (目標 CPU 使用率乘以 VM 執行個體數量)。

    自動調度資源功能會盡可能透過調整「Instances」(執行個體) 數量,試著讓「Capacity」(容量) 符合「Utilization」(使用率)

請將這個視窗保持開啟。

模擬向外擴充

如果執行個體群組的平均 CPU 使用率明顯高於目標值,系統就會進行向外擴充。在向外擴充期間,自動配置器會逐漸增加執行個體群組的大小,直到 CPU 使用率降低至目標 CPU 使用率值;或者直到執行個體群組大小等於執行個體數量上限 (設定為 6) 為止。

如要觸發系統向外擴充,請增加執行個體的 CPU 使用率:

  1. 在 Google Cloud 控制台中開啟 Cloud Shell

    開啟 Cloud Shell

    Cloud Shell 會在 Google Cloud 控制台底部開啟。工作階段可能要幾秒鐘的時間才能初始化。

  2. 針對專案 ID 建立本機 bash 變數:

    export PROJECT_ID=[PROJECT_ID]
    

    其中 PROJECT_ID 是您目前專案的專案 ID,會顯示在 Cloud Shell 的每一新行中:

    user@cloudshell:~ ([PROJECT_ID])$
    
  3. 執行以下 bash 指令碼。這個指令碼會導致示範網路應用程式執行個體的負載增加,進而提升 CPU 使用率。 幾分鐘後,CPU 使用率就會超過目標值,促使自動調度資源功能擴充執行個體群組的大小。

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating high load for instance $NAME"
      curl -q -s "http://$IP/startLoad" >/dev/null --retry 2
    done
    
  4. 在 Google Cloud 控制台中開啟「Monitoring」(監控) 分頁。

    幾分鐘後,「Monitoring」(監控) 分頁就會顯示 CPU 的「Utilization」(使用率) 上升,這將觸發自動調度資源功能透過增加「Instances」(執行個體) 數量來提升「Capacity」(容量)

    您可能也會注意到「Overview」(總覽) 分頁下方現在列有 6 個執行個體。

請將兩個視窗保持開啟。

模擬向內縮減

如果執行個體群組的平均 CPU 使用率明顯低於目標值,系統就會進行縮減。在縮減期間,自動配置器會逐漸縮小執行個體群組的大小,直到 CPU 使用率上升至目標 CPU 使用率;或者直到執行個體群組大小等於執行個體數量下限 (設定為 3) 為止。

如要觸發系統縮減資源,請降低執行個體的 CPU 使用率:

  1. 執行以下 bash 指令碼。這個指令碼會導致示範網路應用程式執行個體負載減少,從而降低 CPU 使用率。 幾分鐘後,CPU 使用率就會降至目標值以下,促使自動調度資源功能縮小執行個體群組的大小。

    export MACHINES=$(gcloud --project=$PROJECT_ID compute instances list --format="csv(name,networkInterfaces[0].accessConfigs[0].natIP)" | grep "autoscaling-web-app-group")
    for i in $MACHINES;
    do
      NAME=$(echo "$i" | cut -f1 -d,)
      IP=$(echo "$i" | cut -f2 -d,)
      echo "Simulating low load for instance $NAME"
      curl -q -s "http://$IP/stopLoad" >/dev/null --retry 2
    done
    
  2. 在 Google Cloud 控制台中開啟「Monitoring」(監控) 分頁。

    幾分鐘後,「Monitoring」(監控) 分頁即會顯示 CPU 的「Utilization」(使用率) 下降。經過穩定期後,系統會確認負載確實持續降低,自動調度資源功能就會透過減少執行個體數量來縮減「Capacity」(容量)

    您可能也會注意到「Overview」(總覽) 分頁下方只列有 3 個執行個體。

完成後,請關閉兩個視窗。