Cloud Composer 环境架构

Cloud Composer 1 | Cloud Composer 2

本页面介绍了 Cloud Composer 2 环境的架构。

环境架构配置

Cloud Composer 2 环境可以具有以下架构配置:

每种配置会对环境资源的架构稍作更改。

客户和租户项目

当您创建环境时,Cloud Composer 会在租户和客户项目之间分配环境的资源。

客户项目是您在其中创建环境的 Google Cloud 项目。您可以在一个客户项目中创建多个环境。

租户项目是由 Google 管理的租户项目。租户项目可为您的环境提供统一的访问权限控制和额外一层数据安全保护。每个 Cloud Composer 环境都有自己的租户项目。

环境组件

Cloud Composer 环境由环境组件组成。

环境组件是作为环境的一部分在 Google Cloud 上运行的代管式 Airflow 基础架构的一个元素。

环境组件在环境的租户或客户项目中运行。

您的部分环境组件基于独立的 Google Cloud 产品。这些产品的配额和限制也适用于您的环境。例如,Cloud Composer 环境使用 VPC 对等互连。关于 VPC 对等互连数目上限的配额适用于您的客户项目,因此一旦您的项目达到此对等互连数上限,您将无法创建额外的环境。

环境的集群

环境的集群是环境的 Autopilot 模式 VPC 原生 Google Kubernetes Engine 集群:

  • 环境节点是环境集群中的虚拟机。

  • 环境集群中的 pod 使用其他环境组件(如 Airflow 工作器和调度器)运行容器。pod 在环境节点上运行。

  • 您的环境集群的工作负载资源会管理环境集群中的 pod 集。您的环境的许多组件以不同类型的工作负载资源的形式实现。例如,Airflow 工作器作为 Deployment 运行。除了 Deployment 之外,您的环境还具有 StatefulSet、DaemonSet 和作业工作负载类型。

默认情况下,Cloud Composer 支持节点自动升级节点自动修复,以保护您的环境的集群免受安全漏洞的影响。这些操作在您为环境指定的维护期内发生。

Airflow 调度器、触发器、工作器和 Redis 队列

Airflow 调度器控制 DAG 运行和 DAG 中各项任务的时间安排。调度器使用 Redis 队列将任务分发到 Airflow 工作器,该队列在环境集群中作为应用运行。Airflow 调度器在环境的集群中作为 Deployment 运行。

Airflow 工作器从 DAG 中获取各项任务,方法是从 Redis 队列中获取任务。Airflow 工作器在环境的集群中作为自定义资源运行。

Airflow 触发器异步监控环境中的所有推迟任务。您可以在创建更新 Cloud Composer 环境时配置触发器实例的数量。Cloud Composer 支持以下触发器配置:

  • 触发器数量:

    • 标准弹性:您最多可以运行 10 个触发器
    • 高弹性:至少 2 个触发器,最多 10 个

    您可以将触发器数量设置为零,但环境中需要至少有一个触发器实例(在高弹性环境中需要至少两个触发器实例),才能在 DAG 中使用可延期运算符。如果将触发器数量设置为零,环境的集群仍会为其运行工作负载,但 Pod 为零,因此不会产生任何费用。

  • 触发器资源分配:

    • 每个触发器的 1 vCPU 上限
    • 内存上限等于触发器 CPU 数量乘以 6.5

Redis 队列包含 DAG 中各项任务的队列。Airflow 调度器会填充队列,Airflow 工作器从中提取任务。Redis 队列在环境的集群中作为StatefulSet 应用运行,因此消息会在容器重启后保留。

Airflow Web 服务器

Airflow Web 服务器运行您的环境的 Airflow 界面。

在 Cloud Composer 2 中,Airflow Web 服务器在环境的集群中作为 Deployment 运行。

Cloud Composer 2 会根据为用户定义的用户身份和 IAM 政策绑定来提供对界面的访问权限。与 Cloud Composer 1 相比,Cloud Composer 2 使用了一种不依赖于 Identity-Aware Proxy 的机制。

Airflow 数据库

Airflow 数据库是您的环境的租户项目中运行的 Cloud SQL 实例。它托管 Airflow 元数据数据库。

为了保护敏感连接和工作流信息,Cloud Composer 只允许对环境的服务账号进行数据库访问。

环境存储桶

环境存储桶是一个 Cloud Storage 存储桶,用于存储 DAG、插件、数据依赖项和 Airflow 日志。环境存储桶位于客户项目中。

当您将 DAG 文件上传到环境存储桶中的 /dags 文件夹时,Cloud Composer 会将 DAG 同步到您的环境的工作器、调度器和网络服务器。您可以将工作流工件存储在 data/logs/ 文件夹中,并保留对数据的完全访问控制权,而无需担心大小限制。

其他环境组件

