高度平行工作負載也稱為「簡單平行處理」工作負載,常見於金融、媒體和生命科學企業。對於這類平行工作負載,企業通常會部署運算節點叢集。每個節點都可以執行獨立的處理工作,這種設定稱為網格運算。如要處理平行工作負載的資料,可以使用 Apache Beam 和 Dataflow。如要進一步瞭解 Apache Beam,請參閱「Apache Beam 程式設計指南」。
使用 Dataflow 處理高度平行工作負載有許多優點。
- 建立全代管工作流程,在同一管道中進行資料處理和自動化調度管理。
- 使用單一系統處理管道的所有環節,包括前置和後製處理,以及任務處理。您甚至可以在管道中使用現有的 C++ 程式碼。
- 使用 Dataflow 提供的內建僅一次處理作業。
此外,Dataflow 還包含各種安全功能:
- 在管道中使用客戶自行管理的加密金鑰 (CMEK)。
- 為與 Dataflow 工作相關聯的網路定義防火牆規則。
- 使用 虛擬私有雲網路。
這些工作負載需要將資料分配給在多個核心執行的函式。這類發布作業通常需要極高的並行讀取量,然後再將大量資料擴散傳遞功能,供下游系統吸收。Dataflow 的核心能力是將批次和串流工作負載分配到各項資源,並管理這些資源的自動調度和動態工作重新平衡。因此,當您使用 Dataflow 處理高度平行工作負載時,系統會自動處理效能、擴充性、可用性和安全性需求。
將外部程式碼併入管道
Apache Beam 內建 Java、Python 和 Go 適用的 SDK。不過,許多高度平行工作負載都會使用以 C++ 編寫的程式碼。您可以透過 Dataflow 和其他 Google Cloud 服務,使用 Apache Beam 將 C++ 二進位檔 (程式庫) 做為外部程式碼執行。納入 C++ 二進位檔後,您就能使用全代管服務,解鎖這些類型的工作負載。您也可以使用精密的有向無環圖 (DAG) 建構完整的管道。
執行 C++ 二進位檔的相同方法,也適用於以其他語言編寫的程式碼,您可以在其中編譯獨立的二進位檔。
端對端高度平行管道
您可以在同一個管道中,使用 Dataflow 執行 I/O 讀寫處理、分析和工作輸出。這樣一來,您就能執行完整的高度平行管道。
舉例來說,HPC 高度平行工作負載可能包含下列步驟:
從內部和外部來源匯入原始資料。資料可能來自無界或有界來源。無界來源大多會轉換為有界來源,以配合用於工作農場的技術。
將原始資料預先處理為工作農場元件可用的資料形狀和編碼。
使用系統將計算作業分配給主機,並從來源擷取資料,然後具體化結果以供後續分析。
進行後續分析,將結果轉換為輸出內容。
您可以透過 Dataflow 在單一管道中管理所有這些步驟,同時運用 Dataflow 功能:
由於單一系統負責所有階段,因此您不需要外部自動化調度管理系統,即可協調多個管道的執行作業。
有了資料區域性,您就不需要在階段界線之間明確具體化和非具體化,進而提高效率。
透過更完善的系統內遙測技術,您可以取得階段中的總位元組數資訊,有助於設計後續階段。
啟用自動調度資源功能後,當資料進入系統時,資源會根據資料量進行調度,並隨著資料在管道階段中移動而調整。
核心 Dataflow HPC 高度平行管道使用新式 DAG 執行引擎。所有典型的管道程序都可以在單一 DAG 中完成,因此也屬於單一 Dataflow 管道。您可以使用 Apache Beam 產生的 DAG 定義管道形狀。
如果您要從工作農場系統遷移至高度平行的工作流程,就必須從工作轉移至資料。PTransform 包含 DoFn,其中具有可接收資料元素的處理函式。資料點可以是具有一或多個屬性的任何物件。
使用 DAG 和單一管道,即可在整個工作流程中載入系統內的所有資料。您不需要將資料輸出至資料庫或儲存空間。
Google Cloud 搭配高度平行工作流程使用的元件
網格運算應用程式需將資料分散到在許多核心上執行的函式中。這種模式通常需要高並行讀取,且通常會接續由下游系統吸收大量資料。
Dataflow 與其他 Google Cloud 受管理服務 整合,可吸收大規模的平行化資料 I/O:
- Pub/Sub:全域事件串流擷取服務
- Bigtable:用於快取和服務的寬欄儲存空間
- Cloud Storage:統一物件儲存庫
- BigQuery:PB 級資料倉儲服務
搭配使用這些服務,可為高度平行工作負載提供極具吸引力的解決方案。
在Google Cloud 上執行高度平行工作負載的常見架構包括:
Apache Beam 適用的 Dataflow Runner。這個執行器會將工作分配給格線節點,並使用衍生自 DAG 的處理流程。您可以在單一 Apache Beam DAG 中定義複雜的多級式管道,並使用側邊輸入或聯結,將平行管道階段重新組合在一起。
Cloud Storage。 這項服務提供 C++ 二進位檔的暫存位置。需要儲存大型檔案時 (例如許多媒體用途),這些檔案也會儲存在 Cloud Storage 中。
下圖為範例工作流程的概略架構。
您也可以使用其他儲存系統。詳情請參閱 Apache Beam 說明文件管道 I/O 頁面中的儲存系統和串流來源清單。
Apache Beam 的 Dataflow 執行器
使用 Dataflow 在串流和批次模式中轉換及充實資料。Dataflow 以 Apache Beam 為基礎。
Cloud Storage
Cloud Storage 是整合式物件儲存空間,涵蓋即時資料服務、資料分析、機器學習 (ML) 和資料封存。對於 Dataflow 的高度平行工作負載,Cloud Storage 可提供 C++ 二進位檔的存取權。在某些用途中,Cloud Storage 也會提供處理階段所需的資料位置。
如要處理網格運算所需的高爆量負載,您必須瞭解 Cloud Storage 的效能特徵。如要進一步瞭解 Cloud Storage 資料服務效能,請參閱 Cloud Storage 說明文件中的「要求比率和存取權分配指南」。
Bigtable
Bigtable 是高效能的 NoSQL 資料庫服務,適合大規模的分析和作業工作負載。Bigtable 是 Dataflow 的互補服務。Bigtable 的主要特性是讀取和寫入作業的延遲時間極短 (第 90 個百分位數為 6 毫秒),因此可處理數千個並行用戶端和大量突發工作負載。這些功能讓 Bigtable 成為 Dataflow 處理階段 DoFn 函式中的理想接收器和資料來源。
BigQuery
BigQuery 是一套速度飛快、經濟實惠且全代管的企業資料倉儲系統,適用於大規模的資料分析作業。格線結果通常用於分析,可讓您對格線的資料輸出執行大規模匯總。
Pub/Sub
Pub/Sub 是可擴充的非同步訊息服務,會分離產生訊息的服務與處理訊息的服務。您可以使用 Pub/Sub 進行串流分析和資料整合管道,擷取及發布資料。無論是做為服務整合的訊息導向中介軟體,或是做為平行處理工作的佇列,都同樣有效。
Dataflow DAG
您可以使用 Apache Beam SDK 建構具表現力的 DAG,進而建立串流或批次多級式管道。資料移動作業由執行器處理,資料則以 PCollection 物件表示,這些物件是不可變的平行元素集合。
下圖說明了這個流程。
您可以使用 Apache Beam SDK 定義 DAG。在 DAG 中,您可以將使用者定義的程式碼納入函式。一般來說,DAG 宣告和使用者定義的程式碼會使用相同的程式設計語言 (Java、Python 或 Go)。您也可以使用非內建的程式碼 (例如 C++),做為使用者定義的程式碼。