关于云计算:使用Amazon-CDK部署基于Amazon-Fargate的高可用易扩展的Airflow集群

8次阅读

共计 4963 个字符,预计需要花费 13 分钟才能阅读完成。

前言

Apache Airflow(以下简称为 Airflow) 是一项由 Airbnb 在 2014 年推出的开源我的项目,其目标是为了治理日益简单的数据管理工具、脚本和剖析工具,提供一个构建批处理工作流的计划。Airflow 是一种可扩大的分布式工作流调度零碎,容许将工作流建模为有向无环图(DAGs),通过这种形式简化数据管道中各个解决步骤的创立、编排和监控。Airflow 被广泛应用于机器学习、数据分析 / 解决以及各类须要流程化的场景。

在 2020 年初的时候,有一篇 blog 分析了 Airflow 架构,并给出了在亚马逊云科技上部署 Airflow 的倡议。也正因为 Airflow 在机器学习,数据分析等畛域用户泛滥,为了满足这部分用户的须要,亚马逊云科技在 2020 年 11 底推出了托管的 Apache Airflow 服务 Amazon Managed Workflows for Apache airflow (以下简称为 Amazon MWAA)。

https://aws.amazon.com/cn/blo…

目前 Amazon MWAA 曾经在亚马逊云科技寰球大部分区域可用,如果要在尚未公布的区域应用 Airflow,或者有定制化部署 Airflow 的需要,能够应用自建部署的形式。然而,部署 Airflow 并不是一件简略的事件,如何做好高可用,易扩大,如何保障平安,以及缩小运维难度等有很多细节。本文以在亚马逊云科技中国区部署自建 Airflow 为例,提出了一个参考架构,并提供了一套 Amazon CDK 的参考实现,让应用 Amazon CDK 的用户通过数行代码就能够将整套计划部署到云上。

架构考量

Airflow 体系架构概述

如下图所示,Airflow 次要组成部分为:

  • Webserver:为用户提供界面用来治理,调度编排工作;
  • Scheduler:解决触发预约的工作流,并将工作提交给执行器运行;
  • Worker:负责解决运行工作;
  • DAG Directory: 用来寄存用户定义的 DAG 文件;
  • Metadata Database: 用来存储集群的元数据;

用户将 DAG 文件上传到 DAG Directory,登陆到 Webserver,能够治理,调度编排工作。用户的操作被写入 Metadata Database,Metadata Database 记录着 DAG 中的工作以及后盾对应的状态,Scheduler 从 Metadata Database 读取数据,查看每个工作的状态,并将任务调度给 Worker,Worker 执行工作,更新 Metadata Database 中的状态信息。

Airflow On Amazon Web Services 架构概述

Airflow 在亚马逊云科技上进行部署时:

  • Webserver/Scheduler/Worker 三个组件,能够部署到 Amazon Fargate 上,充分利用无服务器架构的劣势,缩小保护工作量;
  • DAT Directory 应用 Amazon S3,用户将 DAG 文件上传到 Amazon S3,webserver/scheduler 将 DAG 文件同步到集群;
  • Metadata Database 应用托管的数据库服务 Amazon RDS,进步可用率,缩小保护工作量。

整体架构图如下所示:

如下为具体的设计考量:

网络层

  • 应用三层经典架构;
  • Airflow Fargate 集群位于 Private subnet,Airflow 拜访 Amazon Public ECR Repository 通过 Amazon NAT Gateway–> Amazon Internet Gateway 拜访,拜访 Amazon ECS Control Plane,Amazon CloudWatch,Amazon SecretsManager 则通过 Amazon Interface Endpoint 走内网,拜访 Amazon S3 通过 Amazon Gateway Endpoint 走内网;
  • Amazon ElasticCache 和 Amazon RDS 位于 Private Subnet,通过 Amazon Security Group 的限度,只对 Amazon Fargate 集群凋谢。

存储层

  • 数据库抉择应用 Amazon RDS for Postressql,保障服务高可用,升高运维工作量;
  • 内存数据库抉择应用 Amazon Elastic for Redis,作为缓存;
  • DAG Directory 应用 Amazon S3,利用 Amazon S3 的持久性和便利性,用户将 DAG 文件上传到 Amazon S3,Amazon Fargate 定时同步 DAG 文件。

计算层

  • 计算层抉择 Amazon ECS on Fargate,您无需预置和治理服务器,而且能够为 Airflow 的 Webserve/Scheduler/Worker 指定独立的资源,并通过设计隔离应用程序来进步安全性。Amazon Fargate 调配了适当的计算量,从而无需抉择实例和扩大集群容量。

服务层

  • Airflow 的 Scheduler 和 Worker 的运行依赖于 Webserver,抉择应用 Amazon CloudMap 来做服务注册和服务发现,保护一直变动的资源的更新地位,进步应用程序的可用性。

Airflow On Amazon Web Services 部署概述

