Dataflow 成本最佳化最佳做法

本文將說明如何運用最佳做法,盡可能提高 Dataflow 工作的成效並降低費用。本文說明影響費用的因素,並提供監控及管理這些費用的技巧。

如要進一步瞭解 Dataflow 作業的費用計算方式,請參閱 Dataflow 定價

有幾個因素會對工作成本造成重大影響:

  • 執行階段設定
  • 管道效能
  • 管道處理量規定

下列各節詳細說明如何監控作業、影響作業費用的因素,以及如何提升管道效率的建議。

定義服務等級目標

開始最佳化之前,請先定義管道的服務等級目標 (SLO),尤其是輸送量和延遲時間。這些規定有助於您考量成本和其他因素之間的取捨。

  • 如果管道需要低端對端擷取延遲時間,管道費用可能會較高。
  • 如果需要處理延遲抵達的資料,整體管道費用可能會較高。
  • 如果串流管道有需要處理的資料尖峰,管道可能需要額外容量,這會增加成本。

監控工作

如要判斷如何最佳化工作,首先需要瞭解工作行為。使用 Dataflow 監控工具觀察管道的執行情況。然後運用這些資訊提升成效和效率。

費用監控

請使用下列技術預測及監控費用。

  • 在實際工作環境中執行管道之前,請先對資料子集執行一或多個較小的工作。對於許多管道,這項技術可以提供費用估算。
  • 您可以使用 Dataflow 監控介面的「費用」頁面,監控工作的預估費用。許多因素 (如合約折扣) 可能會造成預估費用無法反映出實際的工作費用,但這項資訊可做為成本最佳化的良好基準。詳情請參閱「費用監控」。
  • 將 Cloud Billing 資料匯出至 BigQuery,並對帳單匯出資料表執行費用分析。Cloud Billing 匯出功能可讓您全天將詳細的 Google Cloud 帳單資料自動匯出至 BigQuery 資料集。帳單資料包括用量、費用估算和價格資料。
  • 為避免產生預期外的費用,請在 Dataflow 工作超過您定義的門檻時,建立監控警告。詳情請參閱「針對 Dataflow 管道使用 Cloud Monitoring」一文。

工作監控

監控作業並找出可提升管道效率的領域。

  • 使用 Dataflow 工作監控介面找出管道中的問題。監控介面會顯示每個管道的「作業圖」和「執行詳細資料」。這兩項工具都能協助您瞭解管道,並找出速度緩慢的階段、停滯的階段,或實際時間過長的步驟。
  • 使用 Metrics Explorer 查看詳細的 Dataflow 工作指標。您可以使用自訂指標擷取成效資料。Distribution 指標特別適合用於收集成效資料。
  • 如果是 CPU 密集型管道,請使用 Cloud Profiler 找出管道程式碼中耗用最多資源的部分。
  • 使用資料取樣找出資料問題。資料取樣功能可讓您觀察資料在 Dataflow 管道每個步驟中的狀態。這項資訊會顯示執行中或已完成工作的實際輸入和輸出內容,有助於偵錯管道問題。
  • 自訂專案監控資訊主頁,顯示可能耗費大量資源的工作。詳情請參閱「自訂 Dataflow 監控資訊主頁」。

不建議在高用量管道中記錄每個元素的處理指標,因為記錄作業有限制,過度記錄可能會降低工作效能。

最佳化執行階段設定

下列執行階段設定可能會影響費用:

  • 您執行的是串流工作還是批次工作
  • 您用來執行工作的服務,例如 Streaming Engine 或 FlexRS
  • 工作站 VM 中的機器類型、磁碟大小和 GPU 數量
  • 自動調度資源模式
  • 工作站的初始數量和數量上限
  • 串流模式 (「僅一次」模式或「至少一次」模式)

本節說明可進行的潛在變更,以最佳化工作。如要判斷這些建議是否適合您的工作負載,請考量管道設計和需求。並非所有建議都適合所有管道,或對所有管道都有幫助。

進行任何大規模變更前,請先在小型管道上測試變更,這些管道會使用部分資料。詳情請參閱「大型批次管道最佳做法」一文中的「針對大型作業執行小型實驗」。

工作地點

大多數 Dataflow 工作都會與其他服務互動,例如資料儲存庫和訊息傳遞系統。請考慮這些位置。

  • 在與工作所用資源相同的區域中執行工作。
  • 建立 Cloud Storage 值區,在與工作相同的區域中儲存暫存和臨時工作檔案。詳情請參閱 gcpTempLocationtemp_location pipeline 選項

調整機器類型

對工作站 VM 進行下列調整,可能有助於提高成本效益。

  • 使用所需的最小機器類型執行工作。根據管道需求視需要調整機器類型。舉例來說,如果串流工作使用 CPU 密集型管道,有時可以從預設值變更機器類型,藉此提升效能。詳情請參閱機器類型
  • 如要處理須耗用大量記憶體或運算資源的工作負載,請使用適當的機器類型。詳情請參閱各 VM 系列的 CoreMark 分數
  • 設定工作站的初始數量。工作擴充時,必須將工作重新分配給新的 VM。如果您知道工作需要多少工作站,可以設定工作站的初始數量,避免這筆費用。如要設定工作站的初始數量,請使用 numWorkersnum_workers 管道選項
  • 設定工作站數量上限。設定這個參數的值,可能有助於限制工作總費用。首次測試管道時,請先設定相對較低的上限。接著調高值,直到足以執行實際工作負載為止。設定上限前,請先考量管道 SLO。詳情請參閱「自動水平調度資源」。
  • 使用右側調整,自訂特定管道步驟的資源需求。
  • 部分管道使用 GPU 的效果較好。詳情請參閱「搭配 Dataflow 使用 GPU」。透過適當的配置,您可以為管道的特定步驟設定 GPU。
  • 請確認您有足夠的網路頻寬,可存取工作站 VM 的資料,特別是需要存取內部部署資料時。

