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

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,請務必在所有 DAG 同時執行時檢查環境的效能。

觀察環境效能

本節將著重於最常見的 Cloud Composer 2 容量和效能調整方面。建議您逐步遵循這份指南,因為我們會先介紹最常見的成效考量。

前往「監控」資訊主頁

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

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

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

    前往「環境」

  2. 按一下環境名稱。

  3. 前往「監控」分頁。

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

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

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

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

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

根據觀察結果進行調整:

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

排程器會在排定 DAG 執行作業前剖析 DAG。如果 DAG 剖析作業耗時過長,會耗用排程器的容量,並可能降低 DAG 執行效能。

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

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

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

根據您的觀察結果,您可能需要:

監控工作站 Pod 撤銷次數

當環境叢集中的特定 Pod 達到資源限制時,就可能會發生 Pod 淘汰。

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

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

工作站資源的淘汰問題多半是因為工作站記憶體不足。

在「監控」資訊主頁的「Workers」部分,觀察環境的Worker Pods 淘汰圖表。

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

根據您的觀察結果,您可能需要:

  • 增加工作站可用的記憶體
  • 減少 worker 並行處理作業。如此一來,單一工作站一次只能處理較少的工作。這可為每項個別工作提供更多記憶體或儲存空間。如果您變更工作站並行數量,也許也要增加工作站數量上限。這樣一來,環境可同時處理的工作數量就會維持不變。舉例來說,如果您將工作站並行數量從 12 減少為 6,可能需要將工作站的最大數量加倍。

監控運作中的 worker

環境中的工作站數量會根據排入佇列的工作自動調整。

正在執行的工作站和排入佇列的工作圖表
圖 4. 活躍的工作站和排入佇列的工作圖表 (按一下可放大)

在「Monitoring」資訊主頁的「Workers」部分,查看運作中 worker 數量和佇列中工作數量的圖表:

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

根據觀察結果進行調整:

  • 如果環境經常達到工作站數量上限,且 Celery 佇列中的工作數量持續偏高,建議您增加工作站數量上限
  • 如果工作間排程延遲時間過長,但環境未擴充至工作站的最大數量,則可能是 Airflow 設定會限制執行作業,並防止 Cloud Composer 機制擴充環境。由於 Cloud Composer 2 環境會根據 Celery 佇列中的工作數量進行調整,請設定 Airflow,以便在進入佇列時不限制工作:

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

監控 worker 的 CPU 和記憶體用量

監控環境中所有工作站的 CPU 和記憶體用量匯總資料,判斷 Airflow 工作站是否正確使用環境資源。

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

在「監控」資訊主頁的「Workers」部分,查看 Airflow worker 的 CPU 和記憶體用量圖表:

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

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

根據觀察結果進行調整:

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

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

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

在「監控」資訊主頁的「Workers」專區中,觀察環境的 Airflow 工作圖表。

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

在某些環境中,總會出現一些排隊情形,尤其是在處理高峰期間。不過,如果您發現佇列中的工作數量很多,或圖表顯示趨勢持續上升,這可能表示 worker 處理工作的容量不足,或是 Airflow 限制了工作執行作業。

當執行中的工作數量也達到上限時,通常會發現佇列中的工作數量相當高。

如要解決這兩個問題:

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

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

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

在「監控」資訊主頁的「SQL 資料庫」部分,查看 Airflow 資料庫的 CPU 和記憶體用量圖表:

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

如果資料庫 CPU 使用率超過 80%,且占總時間的百分比超過幾個百分點,表示資料庫超載,需要調整。

資料庫大小設定是由環境的環境大小屬性控管。如要縮放資料庫,請將環境大小變更為其他等級 (小型、中型或大型)。增加環境大小會導致環境費用增加。

監控工作排程延遲時間

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

工作延遲時間圖表 (Airflow UI)
圖 8. 任務延遲時間圖表,Airflow UI (按一下可放大)

