0%

Airflow

Airflow

介绍

airflow是一款开源的,分布式任务调度框架,它将一个具有上下级依赖关系的工作流,组装成一个有向无环图。

特点:

  • 分布式任务调度:允许一个工作流的task在多台worker上同时执行
  • 可构建任务依赖:以有向无环图的方式构建任务依赖关系
  • task原子性:工作流上每个task都是原子可重试的,一个工作流某个环节的task失败可自动或手动进行重试,不必从头开始任务

架构

35a160b63e7389fe12f451e299ab0c00.jpg

webserver : 提供web端服务,以及会定时生成子进程去扫描对应的目录下的dags,并更新数据库

scheduler : 任务调度服务,根据dags生成任务,并提交到消息中间件队列中 (redis或rabbitMq)

celery worker : 分布在不同的机器上,作为任务真正的的执行节点。通过监听消息中间件: redis或rabbitMq 领取任务

flower : 监控worker进程的存活性,启动或关闭worker进程,查看运行的task

celery

d4e3cc47e43e1073f8d347eede9d297a.png

[1] Web server –> Workers : 获取任务执行日志。

[2] Web server –> DAG files : 展示DAG结构。

[3] Web server –> Database :获取任务状态。

[4] Workers –> DAG files :展示DAG结构和执行任务。

[5] Workers –> Database : 获取和存储连接配置信息、变量XCOM。

[6] Workers –> Celery’s result backend : 存储任务执行信息。

[7] Workers –> Celery’s broker :存储执行的命令。

[8] Scheduler –> Database : 存储DAG运行信息和相关的任务。

[9] Scheduler –> DAG files : 展示DAG的结构和执行任务。

[10] Scheduler –> Celery’s result backend : 获取已经执行完的任务信息。

[11] Scheduler –> Celery’s broker : 把执行的命令发送给Celery’s broker。

角色

Task

就是任务,有异步任务和定时任务

Broker

中间人,接收生产者发来的消息即Task,将任务存入队列。任务的消费者是Worker。

Celery本身不提供队列服务,推荐用Redis或RabbitMQ实现队列服务。

Worker

执行任务的单元,它实时监控消息队列,如果有任务就获取任务并执行它。

Beat

定时任务调度器,根据配置定时将任务发送给Broker。

Backend

用于存储任务的执行结果。

3cc47a82b844cca11c599250b4b491ae.png