調整批次工作的最佳設定

本節提供批次作業執行階段設定的最佳化建議。如果是批次工作,工作階段會依序執行,這可能會影響效能和費用。

使用彈性資源排程

如果批次工作對時間沒有嚴格要求,建議使用彈性資源排程 (FlexRS)。FlexRS 會找出啟動工作的最佳時機,然後搭配使用先占 VM 執行個體和標準 VM,藉此減少批次處理費用。先占 VM 的價格比標準 VM 低得多,因此可降低總成本。透過結合使用先占 VM 和標準 VM,即使 Compute Engine 先占先占 VM,FlexRS 也能確保管道持續運作。

避免執行非常小的工作

盡量避免執行處理少量資料的工作。如有可能,請在較大的資料集上執行較少的工作。啟動及停止工作站 VM 會產生費用,因此在更多資料上執行較少作業,可以提高效率。

確認已啟用 Dataflow Shuffle。 批次工作預設會使用 Dataflow Shuffle。

調整自動調度資源設定

根據預設,批次工作會使用自動調度資源功能。對於某些工作 (例如短期執行的工作),不需要自動調度資源。如果認為自動調度資源功能對管道沒有幫助,請關閉這項功能。詳情請參閱「自動水平調度資源」。

您也可以使用動態執行緒調度,讓 Dataflow 根據 CPU 使用率調整執行緒數量。或者,如果您知道這項作業的最佳執行緒數量,可以透過 numberOfWorkerHarnessThreadsnumber_of_worker_harness_threads pipeline 選項,明確設定每個工作站的執行緒數量。

停止長時間執行的工作

如果工作超過預先決定的執行時間,系統會自動停止。如果您大約知道工作需要多久才能執行完畢,請使用 max_workflow_runtime_walltime_seconds service 選項,在工作執行時間超出預期時自動停止。

為串流工作調整最佳設定

本節提供最佳化串流作業執行階段設定的建議。

使用 Streaming Engine

Streaming Engine 會將管道執行作業從工作站 VM 移至 Dataflow 服務後端,以提高效率。建議您為串流工作使用 Streaming Engine。

考慮使用「至少傳送一次」模式

Dataflow 支援兩種串流工作模式:僅處理一次模式和至少處理一次模式。如果工作負載可容許重複記錄,則「至少一次」模式可大幅降低工作費用。啟用「至少一次」模式前,請評估管道是否需要精確處理記錄一次。詳情請參閱「設定管道串流模式」。

選擇計費模式

Dataflow 串流作業的承諾使用折扣 (CUD) 方案提供折扣價,只要承諾持續使用一定量的 Dataflow 計算資源一年以上,即可享有折扣。如果您在串流工作上,至少一年內會支出可預測的最低金額,即可承諾使用 Dataflow 計算容量,並享有 Dataflow CUD。使用 CUD,您可能可以降低 Dataflow 工作費用。

你也可以考慮使用以資源為準的計費方式。採用資源用量計費時,系統會以 Streaming Engine 運算單元為單位,計算工作耗用的 Streaming Engine 資源。系統會針對工作站 CPU、工作站記憶體和 Streaming Engine 計算單元向您收費。

調整自動調度資源設定

使用自動調度資源提示調整自動調度資源設定。詳情請參閱「調整串流管道的自動水平調度資源」。如果串流工作使用 Streaming Engine,您可以更新自動調整設定,不必停止或取代工作。詳情請參閱「In-flight job option update」。

如果認為管道無法從自動調度資源功能獲益,請關閉這項功能。詳情請參閱「自動水平調度資源」。

如果您知道作業的最佳執行緒數量,請使用 numberOfWorkerHarnessThreadsnumber_of_worker_harness_threads pipeline 選項,明確設定每個工作站的執行緒數量。

停止長時間執行的工作

如果是串流工作,Dataflow 會無限期重試失敗的作業項目。工作未終止。不過,工作可能會暫緩,直到問題解決為止。建立監控政策,偵測管道停滯的跡象,例如系統延遲時間增加和資料更新間隔縮短。在管道程式碼中導入錯誤記錄功能,協助找出重複失敗的工作項目。

管道效能

執行速度較快的管道可能費用較低。下列因素可能會影響管道成效:

  • 工作可用的平行處理量
  • 管道中使用的轉換、I/O 連接器和編碼器效率
  • 資料位置

如要提升管道效能,第一步是瞭解處理模型:

  • 瞭解 Apache Beam 模型Apache Beam 執行模型
  • 進一步瞭解管道生命週期,包括 Dataflow 如何管理平行化,以及使用的最佳化策略。Dataflow 工作會使用多個工作站 VM,而每個工作站會執行多個執行緒。PCollection 中的元素組合會分配到每個工作執行緒。

編寫管道程式碼時,請遵循下列最佳做法:

記錄

記錄時請遵循下列最佳做法:

測試

測試管道有許多好處,包括協助升級 SDK、重構管道及進行程式碼審查。許多最佳化作業 (例如重新設計耗用大量 CPU 的自訂轉換) 都可以在本機測試,不需要在 Dataflow 上執行工作。

使用符合工作負載的真實測試資料,測試大規模管道,包括批次管道的元素總數、串流管道每秒的元素數、元素大小和鍵數。以兩種模式測試管道:處於穩定狀態,以及處理大量待處理項目,模擬當機復原。

如要進一步瞭解如何建立單元測試、整合測試和端對端測試,請參閱「測試管道」。如需測試範例,請參閱 dataflow-ordered-processing GitHub 存放區。

後續步驟