最佳化調整環境效能和成本效益

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

本頁面說明如何根據專案需求調整環境的規模和效能參數,以提升效能,並減少環境未使用的資源成本。

其他有關擴大規模和最佳化的網頁:

最佳化程序總覽

變更環境的參數可能會影響環境效能的許多方面。建議您分階段最佳化環境:

  1. 從環境預設集開始。
  2. 執行 DAG。
  3. 觀察環境的效能。
  4. 調整環境規模和效能參數,然後重複上一個步驟。

從環境預設開始

在 Google Cloud 控制台中建立環境時,您可以選取三種環境預設設定之一。這些預設設定會決定環境的初始規模和效能設定;建立環境後,您可以變更預設設定提供的所有規模和效能參數。

建議您根據下列預估值,從其中一個預設值開始:

  • 您打算在環境中部署的 DAG 總數
  • 並行 DAG 執行作業數量上限
  • 並行工作數量上限

環境的效能取決於您在環境中執行的特定 DAG 實作方式。下表列出根據平均資源消耗量計算的預估值。如果預期 DAG 會消耗更多資源,請據此調整預估值。

建議預設集 DAG 總數 並行 DAG 執行作業數量上限 並行工作數上限
50 15 18
250 60 100
1000 250 400

舉例來說,環境必須執行 40 個 DAG。所有 DAG 都必須同時執行,且各有一個有效工作。由於並行 DAG 執行次數和工作數上限超過「小型」預設值的建議估算值,因此這個環境會使用「中型」預設值。

執行 DAG

建立環境後,請將 DAG 上傳至該環境。執行 DAG 並觀察環境效能。

建議您按照反映 DAG 實際應用情況的時間表執行 DAG。舉例來說,如果您想同時執行多個 DAG,請務必在所有 DAG 同時執行時,檢查環境的效能。

觀察環境效能

本節著重於最常見的 Cloud Composer 2 容量和效能調整層面。建議您按照本指南的步驟操作,因為我們會先說明最常見的效能注意事項。

前往 Monitoring 資訊主頁

您可以在環境的監控資訊主頁中,監控環境的成效指標。

如要前往環境的監控資訊主頁,請按照下列步驟操作:

  1. 前往 Google Cloud 控制台的「Environments」頁面。

    前往「環境」

  2. 按一下環境名稱。

  3. 前往「監控」分頁。

監控排程器 CPU 和記憶體指標

Airflow 排程器的 CPU 和記憶體指標可協助您檢查排程器的效能是否為整體 Airflow 效能的瓶頸。

Ariflow 排程器圖表
圖 1: Airflow 排程器圖表 (按一下即可放大)

在 Monitoring 資訊主頁的「排程器」部分,觀察環境的 Airflow 排程器圖表:

  • 排程器 CPU 使用率總計
  • 排程器記憶體用量總計

根據觀察結果調整:

監控剖析所有 DAG 檔案的總時間長度

排程器會先剖析 DAG,再排定 DAG 執行作業。如果 DAG 需要很長時間才能剖析,就會耗用排程器的容量,並可能降低 DAG 執行的效能。

DAG 剖析總時間圖表
圖 2. DAG 剖析時間圖表 (按一下即可放大)

在監控資訊主頁的「DAG Statistics」(DAG 統計資料)部分,查看 DAG 剖析總時間的圖表。

如果超過 10 秒左右,排程器可能會因 DAG 剖析而過載,無法有效執行 DAG。Airflow 的預設 DAG 剖析頻率為 30 秒;如果 DAG 剖析時間超過這個門檻,剖析週期就會開始重疊,進而耗盡排程器的容量。

根據觀察結果,你可能需要採取下列行動:

監控工作站 Pod 撤銷次數

當環境叢集中的特定 Pod 達到資源限制時,可能會遭到驅逐。

工作站 Pod 撤銷次數圖表
圖 3. 顯示已撤銷工作站 Pod 數的圖表 (按一下可放大)

如果 Airflow 工作站 Pod 遭到逐出,該 Pod 上執行的所有工作例項都會中斷,並在稍後由 Airflow 標示為失敗。

工作站 Pod 遭到驅逐的大部分問題,都是因為工作站記憶體不足。

