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


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

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

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

目標

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

費用

In this document, you use the following billable components of Google Cloud:

  • Compute Engine

To generate a cost estimate based on your projected usage, use the pricing calculator. New Google Cloud users might be eligible for a free trial.

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

應用程式架構

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

啟動網路應用程式

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

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

建立防火牆規則

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

  1. 在 Google Cloud 控制台中,前往「防火牆」頁面。

    前往「Firewalls」(防火牆)

  2. 點按「建立防火牆規則」

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

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

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

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

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

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

    允許所有 IP 位址傳出的存取要求。

  9. 在「Protocols and ports」(通訊協定和通訊埠) 下方,選取「Specified protocols and ports」(指定的通訊協定和通訊埠)。然後選取「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」(執行個體群組) 頁面。

    前往「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. 將「初始化期間」設為 120 秒。

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

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

    7. 按一下 [完成]

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

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

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

    1. 在 Google Cloud 控制台的「Instance groups」(執行個體群組) 頁面中,按一下 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. 選用:如要監控自動調度資源的容量與使用率,請參閱「自動配置器使用率 (CPU)」圖表。圖表顯示「Utilization」(使用率),這是群組中 VM 執行個體的 CPU 總使用率;以及「Capacity」(容量),這是群組的累計目標 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」(使用率) 上升,這將觸發自動調度資源功能透過增加執行個體數量來提升容量

    您可能也會注意到「總覽」分頁下方現在列有 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」(使用率) 下降。系統在經過穩定期後,確認負載確實持續降低,自動調度資源功能就會透過縮減執行個體數量來縮減容量

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

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

清除所用資源

完成教學課程後,您可以清除所建立的資源,這樣資源就不會占用配額並產生費用。下列各節將說明如何刪除或關閉這些資源。

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

刪除專案

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

刪除特定資源

刪除執行個體群組

  1. In the Google Cloud console, go to the Instance groups page.

    Go to Instance groups

  2. Select the checkbox for your autoscaling-web-app-group instance group.
  3. To delete the instance group, click Delete.

刪除執行個體範本

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

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

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

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

刪除防火牆規則

  1. 在 Google Cloud 控制台中,前往「防火牆規則」頁面。

    前往「防火牆規則」

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

  3. 按一下 「刪除」。在新開啟的視窗中,按一下「刪除」確認刪除作業。

後續步驟