概念
简介
Apache DolphinScheduler是一个分布式易拓展的可视化DAG工作流任务调度开源系统。解决数据研发ETL错综复杂的依赖关系,不能直观监控任务健康状态等问题。
DolphinScheduler以DAG流式的方式将Task组装起来,可实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及Kill任务等操作
特点
简单易用:DAG监控界面,所有流程定义都是可视化,通过拖拽任务定制DAG,通过API方式与第三方系统对接,一键部署。
高可靠性:去中心化的多Master和多Worker, 自身支持HA功能, 采用任务队列来避免过载,不会造成机器卡死
高拓展性:支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线
模块
- dolpinscheduler-alert警告模块,提供AlertServer服务
- dolpinscheduler-api web应用模块,提供ApiServer服务
- dolpinscheduler-common通用的常量枚举、工具类、数据结构或者基类
- dolpinscheduler-dao提供数据库访问等操作
- dolpinscheduler-remote基于netty的客户端、服务端
- dolpinscheduler-server MasterServer和WorkerServer服务
- dolpinscheduler-service service模块,包含Quartz、Zookeeper、日志客户端访问服务,便于server模块和api模块调用
- dolpinscheduler-ui前端模块
名称解释
DAG:全称Directed Acyclic Graph,简称DAG。工作流中的Task任务以有向无环图的形式组装起来,从入度零的节点进行拓扑遍历,直到无后继节点为止。
流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG
流程实例:流程实例是流程定义的实例化,可以通过手动启动或定时调度生产,流程定义每运行一次,产生一个流程实例。
任务实例:任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态。
任务类型:目前支持有SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中子 SUB_PROCESS 也是一个单独的流程定义,是可以单独启动执行的
调度方式:系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。 其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用
定时调度:系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成
依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖
优先级:支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出
邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知
失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束
补数:补历史数据,支持区间并行和串行两种补数方式
核心架构
MasterServer:
- MasterServer采用分布式去中心设计理念,MasterServer主要负责DAG任务切分、任务提交监控,并同时监听其他MasterServer和WorkerServer的健康状态。MasterServer服务启动时向Zookeeper临时节点变化来进行容错处理。MasterServer基于netty提供监听服务。
- Distributed Quartz:分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作
- MasterSchedulerThread:是一个扫描线程,定时扫描数据库,定时扫描数据库中的command表,根据不同的命令类型进行不同的业务操作
- MasterExecThread:主要是负责DAG任务切分、任务提交监控、各种不同命令类型的逻辑处理
- MasterTaskExecThread:主要负责任务的持久化
WorkerServer:
- 采用分布式去中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。Server基于netty提供监听服务
- FetchTaskThread:主要负责不断从Task Queue中领取任务,并根据不同任务类型调用TaskSchduleThread对应执行器
- LoggerServer:是一个RPC服务,提供日志分片查看、刷新和下载等功能
Zookeeper:
Zookeeper服务,系统中的MasterServer和WorkerServer节点都通过Zookeeper来进行集群管理和容错。另外系统还基于Zookeeper进行时间监听和分布式锁。
TaskQueue:
提供任务队列的操作,目前队列也是基于Zookeeper来实现。由于队列中存的信息较少,不必担心队列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响
Alert:
提供告警相关接口,接口主要包括告警和告警数据的存储、查询和通知功能
API:
API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。接口包括工作流的创建、定义、查询、修改、发布、下线、手动启动、停止、暂停、恢复、从该节点开始执行
UI:
系统的前端页面,提供系统的各种可视化操作界面