在「監控」資訊主頁的「工作站」部分,觀察環境的「工作站 Pod 驅逐」圖表。

「工作站記憶體總用量」圖表會顯示環境的整體情況。即使環境層級的記憶體用量正常,單一工作站仍可能超出記憶體限制。

根據觀察結果,你可能需要採取下列行動:

  • 增加工作站可用的記憶體
  • 減少工作人員並行數。這樣一來,單一工作站一次處理的工作就會減少。這樣一來,每項個別工作都能獲得更多記憶體或儲存空間。變更工作站並行數量時,您可能也想增加工作站數量上限。這樣一來,環境一次可處理的任務數量就不會改變。舉例來說,如果將工作站並行數量從 12 減少至 6,您可能需要將工作站數量上限加倍。

監控活躍工作站

環境中的工作站數量會根據佇列中的工作自動調度資源。

活躍工作站和已排入佇列工作圖表
圖 4. 活躍工作站和佇列工作圖 (按一下可放大)

在「監控」資訊主頁的「工作站」部分,觀察運作中工作站數量和佇列中工作數的圖表:

  • 活躍的工作站數量
  • Airflow 工作

根據觀察結果調整:

  • 如果環境經常達到工作站數量上限,且 Celery 佇列中的工作數量持續偏高,建議增加工作站數量上限
  • 如果工作排程間隔時間過長,但環境並未擴充至最大工作站數量,則可能是 Airflow 設定限制了執行作業,導致 Cloud Composer 機制無法擴充環境。由於 Cloud Composer 2 環境會根據 Celery 佇列中的工作數量調整規模,請將 Airflow 設為不要節流進入佇列的工作:

    • 提高工作站並行程度。工作站並行處理數量的設定值必須大於預期並行任務數量的上限,除以環境中的工作站數量上限。
    • 提高 DAG 並行數:如果單一 DAG 平行執行大量工作,可能會達到每個 DAG 的執行中工作執行個體數量上限。
    • 提高每個 DAG 的有效執行數上限:如果您並行執行同一個 DAG 多次,可能會導致 Airflow 達到每個 DAG 的有效執行數上限,進而節流執行作業。

監控工作站的 CPU 和記憶體用量

監控環境中所有工作站的 CPU 和記憶體總用量,判斷 Airflow 工作站是否適當運用環境資源。

工作站 CPU 和記憶體圖表
圖 5. 工作站 CPU 和記憶體圖表 (按一下可放大)

在「Monitoring」資訊主頁的「Workers」部分,觀察 Airflow 工作站的 CPU 和記憶體用量圖表:

  • 工作站 CPU 使用率總計
  • 工作站記憶體總用量

這些圖表代表匯總的資源用量;即使匯總檢視畫面顯示有備用容量,個別工作者仍可能達到容量上限。

根據觀察結果調整:

監控執行中和已排入佇列的工作

您可以監控排隊和執行中的工作數量,檢查排程程序的效率。

顯示執行中和已排入佇列工作的圖表
圖 6. 顯示執行中和已加入佇列工作的圖表 (按一下可放大)

在監控資訊主頁的「工作站」部分,觀察環境的「Airflow 工作」圖表。

佇列中的工作正在等待工作站執行。如果環境中有排入佇列的工作,可能表示環境中的工作站正忙於執行其他工作。

環境中一律會出現佇列,尤其是在處理尖峰期間。不過,如果觀察到大量工作排入佇列,或圖表呈現成長趨勢,則可能表示工作人員沒有足夠的容量來處理工作,或是 Airflow 正在限制工作執行。

如果執行中的工作數量也達到上限,通常會觀察到大量工作排入佇列。

如要解決這兩個問題,請按照下列步驟操作:

監控資料庫 CPU 和記憶體用量

Airflow 資料庫效能問題可能會導致整體 DAG 執行問題。資料庫磁碟用量通常不是需要擔心的問題,因為系統會視需要自動擴充儲存空間。

資料庫 CPU 和記憶體圖表
圖 7. 資料庫 CPU 和記憶體圖表 (按一下可放大)

在「Monitoring」資訊主頁的「SQL Database」部分,觀察 Airflow 資料庫的 CPU 和記憶體用量圖表:

  • 資料庫 CPU 使用率
  • 資料庫記憶體用量

