Airflow
介绍
airflow是一款开源的,分布式任务调度框架,它将一个具有上下级依赖关系的工作流,组装成一个有向无环图。
特点:
- 分布式任务调度:允许一个工作流的task在多台worker上同时执行
- 可构建任务依赖:以有向无环图的方式构建任务依赖关系
- task原子性:工作流上每个task都是原子可重试的,一个工作流某个环节的task失败可自动或手动进行重试,不必从头开始任务
架构
webserver : 提供web端服务,以及会定时生成子进程去扫描对应的目录下的dags,并更新数据库
scheduler : 任务调度服务,根据dags生成任务,并提交到消息中间件队列中 (redis或rabbitMq)
celery worker : 分布在不同的机器上,作为任务真正的的执行节点。通过监听消息中间件: redis或rabbitMq 领取任务
flower : 监控worker进程的存活性,启动或关闭worker进程,查看运行的task
celery
[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
用于存储任务的执行结果。