高度平行處理工作負載 (又稱「簡單平行處理」工作負載) 在金融、媒體和生命科學企業中很常見。針對這類平行處理工作負載,企業典型的作法是部署運算節點叢集。每個節點都能獨立執行處理工作,這種配置稱為網格運算。如要處理平行工作負載的資料,您可以使用 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 服務,透過 Apache Beam 將 C++ 二進位檔 (程式庫) 做為外部程式碼執行。包括 C++ 程式庫,可讓您以全代管服務釋出這類型的工作負載。您也可以使用複雜的有向非循環圖 (DAG) 建構完整的管道。
執行 C++ 二進位檔的相同方法,也適用於其他可編譯出獨立二進位檔的語言。
端對端高度平行管道
您可以在同一個管道中完成 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 執行器。此執行器採取 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++) 做為使用者定義的程式碼。