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

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

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

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

目標

  • 在代管執行個體群組上啟動示範網路應用程式。
  • 透過模擬流量高峰和低點來觀察自動調度資源的效果。

費用

本教學課程使用 GCP 計費元件,包括:

  • Compute Engine

您可以使用 Pricing Calculator 來依據預測用量估算費用。 初次使用 GCP 的使用者可能符合申請免費試用的資格。

事前準備

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 在 GCP Console 的專案選擇器頁面中,選取或建立 GCP 專案。

    前往專案選取器頁面

  3. 請確認您已啟用 Google Cloud Platform 專案的計費功能。瞭解如何確認您已啟用專案的計費功能

應用程式架構

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

啟動網頁應用程式

本教學課程使用儲存在 GitHub 上的網頁應用程式。如要進一步瞭解應用程式的實作方式,請參閱 Google Cloud Platform GitHub 存放區中的範例。

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

建立防火牆規則

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

  1. 前往 GCP Console 的「Firewalls」(防火牆) 頁面。
    前往「Firewalls」(防火牆) 頁面
  2. 按一下 [建立防火牆規則]
  3. 在「Name」(名稱) 下方輸入 default-allow-http
  4. 將「Network」(網路) 設為 default
  5. 在「Targets」(目標) 中選取Specified target tags
  6. 在「Target Tags」(目標標記) 下方輸入 http-server
  7. 將「Source filter」(來源篩選器) 設為 IP ranges
  8. 在「Source IP ranges」(來源 IP 範圍) 下方輸入 0.0.0.0/0,允許存取所有 IP 位址。
  9. 在「Ports and protocols」(通訊協定和通訊埠) 下選取 [Specified protocols and ports] (指定的通訊協定和通訊埠)。
    然後選取 [tcp] 並輸入 80允許存取 HTTP 流量
  10. 按一下 [Create] (建立)。

建立執行個體範本

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

  1. 前往 GCP Console 的「Instance templates」(執行個體範本) 頁面。
    前往「Instance templates」(執行個體範本) 頁面
  2. 點選 [建立執行個體範本]
  3. 在「Name」(名稱) 下方輸入 autoscaling-web-app-template
  4. 在「Machine configuration」(機器設定) 下,將「Machine type」(機器類型) 設為 n1-standard-1
  5. 在「Boot disk」(開機磁碟) 下,將「Image」(映像檔) 設為 Debian GNU/Linux 9 (stretch)
  6. 在「Firewall」(防火牆) 底下,勾選 [Allow HTTP traffic] (允許 HTTP 流量) 核取方塊。這會將 http-server 網路標記套用至由此範本建立的每個執行個體。
  7. 分別按一下 [Management] (管理)、[security] (安全性)、[disks] (磁碟)、[networking] (網路)、[sole tenancy] (單獨租用) 即可顯示相關進階設定,畫面上應該會出現數個分頁。
  8. 在「Management」(管理) 分頁中,找到「Automation」(自動) 並輸入下列開機指令碼:

    sudo apt-get update && sudo apt-get install git gunicorn3 python3-pip -y
    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
    

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

  9. 按一下 [Create] (建立)。

建立代管執行個體群組

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

  1. 前往 GCP 主控台的「執行個體群組」頁面。
    前往「Instance groups」(執行個體群組) 頁面
  2. 按一下 [Create Instance Group] (建立執行個體群組) 以建立新的執行個體群組。
  3. 在「Name」(名稱) 下方輸入 autoscaling-web-app-group
  4. 在「Location」(位置) 下,選取 [Multiple zones] (多區域)。

  5. 在「Region」(地區) 下,選取 [us-central1]。

  6. 按一下 [Configure zones] (設定區域) 下拉式選單,即可查看「Zones」(區域)。 選取下列區域:

    • us-central1-b
    • us-central1-c
    • us-central1-f
  7. 在「Instance template」(執行個體範本) 下,選取 autoscaling-web-app-template

  8. 為執行個體群組設定自動調度資源功能:

    1. 在「自動調度資源」底下,選取 [開啟]。
    2. 將「Autoscaling policy」(自動調度資源政策) 設為 [CPU usage] (CPU 使用率)。如要進一步瞭解其他自動調度資源政策,請參閱自動調度資源政策和目標使用率一節。

    3. 將「Target CPU usage」(目標 CPU 使用率) 設為 60%。

    4. 將「Minimum number of instances」(執行個體數量下限) 設為 3

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

    6. 將「Cool down period」(等待期) 設定為 120 秒。

  9. 在「Health check」(健康狀態檢查) 下方,選取 [No health check] (不執行健康狀態檢查)。

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

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

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

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

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

