高度并行的工作负载(也称为易并行工作负载)在金融、媒体和生命科学企业中很常见。对于此类并行工作负载,企业通常会部署计算节点集群。每个节点都可以在称为网格计算的配置中执行独立的处理任务。如需处理并行工作负载的数据,您可以将 Apache Beam 与 Dataflow 搭配使用。 如需详细了解 Apache Beam,请参阅 Apache Beam 编程指南。
使用 Dataflow 处理高度并行的工作负载具有诸多优势。
- 创建全代管式工作流,并在同一流水线中处理和编排数据。
- 将流水线的所有方面都用于流水线的预处理和后处理,以及任务处理。您甚至可以在流水线中使用现有的 C++ 代码。
- 使用 Dataflow 提供的内置一次性处理。
此外,Dataflow 还包括各种安全功能:
- 对流水线使用客户管理的加密密钥 (CMEK)。
- 为与 Dataflow 作业关联的网络定义防火墙规则。
- 使用 VPC 网络。
这些工作负载需要将数据分布到在多个核心上运行的函数。这种分布通常需要非常高的并发读取,然后是大量数据扇出,数据由下游系统吸收。Dataflow 的核心能力是跨资源分布批量和流式工作负载,以及管理这些资源的自动扩缩和动态工作负载再平衡功能。因此,当您使用 Dataflow 处理高度并行的工作负载时,系统会自动处理性能、可伸缩性、可用性和安全性需求。
将外部代码整合到流水线中
Apache Beam 目前可提供适用于 Java、Python 和 Go 的内置 SDK。但是,许多高度并行的工作负载使用以 C++ 编写的代码。借助 Apache Beam,您可以使用 Dataflow 和其他 Google Cloud 服务将 C++ 二进制文件(库)作为外部代码运行。通过添加 C++ 二进制文件,您可以利用全代管式服务解锁这些类型的工作负载。您还可以使用复杂的有向无环图 (DAG) 构建完整的流水线。
运行 C++ 二进制文件的同一种方法还与使用其他语言(可编译独立二进制文件)编写的代码相关。
端到端高度并行流水线
借助 Dataflow,您可以在同一流水线中执行 I/O 读取/写入处理、分析和任务输出,从而运行完整的高度并行流水线
例如,HPC 高度并行工作负载可能包含以下步骤:
从内部和外部来源提取原始数据。数据可能来自无界限或有界限来源。无界限来源主要转换为有界限来源,以适应用于任务耕作的技术。
将原始数据预处理为任务耕作组件可以使用的数据形状和编码。
使用系统将计算分发给主机,并从源检索数据,然后将结果具体化以供后分析使用。
进行后分析,以将结果转换为输出。
您可以使用 Dataflow 在一个流水线中管理所有这些步骤,同时利用 Dataflow 功能:
由于单个系统负责所有阶段,因此您不需要外部编排系统来协调多个流水线的运行。
使用数据存放区域,您无需在阶段边界之间明确具体化和取消具体化,从而提高效率。
使用更好的系统遥测,可以获得有关阶段中总字节数的信息,这有助于设计后续阶段。
使用自动扩缩功能时,如果数据位于系统中,则资源会在数据通过流水线阶段时根据数据量进行扩缩。
核心 Dataflow HPC 高度并行流水线使用新型 DAG 执行引擎。所有典型的流水线流程都可以在单个 DAG 中完成,因此可以在单个 Dataflow 流水线中完成。您可以使用 Apache Beam 生成的 DAG 来定义流水线的形状。
如果您要从任务耕作系统迁移到高度并行的工作流,则需要从任务迁移到数据。 PTransform
包含一个 DoFn
,它有一个接受数据元素的进程函数。数据点可以是任何具有一个或多个属性的对象。
通过使用 DAG 和单个流水线,您可以在整个工作流中加载系统中的所有数据。您无需将数据输出到数据库或存储空间。
与高度并行的工作流搭配使用的 Google Cloud 组件
网格计算应用需要将数据分布到在许多核心上运行的函数。这种模式通常需要高并发读取,并且通常需要下游系统处理数据的大量扇出。
Dataflow 集成了其他可接收大规模并行数据 I/O 的 Google Cloud 代管式服务:
- Pub/Sub:用于缓存和传送的宽列存储区
- Bigtable:全球事件流注入服务
- Cloud Storage:统一对象存储区
- BigQuery:PB 级数据仓库服务
这些服务一起使用,为高度并行工作负载提供极具吸引力的解决方案。
在 Google Cloud 上运行的高并行工作负载的常见架构包括:
面向 Apache Beam 的 Dataflow 运行程序。此运行程序使用来自 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 ms),因此能够处理数千个并发客户端和大量突发工作负载。这些特性使 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++)用于用户定义的代码。