基于如上计划,将 Airflow 部署到云上,大抵须要如下步骤:

  1. 创立 Amazon S3 Bucket,用于寄存用户上传的 DAG 文件;
  2. 创立 Amazon VPC,并确保:
  • Amazon VPC 跨起码两个可用区;
  • Amazon VPC 关上 enableDNSHostNames 性能;
  • Amazon VPC 关上 enableDNSSupport 性能;
  1. 创立 Amazon Security Group,具体包含:
  • Amazon VPC Endpoint Security Group
  • Amazon Airflow ECS Service Security Group
  • Amazon Database Security Group
  • Amazon Redis Security Group
  • Amazon ELB Security Group
  1. 创立 Amazon VPC Endpoint,具体包含:
  • Amazon S3 Gateway Endpoint
  • Amazon ECS/ECR/CloudWatch/SecretsManager Interface Endpoint
  1. 创立 Amazon RDS 数据库
  2. 在 Amazon Secrets Manager 中生成 Amazon Database Credentials,并利用于 Amazon RDS 数据库;
  3. 创立 Amazon Redis 集群;
  4. 创立 Amazon CloudWatch LogGroup;
  5. 创立 Amazon ECS 集群;
  6. 创立并配置 Amazon Cloud Map;
  7. 创立 Amazon Cloud MapLoad Balancer, Amazon Cloud Map TargetGroup, Amazon Airflow Webserver ECS Task Definition, Amazon Airflow Webserver ECS Service;
  8. 创立 Amazon Airflow Scheduler ECS Task Definition, Amazon Airflow Scheduler ECS Service;
  9. 创立 Amazon Airflow Worker ECS Task Definition, Amazon Airflow Worker ECS Service;

能够看出,在云上部署高可用,易扩大的 Aiflow 集群并不是一简略的事件。

因而,这里利用 Amazon CDK,将上述工作封装成了一 L2 的 Construct Library,用户应用 Amazon CDK 只须要简略的数行代码即可在云上实现上述工作。

  • Amazon Construct Library
    https://github.com/readybuild…

基于 Amazon CDK 部署 Airflow

Amazon CDK 开发环境搭建

开发 Amazon 须要先装置 Amazon CDK CLI,利用 Amazon CDK CLI 能够生成对应的 Amazon CDK 的 Project。

Amazon CDK CLI 的装置依赖于 node.js, 所以在您的开发环境须要先装置 node.js。node.js 的装置可参看官网教程: https://nodejs.org/en/downloa…。

装置好 node.js 之后,能够间接应用如下命令装置 Amazon CDK CLI:

  • npm install -g aws-cdk #装置 cdk cli
  • cdk –version #查看版本

应用 Amazon CDK 创立 Apache Airflow

装置 Amazon CDK CLI 后,在您的环境中通过命令 Amazon configure 命令配置好对应的权限之后,就能够应用 Amazon CDK 来进行开发了。

Amazon CDK 反对 JavaScript、TypeScript、Python、Java、C# 和 Go 等开发语言,这里以 TypeScript 为例。

在命令行中运行如下命令,创立 Amazon CDK Project:

  • mkdir apache-airflow-cdk && cd apache-airflow-cdk
  • cdk init sample-app –language=typescript

在 IDE(这里以 VSCode 为例)关上文件夹,如下图所示:

在 lib 文件夹下的 apache-airflow-cdk-stack.ts 定义了 Amazon CloudFormation 对应的构造,能够看出,默认的 Sample 中创立了一个 Amazon SQS 的 Queue,和一个 SNS 的 Topic。

删除掉 Sample 代码,批改代码为如下,创立 Airflow 集群:

import * as cdk from '@aws-cdk/core';
import * as airflow from 'cdk-serverless-airflow';

export class ApacheAirflowCdkStack extends cdk.Stack {constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {super(scope, id, props);

    new airflow.Airflow(this, 'Airflow');

  }
}

在命令行中,执行如下代码,装置 cdk-serverless-airflow 包。

npm i cdk-serverless-airflow

之后,在命令行中执行如下命令并确认,开始在云上部署 Airflow 集群:

cdk deploy

集群的创立大概须要 10 分钟,在集群创立实现之后, 会输入作为 DAG Directory 的 Amazon S3 Bucket 的名字和 Airflow 的拜访地址:

在浏览器中拜访 Airflow 地址,应用默认的用户名 / 明码(user/bitnami)登陆之后,进入如下页面:

在 DAG Directory 的 Bucket 中创立 airflow_dags 文件夹,并上传 DAG 文件到这个文件夹:

期待约一分钟,刷新 Airflow 控制台,能够看到对应的 DAG 曾经加载胜利:

总结

在这篇文章中,提供了应用 Amazon CDK 的形式来部署 Airflow,能够看出应用 Amazon CDK,只须要简略的数行代码,即可实现部署。cdk-serverless-airflow的代码各位能够自在查看,批改,这里的实现只做参考。

  • cdk-serverless-airflow
    https://github.com/readybuild…

参考资料

  • 亚马逊云科技 Blog: 将 Apache Airflow 部署到云端
    https://aws.amazon.com/cn/blo…
  • 亚马逊云科技 Blog: Setting up Amazon PrivateLink for Amazon ECS, and Amazon ECR
    https://aws.amazon.com/cn/blo…
  • Getting started with the Amazon CDK
    https://github.com/aws/aws-cdk

本篇作者

韩医徽

亚马逊云科技解决方案架构师工程师

负责亚马逊云科技合作伙伴生态系统的云计算计划架构征询和设计,同时致力于亚马逊云科技在国内的利用和推广平台相干的开发工作。

正文完
 0