觀察自動調度資源功能

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

監控自動調度資源

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

如要監控執行個體群組的大小和平均 CPU 使用率,請使用 GCP Console 的自動調度資源圖表

  1. autoscaling-web-app-group 執行個體群組的「Instance groups」(執行個體群組) 頁面上,按一下 [Monitoring] (監控) 分頁標籤。
  2. 如要監控 CPU 使用率和自動調度資源,請從左側下拉式選單中選擇 [Autoscaled size] (自動配置大小),然後從右側下拉式選單中選擇 [cpu]。

    系統會顯示兩張圖表:

    • 頂部圖表顯示「Size」(大小),這是執行個體群組中的執行個體數量。
    • 底部圖表顯示「Utilization」(使用率),這是執行個體群組的平均 CPU 使用率;而「Capacity」(容量) 則代表執行個體群組的累計目標 CPU 使用率。

    自動調度資源功能會盡可能透過調整「Size」(大小),試著讓「Capacity」(容量) 符合「Utilization」(使用率)。

請將這個視窗保持開啟。

模擬向上擴充 (向外擴充)

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

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

  1. 使用 GCP Console 的 Cloud Shell 開啟終端機。

    開啟 Cloud Shell

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

  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. 在 GCP Console 中開啟「Monitoring」(監控) 分頁。

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

    監控分頁顯示 CPU 使用率已增加。不久之後,群組大小從 3 個執行個體增加到 6 個執行個體

    您可能也會注意到「Members」(成員) 分頁下方現在列有 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. 在 GCP Console 中開啟「Monitoring」(監控) 分頁。

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

    監控分頁顯示 CPU 使用率已降低。約 10 分鐘後,群組大小從 6 個執行個體縮減到 3 個執行個體。

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

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

清除所用資源

完成自動調度資源的教學課程後,您可以清除在 GCP 上建立的資源,這樣資源就不會占用配額,您日後也無須為其付費。下列各節將說明如何刪除或停用這些資源。

如果您為本教學課程特地建立了專案,請刪除這整個專案。 不過,專案如有您想保留的資源,可以只刪除您在本教學課程中建立的資源。

刪除專案

  1. 前往 GCP Console 中的「Manage resources」(管理資源) 頁面。

    前往「Manage resources」(管理資源) 頁面

  2. 在專案清單中選取您要刪除的專案,然後按一下「Delete」(刪除) 圖示
  3. 在對話方塊中輸入專案 ID,然後按一下 [Shut down] (關閉) 以刪除專案。

刪除特定資源

刪除執行個體群組

  1. 前往 GCP Console 的「Instance groups」(執行個體群組) 頁面。

    前往「Instance groups」(執行個體群組) 頁面

  2. 勾選autoscaling-web-app-group執行個體群組的核取方塊。
  3. 按一下 [Delete] (刪除) ,藉此刪除執行個體群組。

刪除執行個體範本

  1. 前往 GCP Console 的「Instance Templates」(執行個體範本) 頁面。

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

  2. 按一下 autoscaling-web-app-template 旁邊的核取方塊。

  3. 按一下頁面頂端的「Delete」(刪除) 圖示 。在新開啟的視窗中,按一下 [Delete] (刪除) 以確認刪除作業。

刪除防火牆規則

  1. 前往 GCP Console 的「Firewall Rules」(防火牆規則) 頁面。

    前往「Firewall rules」(防火牆規則) 頁面

  2. 找到名為 default-allow-http 的防火牆規則,然後勾選旁邊的核取方塊。

  3. 按一下頁面頂端的「刪除」圖示 。在新開啟的視窗中,按一下 [Delete] (刪除) 以確認刪除作業。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件