如果資料庫 CPU 使用率在總時間的幾成以上都超過 80%,表示資料庫已過載,需要擴充。

資料庫大小設定是由環境的環境大小屬性控管。如要調高或調低資料庫規模,請將環境大小變更為不同層級 (小型、中型或大型)。環境越大,環境費用就越高。

監控工作排程延遲時間

如果工作之間的延遲時間超過預期 (例如 20 秒以上),可能表示環境無法處理 DAG 執行作業產生的工作負載。

工作延遲圖表 (Airflow UI)
圖 8. 工作延遲圖表 (點選可放大),Airflow UI

您可以在環境的 Airflow 使用者介面中,查看工作排程延遲時間圖表。

在這個範例中,延遲時間 (2.5 和 3.5 秒) 都在可接受的範圍內,但如果延遲時間明顯較長,可能表示:

監控網路伺服器 CPU 和記憶體

Airflow 網路伺服器效能會影響 Airflow UI。網頁伺服器通常不會過載。如果發生這種情況,Airflow UI 的效能可能會降低,但不會影響 DAG 執行的效能。

網路伺服器 CPU 和記憶體圖表
圖 9. 網路伺服器 CPU 和記憶體圖表 (按一下可放大)

在 Monitoring 資訊主頁的「Web server」(網路伺服器) 專區中,觀察 Airflow 網路伺服器的圖表:

  • 網路伺服器 CPU 使用率
  • 網路伺服器記憶體用量

根據你的觀察結果:

調整環境的規模和效能參數

變更排程器數量

調整排程器數量可提升排程器容量,並改善 Airflow 排程的韌性。

增加排程器數量會增加 Airflow 資料庫的流量。在大多數情況下,建議使用兩個 Airflow 排程器。只有在需要特別考量的罕見情況下,才需要使用三個排程器。設定超過三個排程器通常會導致環境效能降低。

如需加快排程速度:

範例:

主控台

請按照「調整排程器數量」一文的步驟操作,為環境設定所需的排程器數量。

gcloud

請按照「調整排程器數量」一文的步驟操作,為環境設定所需的排程器數量。

以下範例將排程器數量設為 2:

gcloud composer environments update example-environment \
    --scheduler-count=2

Terraform

請按照「調整排程器數量」一文的步驟操作,為環境設定所需的排程器數量。

以下範例將排程器數量設為 2:

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

  config {
    workloads_config {
      scheduler {
        count = 2
      }
    }
  }
}

變更排程器的 CPU 和記憶體

CPU 和記憶體參數適用於環境中的每個排程器。舉例來說,如果環境有兩個排程器,總容量就是指定 CPU 和記憶體數量的兩倍。

主控台

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,為排程器設定 CPU 和記憶體。

gcloud

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,為排程器設定 CPU 和記憶體。

以下範例會變更排程器的 CPU 和記憶體。您可以視需求只指定 CPU 或記憶體屬性。

gcloud composer environments update example-environment \
  --scheduler-cpu=0.5 \
  --scheduler-memory=3.75

Terraform

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,為排程器設定 CPU 和記憶體。

以下範例會變更排程器的 CPU 和記憶體。您可以視需要省略 CPU 或記憶體屬性。

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

  config {
    workloads_config {
      scheduler {
        cpu = "0.5"
        memory_gb = "3.75"
      }
    }
  }
}

變更工作站數量上限

調高工作站數量上限後,環境就能視需要自動擴充至更多工作站。

減少工作站數量上限可降低環境的最大容量,但也有助於減少環境成本。

範例:

主控台

請按照「調整工作站數量下限和上限」一文中的步驟,為環境設定所需的工作站數量上限。

gcloud

請按照「調整工作站數量下限和上限」一文中的步驟,為環境設定所需的工作站數量上限。

以下範例將工作站數量上限設為六個:

gcloud composer environments update example-environment \
    --max-workers=6

Terraform

請按照「調整工作站數量下限和上限」一文中的步驟,為環境設定所需的工作站數量上限。

以下範例將排程器數量上限設為六:

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

  config {
    workloads_config {
      worker {
        max_count = "6"
      }
    }
  }
}