您可以在環境的 Airflow UI 中查看工作排程延遲時間圖表。

在這個範例中,延遲時間 (2.5 和 3.5 秒) 都遠低於可接受的限制,但延遲時間明顯偏高,可能表示:

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

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

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

在「監控」資訊主頁的「網路伺服器」專區中,查看 Airflow 網路伺服器的圖表:

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

根據你的觀察結果:

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

變更排程器數量

調整排程器數量可提升 Airflow 排程器的容量和彈性。

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

如需更快的排程功能:

範例:

主控台

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

gcloud

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

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

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

Terraform

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

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

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

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

變更排程器的 CPU 和記憶體

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

主控台

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

gcloud

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

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

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

Terraform

請按照「調整 worker、排程器和網路伺服器的規模和效能參數」中的步驟,為排程器設定 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 和記憶體

  • 如果 worker 用量圖表顯示記憶體使用率極低,建議減少 worker 記憶體。

  • 增加 worker 記憶體可讓 worker 同時處理更多工作,或處理需要大量記憶體的工作。這可能會解決工作站 pod 遭到逐出的問題。

  • 如果 worker CPU 使用率圖表顯示 CPU 資源過度配置,建議減少 worker CPU。

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

變更 worker 的 CPU 或記憶體會重新啟動 worker,這可能會影響執行中的任務。建議在沒有 DAG 執行時執行這項操作。

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

主控台

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

gcloud

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

以下範例會變更 worker 的 CPU 和記憶體。如有需要,您可以省略 CPU 或記憶體屬性。

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

Terraform

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

以下範例會變更 worker 的 CPU 和記憶體。您可以省略 CPU 或記憶體參數 (如有需要)。

resource "google_composer_environment" "example-environment" {

  # Other environment parameters

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

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

如果網路伺服器使用率圖表顯示網路伺服器持續未充分使用,建議您減少網路伺服器 CPU 或記憶體。

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

主控台

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

gcloud

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

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

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

Terraform

請按照「調整 worker、排程器和網路伺服器的規模和效能參數」中的步驟,為網路伺服器設定 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 參數會定義單一工作站可從工作佇列中擷取的工作數量。工作執行速度取決於多項因素,例如 worker CPU、記憶體和工作類型本身。

自動調度工作站資源

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

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

不過,如果工作規模較小且執行速度快,[celery]worker_concurrency 設定值過高可能會導致過度擴充。舉例來說,如果該環境的佇列中有 300 個工作,Cloud Composer 就會開始建立新的 worker。不過,如果前 200 項工作在新的 worker 就緒前完成執行,現有的 worker 可以接手處理。最終結果是,自動調整大小會建立新的 worker,但沒有任何工作可供執行。

針對特殊情況調整 [celery]worker_concurrency 時,應根據尖峰工作執行時間和佇列編號:

  • 對於需要較長時間才能完成的工作,工作站不應能夠完全清空佇列。
  • 如果是較快、較小的工作,請增加 Airflow 工作站數量下限,避免過度調度。

同步處理工作記錄檔

Airflow 工作站提供的元件可將工作執行記錄同步處理至 Cloud Storage 值區。單一 worker 執行大量並行工作時,會產生大量同步處理要求。這可能會使 worker 超載,導致效能問題。

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

變更 worker 並行作業

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

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

  • 如果佇列中存在等待的作業,且工作站同時使用 CPU 和記憶體的百分比偏低,請提高這個參數。

  • 在 Pod 遭到淘汰時,請降低這個參數;這樣可減少單一工作站嘗試處理的任務數量。您也可以增加 worker 記憶體

根據預設,工作站並行處理作業的設定會根據工作站可容納的輕量並行工作執行個體數量。也就是說,其值取決於 worker 資源限制。工作站並行處理作業的值不受環境中工作站數量影響。

如要變更這個參數,請覆寫下列 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

後續步驟