高度平行工作負載也稱為「簡單平行處理」工作負載,在金融、媒體及生命科學方面的企業中很常見。針對這類平行處理工作負載,企業典型的作法是部署運算節點叢集。每個節點都能執行獨立的處理工作,這種配置稱為網格運算。如要處理平行工作負載的資料,您可以使用 Dataflow 搭配 Apache Beam。如要進一步瞭解 Apache Beam,請參閱 Apache Beam 程式設計指南。
針對高度平行工作負載使用 Dataflow 有許多優點。
- 建立全代管工作流程,在同一管道中進行資料處理和自動化調度管理。
- 針對管道的所有層面使用單一系統,包括前置和後續處理,以及工作處理。您甚至可以在管道中使用現有的 C++ 程式碼。
- 使用 Dataflow 提供的內建「僅需處理一次」功能。
此外,Dataflow 還包含多項安全功能:
- 在管道中使用客戶自行管理的加密金鑰 (CMEK)。
- 為與 Dataflow 工作相關聯的網路定義防火牆規則。
- 使用 VPC 網路。
這些工作負載需要將資料分配給在多個核心上執行的函式。這種發布作業通常需要高度同步的資料讀取行為,且經常伴隨著大量由下游系統所吸收的擴散傳遞資料。Dataflow 的核心能力是將批次和串流工作負載分配到各項資源,並管理這些資源的自動調度和動態工作再平衡。因此,當您使用 Dataflow 處理高度平行工作負載時,系統會自動處理效能、擴充性、可用性和安全性需求。
將外部程式碼併入管道
Apache Beam 內建 Java、Python 和 Go 適用的 SDK。不過,許多高度平行處理工作負載使用的程式碼是以 C++ 撰寫。您可以使用 Dataflow 和其他 Google Cloud Platform 服務,透過 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 Platform 元件
網格運算應用程式需將資料分散到在許多核心上執行的函式中。這樣的模式通常需要高度同步的資料讀取行為,且經常伴隨著大量由下游系統所吸收的擴散傳遞資料。
Dataflow 與其他 Google Cloud Platform 代管服務整合,可吸收大規模的平行化資料 I/O:
- Pub/Sub:用於快取及服務的寬欄儲存空間
- Bigtable:全球事件串流擷取服務
- Cloud Storage:整合式物件儲存空間
- BigQuery:PB 級資料倉儲服務
搭配使用這些服務,可為高度平行工作負載提供絕佳解決方案。
在 Google Cloud Platform 上執行高度平行工作負載的常見架構包括:
Apache Beam 適用的 Dataflow 執行器。此執行器採取 DAG 衍生的處理流程,對網格節點發布工作。單個 Apache Beam DAG 可讓您定義複雜的多階段管道,其中平行管道的階段可使用側向輸入或彙整使其返回。
Cloud Storage。 此服務提供暫存 C++ 二進位檔的位置。需要儲存大型檔案 (例如各種媒體應用實例) 時,這些檔案也會存放在 Cloud Storage。
下圖說明範例工作流程的整體架構。
您也可以使用其他儲存系統,詳情請參閱 Apache Beam 文件中的管道輸入/輸出頁所列出的儲存系統及串流資源。
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++),做為使用者定義的程式碼。