關於 Dataflow HPC 高度平行工作負載

高度平行處理工作負載 (又稱「簡單平行處理」工作負載) 在金融、媒體和生命科學企業中很常見。針對這類平行處理工作負載,企業典型的作法是部署運算節點叢集。每個節點都能獨立執行處理工作,這種配置稱為網格運算。如要處理平行工作負載的資料,您可以使用 Dataflow 搭配 Apache Beam。如要進一步瞭解 Apache Beam,請參閱 Apache Beam 程式設計指南

針對高度平行工作負載使用 Dataflow 有許多好處。

  • 建立全代管工作流程,在同一管道中進行資料處理和自動化調度管理。
  • 使用單一系統處理管道的所有環節,包括前置和後續處理,以及工作處理。您甚至可以在管道中使用現有的 C++ 程式碼
  • 使用 Dataflow 提供的內建僅處理一次功能。

此外,Dataflow 還包含多項安全功能:

這些工作負載需要將資料分配給在多個核心上執行的函式。這種分配方式通常需要高度並行的讀取作業,然後由下游系統吸收大量擴散傳遞的資料。Dataflow 的核心能力是在資源之間分配批次和串流工作負載,以及管理這些資源的自動調度和動態工作再平衡。因此,當您使用 Dataflow 處理高度平行化的工作負載時,系統會自動處理效能、擴充性、可用性和安全性需求。

將外部程式碼併入管道

Apache Beam 目前內建 Java、Python 和 Go 適用的 SDK。不過,許多高度平行處理工作負載使用的程式碼是以 C++ 撰寫。您可以使用 Dataflow 和其他 Google Cloud 服務,透過 Apache Beam 將 C++ 二進位檔 (程式庫) 做為外部程式碼執行。包括 C++ 程式庫,可讓您以全代管服務釋出這類型的工作負載。您也可以使用複雜的有向非循環圖 (DAG) 建構完整的管道。

執行 C++ 二進位檔的相同方法,也適用於其他可編譯出獨立二進位檔的語言。

端對端高度平行管道

您可以在同一個管道中完成 I/O 讀取/寫入處理、分析和工作輸出,進而執行完整的高度平行管道

舉例來說,HPC 高度平行工作負載可能包含下列步驟:

  1. 從內部和外部來源擷取原始資料。資料可能來自無界或有界來源。無界限來源大多會轉換為有界限來源,以配合用於工作農場的技術。

  2. 將原始資料預先處理成工作農場元件可用的資料形狀和編碼。

  3. 使用系統將計算作業分配給主機,並從來源擷取資料,然後具體化結果以供後續分析。

  4. 進行後續分析,將結果轉換為輸出內容。

您可以透過 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。

  • BigtableBigQueryPub/Sub。這些服務同時作為資料來源及接收器使用。

下圖說明範例工作流程的整體架構。

網格運算解決方案之系統架構

您也可以使用其他儲存系統,詳情請參閱 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 物件。這些物件是不可變的平行元素集合。

下圖說明了這個流程。

使用 DAG 流程

Apache Beam SDK 可讓您定義 DAG。在 DAG 中,您可以加入使用者定義的程式碼作為函式使用。通常在 DAG 中的宣告與使用者定義程式碼所使用的語言是相同的 (Java、Python 或 Go),您也可以使用非內建的程式碼 (例如 C++) 做為使用者定義的程式碼。

後續步驟

  • 瞭解使用 Dataflow HPC 高度平行管道的最佳做法

  • 按照教學課程操作,建立使用 C++ 程式庫自訂容器的管道。