變更 worker CPU 和記憶體

  • 如果工作站用量圖表顯示記憶體使用率非常低,減少工作站記憶體可能會有幫助。

  • 增加工作站記憶體可讓工作站同時處理更多工作,或處理耗用大量記憶體的工作。這或許能解決工作站 Pod 遭逐出的問題。

  • 如果工作站 CPU 使用率圖表顯示 CPU 資源過度分配,減少工作站 CPU 數量可能會有幫助。

  • 增加工作站 CPU 可讓工作站同時處理更多工作,在某些情況下,還能縮短處理這些工作所需的時間。

變更工作站 CPU 或記憶體會重新啟動工作站,這可能會影響正在執行的工作。建議您在沒有 DAG 執行的情況下執行這項操作。

CPU 和記憶體參數適用於環境中的每個工作站。舉例來說,如果環境有四個工作站,總容量就是指定 CPU 和記憶體數量的四倍。

主控台

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,為工作站設定 CPU 和記憶體。

gcloud

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,設定工作站的 CPU 和記憶體。

下列範例會變更工作站的 CPU 和記憶體。如需省略 CPU 或記憶體屬性,請略過。

gcloud composer environments update example-environment \
  --worker-memory=3.75 \
  --worker-cpu=2

Terraform

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,為工作站設定 CPU 和記憶體。

下列範例會變更工作站的 CPU 和記憶體。如有需要,您可以省略 CPU 或記憶體參數。

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

  config {
    workloads_config {
      worker {
        cpu = "2"
        memory_gb = "3.75"
      }
    }
  }
}

變更網路伺服器 CPU 和記憶體

如果網路伺服器使用率圖表顯示伺服器持續未充分利用,減少網路伺服器 CPU 或記憶體可能會有幫助。

變更網路伺服器參數會重新啟動網路伺服器,導致網路伺服器暫時停機。建議您在一般使用時間以外進行變更。

主控台

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,設定網頁伺服器的 CPU 和記憶體。

gcloud

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,設定網頁伺服器的 CPU 和記憶體。

以下範例會變更網路伺服器的 CPU 和記憶體。您可以視需要省略 CPU 或記憶體屬性。

gcloud composer environments update example-environment \
    --web-server-cpu=2 \
    --web-server-memory=3.75

Terraform

按照「調整工作站、排程器和網頁伺服器的規模和效能參數」中的步驟,設定網頁伺服器的 CPU 和記憶體。

以下範例會變更網路伺服器的 CPU 和記憶體。您可以視需要省略 CPU 或記憶體屬性。

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

  config {
    workloads_config {
      web_server {
        cpu = "2"
        memory_gb = "3.75"
      }
    }
  }
}

變更環境規模

變更環境大小會修改 Cloud Composer 後端元件的容量,例如 Airflow 資料庫和 Airflow 佇列。

  • 如果資料庫用量指標顯示資源使用率偏低,請考慮將環境大小改為較小的大小 (例如從「大型」改為「中型」,或從「中型」改為「小型」)。
  • 如果發現 Airflow 資料庫用量偏高,請考慮增加環境大小。

主控台

按照「調整環境大小」一文的步驟操作,設定環境大小。

gcloud

按照「調整環境大小」一文的步驟操作,設定環境大小。

以下範例會將環境大小變更為「中」。

gcloud composer environments update example-environment \
    --environment-size=medium

Terraform

按照「調整環境大小」一文的步驟操作,設定環境大小。

以下範例會將環境大小變更為「中」。

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

  config {
    environment_size = "medium"
  }
}

變更 DAG 目錄列出間隔

增加 DAG 目錄列出間隔,可減少與環境值區中新 DAG 探索相關的排程器負載。

  • 如果您不常部署新的 DAG,請考慮增加這個間隔。
  • 如要讓 Airflow 更快對新部署的 DAG 檔案做出反應,請縮短這個間隔。

如要變更這項參數,請覆寫下列 Airflow 設定選項:

區段 附註
scheduler dag_dir_list_interval 刊登間隔的新值 預設值為 120 秒。

變更 DAG 檔案剖析間隔

增加 DAG 檔案剖析間隔,可減少與 DAG 檔案包中持續剖析 DAG 相關的排程器負載。

如果 DAG 數量較多,但變更頻率不高,或一般而言排程器負載較高,建議增加這個間隔。

