我是靠谱客的博主 奋斗高山,最近开发中收集的这篇文章主要介绍使用Amazon CDK部署基于Amazon Fargate的高可用、易扩展的Airflow集群,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

d4ca0197dbe30a49b03b27fa0234e515.gif

前言

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/blogs/china/deploy-apache-airflow-to-the-cloud/

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

架构考量

Airflow 体系架构概述

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

  • Webserver:为用户提供界面用来管理,调度编排任务;

  • Scheduler:处理触发预定的工作流,并将任务提交给执行器运行;

  • Worker:负责处理运行任务;

  • DAG Directory: 用来存放用户定义的DAG文件;

  • Metadata Database: 用来存储集群的元数据;

6b65d6dc0acf1b422d40c2a4a2666795.png

用户将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,提高可用率,减少维护工作量。

整体架构图如下所示:

80f8d1a7701cd0e020295c711cb2e163.png

如下为详细的设计考量:

网络层

  • 使用三层经典架构;

  • 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功能;

3. 创建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

4. 创建Amazon VPC Endpoint,具体包括:

  • Amazon S3 Gateway Endpoint

  • Amazon ECS/ECR/CloudWatch/SecretsManager Interface Endpoint

5. 创建Amazon RDS 数据库

6. 在Amazon Secrets Manager中生成Amazon Database Credentials,并应用于Amazon RDS数据库;

7. 创建Amazon Redis集群;

8. 创建Amazon CloudWatch LogGroup;

9. 创建Amazon ECS 集群;

10. 创建并配置Amazon Cloud Map;

11. 创建Amazon Cloud MapLoad Balancer, Amazon Cloud Map TargetGroup, Amazon Airflow Webserver ECS Task Definition, Amazon Airflow Webserver ECS Service;

12. 创建Amazon Airflow Scheduler ECS Task Definition, Amazon Airflow Scheduler ECS Service;

13. 创建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/readybuilderone/serverless-airflow

基于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/download/package-manager/。

安装好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

0f4ab139d7b7307fb92ebec90b0a0c77.png

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

324ee883e33d035f5d43dbea3a19eb8d.png

在 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');

  }
}

c501c649bf58578a0b4a93e8aa5cef70.png

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

npm i cdk-serverless-airflow

b5186da4e0de38ec34a1b95636a83b17.png

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

cdk deploy

fb91de5213096096f40e186c8b5a7a77.png

集群的创建大约需要10分钟,在集群创建完成之后, 会输出作为DAG Directory的Amazon S3 Bucket的名字和Airflow的访问地址:

4cebdc14b92fde32fc167fa4c21ec71a.png

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

e9898a7b37c28c2b2c57b00e845b3343.png

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

98be6411e9171213def3ee116553e6bd.png

等待约一分钟,刷新Airflow控制台,可以看到对应的DAG已经加载成功:

0f74ba967fdf7da9d9084327d413e3e1.png

总结

在这篇文章中,提供了使用Amazon CDK的方式来部署Airflow,可以看出使用Amazon CDK,只需要简单的数行代码,即可完成部署。cdk-serverless-airflow的代码各位可以自由查看,修改,这里的实现只做参考。

  • cdk-serverless-airflow

    https://github.com/readybuilderone/serverless-airflow

参考资料

  • 亚马逊云科技Blog: 将Apache Airflow部署到云端

    https://aws.amazon.com/cn/blogs/china/deploy-apache-airflow-to-the-cloud/

  • 亚马逊云科技Blog: Setting up Amazon PrivateLink for Amazon ECS, and Amazon ECR

    https://aws.amazon.com/cn/blogs/compute/setting-up-aws-privatelink-for-amazon-ecs-and-amazon-ecr/

  • Getting started with the Amazon CDK

    https://github.com/aws/aws-cdk

本篇作者

ee3de46bfc81599c76b37879e5704eaf.png

韩医徽

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

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

82d2d6292284fc130887b2b6513d636a.gif

2b0f054e84d9b705977cf671a65831ce.gif

听说,点完下面4个按钮

就不会碰到bug了!

ef23bf538b4f6e8c2c2fd5b92ffdca9a.gif

最后

以上就是奋斗高山为你收集整理的使用Amazon CDK部署基于Amazon Fargate的高可用、易扩展的Airflow集群的全部内容,希望文章能够帮你解决使用Amazon CDK部署基于Amazon Fargate的高可用、易扩展的Airflow集群所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部