Cloud Composer 环境具有其他几个环境组件:

  • Cloud SQL Storage。存储 Airflow 数据库备份。为最大限度地降低丢失数据的可能性,Cloud Composer 每天都会对 Airflow 元数据进行备份。

    Cloud SQL Storage 在您的环境的租户项目中运行。您无法访问 Cloud SQL Storage 内容。

  • Cloud SQL 代理。将环境的其他组件连接到 Airflow 数据库。

    您的公共 IP 环境可以有一个或多个 Cloud SQL 代理实例,具体取决于流向 Airflow 数据库的流量大小。

    对于公共 IP 环境,Cloud SQL 代理会在环境的集群中作为部署运行。

    部署在环境的集群中时,Cloud SQL 代理还会授权通过应用、客户端或其他 Google Cloud 服务访问 Cloud SQL 实例。

  • Airflow 监控。向 Cloud Monitoring 报告环境指标并触发 airflow_monitoring DAG。airflow_monitoring DAG 会报告环境健康状况数据,这些数据之后会用于环境的监控信息中心内等目的。Airflow 监控在环境的集群中作为 Deployment 运行。

  • Composer 代理可执行环境操作,例如创建、更新、升级和删除环境。一般来说,此组件负责在环境中引入更改。在环境的集群中作为作业运行。

  • Airflow InitDB 可创建一个 Cloud SQL 实例和初始数据库架构。Airflow InitDB 在环境的集群中作为作业运行。

  • FluentDFluentD。从所有环境组件收集日志,并将日志上传到 Cloud Logging。在环境的集群中作为 DaemonSet 运行。

  • Pub/Sub 订阅。您的环境通过 Pub/Sub 订阅与其 GKE 服务代理进行通信。它依赖于 Pub/Sub 的默认行为来管理消息。请勿删除 .*-composer-.* Pub/Sub 主题。Pub/Sub 支持每个项目最多 10000 个主题

  • PSC 端点将 Airflow 调度器和工作器连接到带 PSC 的专用 IP 架构中的 Airflow 数据库。

  • 客户指标 Stackdriver 适配器会报告环境的指标,以便进行自动扩缩。此组件在环境的集群中作为 Deployment 运行。

  • Airflow 工作器设置控制器会根据客户指标 Stackdriver 适配器中的指标自动扩缩您的环境。此组件在环境的集群中作为 Deployment 运行。

  • Cloud Storage FUSE将环境的存储桶作为文件系统装载到 Airflow 工作器、调度器和 Web 服务器上,以便这些组件可以访问该存储桶中的数据。在环境的集群中作为 DaemonSet 运行。

公共 IP 环境架构

租户项目和客户项目中的公共 IP Cloud Composer 环境资源
图 1. 公共 IP 环境架构(点击放大)

在 Cloud Composer 2 的公共 IP 环境架构中:

  • 租户项目托管 Cloud SQL 实例和 Cloud SQL 存储空间。
  • 客户项目托管环境的所有其他组件。
  • 客户项目中的 Airflow 调度器和工作器通过客户项目中的 Cloud SQL 代理实例与 Airflow 数据库通信。

专用 IP 环境架构

租户项目和客户项目中具有 PSC Cloud Composer 环境资源的专用 IP(点击可放大)
图 2. 租户项目和客户项目中的专用 IP Cloud Composer 环境资源(点击可放大)

默认情况下,Cloud Composer 2 使用 Private Service Connect,因此您的专用 IP 环境无需使用 VPC 对等互连即可在内部进行通信。您也可以在环境中使用 VPC 对等互连而不是 Private Service Connect。这是一个非默认选项。

在专用 IP 环境架构中:

  • 租户项目托管 Cloud SQL 实例和 Cloud SQL 存储空间。
  • 客户项目托管环境的所有其他组件。
  • Airflow 调度器和工作器通过配置的 PSC 端点连接到 Airflow 数据库。

高弹性专用 IP 架构

租户项目和客户项目中的高弹性专用 IP 环境资源(点击可放大)
图 3. 租户项目和客户项目中的高弹性专用 IP Cloud Composer 环境资源(点击可放大)

弹性佳的 Cloud Composer 环境是使用内置冗余和故障切换机制的 Cloud Composer 2 环境,这些环境可以降低环境发生可用区级故障和单点故障中断的风险。

在此类专用 IP 环境中:

  • 您环境的 Cloud SQL 实例已配置为具备高可用性(属于区域实例)。在区域级实例中,配置由主实例和备用实例组成。
  • 您的环境会运行两个 Airflow 调度器和两台 Web 服务器,如果使用了触发器,则还要运行至少两个(最多共十个)触发器。这些组件对在两个单独的可用区中运行。
  • 工作器数量下限设置为两个,并且您环境的集群会在可用区之间分布工作器实例。如果发生可用区服务中断,则受影响的工作器实例将被重新安排到其他可用区。

与 Cloud Logging 和 Cloud Monitoring 集成

Cloud Composer 集成了您的 Google Cloud 项目的 Cloud Logging 和 Cloud Monitoring,因此您可以集中查看 Airflow 服务和工作流日志

Cloud Monitoring 会从 Cloud Composer 中收集并提取指标、事件和元数据,并通过信息中心和图表生成数据分析

得益于 Cloud Logging 的流式传输特性,您可以立即查看由 Airflow 调度器和工作器发出的日志,而无需等待 Airflow 日志显示在环境的 Cloud Storage 存储桶中。由于 Cloud Composer 的 Cloud Logging 日志基于 google-fluentd,因此您可以访问由 Airflow 调度器和工作器生成的所有日志。

如需限制 Google Cloud 项目中的日志数量,您可以停止所有日志提取。请勿停用 Logging。

后续步骤