如要變更這項參數,請覆寫下列 Airflow 設定選項:

區段 附註
scheduler min_file_process_interval DAG 剖析間隔的新值 預設值為 30 秒。

工作站並行

並行效能和環境的自動擴充能力與下列兩項設定有關:

  • Airflow 工作站數量下限
  • [celery]worker_concurrency 參數

Cloud Composer 提供的預設值適用於大多數用途,但您的環境可能需要自訂調整。

工作人員並行效能考量事項

[celery]worker_concurrency 參數會定義單一工作站可從工作佇列中擷取的工作數量。工作執行速度取決於多項因素,例如工作站 CPU、記憶體和工作類型本身。

自動調度工作站資源

Cloud Composer 會監控工作佇列,並產生額外工作站來處理任何等待中的工作。將 [celery]worker_concurrency 設為較高的值,表示每個工作站可以處理大量工作,因此在某些情況下,佇列可能永遠不會填滿,導致自動調度資源永遠不會觸發。

舉例來說,在有兩個 Airflow 工作站的 Cloud Composer 環境中,如果 [celery]worker_concurrency 設為 100,且佇列中有 200 項工作,則每個工作站會挑選 100 項工作。這會讓佇列保持空白,且不會觸發自動調度資源。如果這些工作需要很長時間才能完成,可能會導致效能問題。

但如果工作很小且執行速度很快,[celery]worker_concurrency 設定中的高值可能會導致過度積極的擴充。舉例來說,如果該環境的佇列中有 300 項工作,Cloud Composer 就會開始建立新的工作人員。但如果前 200 項工作在新的工作人員準備就緒前完成執行,現有工作人員可以接手。最終結果是自動調度資源會建立新的工作站,但沒有任何工作可供執行。

如要針對特殊情況調整 [celery]worker_concurrency,請根據工作執行時間和佇列數量的尖峰時段:

  • 如果工作需要較長時間才能完成,工作人員不應能完全清空佇列。
  • 如要處理較小型的快速工作,請增加 Airflow 工作站數量下限,避免過度積極地調度資源。

同步處理工作記錄檔

Airflow 工作站具有可將工作執行記錄同步至 Cloud Storage 值區的元件。單一工作站執行的並行工作數量過多,會導致同步要求數量過多。這可能會導致工作人員過載,進而引發效能問題。

如果記錄同步處理流量過高,導致效能問題,請降低 [celery]worker_concurrency 值,並調整 Airflow 工作站的數量下限。

變更工作站並行

變更這個參數會調整單一工作站可同時執行的工作數量。

舉例來說,CPU 為 0.5 的工作站通常可處理 6 項並行工作;如果環境有三個這類工作站,則最多可處理 18 項並行工作。

  • 如果佇列中有等待執行的工作,且工作站的 CPU 和記憶體使用率偏低,請增加這個參數。

  • 如果系統正在逐出 Pod,請減少這個參數,這樣單一工作站嘗試處理的任務數量就會減少。或者,您也可以增加工作站記憶體

根據預設,工作站並行數會根據工作站可容納的輕量型並行工作執行個體數量設定。也就是說,這個值取決於工作站資源限制。工作站並行值與環境中的工作站數量無關。

如要變更這項參數,請覆寫下列 Airflow 設定選項:

區段
celery worker_concurrency 工作人員並行的新值

變更 DAG 並行

DAG 並行數是指每個 DAG 中允許同時執行的工作執行個體數量上限。如果 DAG 執行大量並行工作,請增加此值。如果這項設定的值較低,排程器會延遲將更多工作放入佇列,這也會降低環境自動調整大小的效率。

如要變更這項參數,請覆寫下列 Airflow 設定選項:

區段 附註
core max_active_tasks_per_dag DAG 並行的新值 預設值為 16

提高每個 DAG 的有效執行數上限

這項屬性會定義每個 DAG 的有效 DAG 執行數上限。如果必須同時多次執行相同 DAG,例如使用不同的輸入引數,排程器可透過這個屬性平行啟動這類執行作業。

如要變更這項參數,請覆寫下列 Airflow 設定選項:

區段 附註
core max_active_runs_per_dag 每個 DAG 的有效執行數上限新值 預設值為 25

後續步驟