赞
踩
目录
Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务,工作流和全生命周期数据处理过程的解决方案。
Apache DolphinScheduler (简称DS)旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。DS以 DAG流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。
官网文章地址:
https://dolphinscheduler.apache.org/zh-cn/docs/3.2.1/about/introduction
集群部署流程见文章:
DolphinScheduler-3.2.0 集群搭建-CSDN博客
这里整理的是调度系统常用的名词
任务实例:任务实例是流程定义中任务节点的实例化,标识着某个具体的任务
任务类型:目前支持有 SHELL、SQL、SUB_PROCESS(子流程)等
调度方式:系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。
定时调度:系统采用quartz分布式调度器,并同时支持cron表达式可视化的生成
依赖:系统不仅支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖
优先级 :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出
邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知
失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束
ps: 工作流--> 工作流实例, 一个工作流包含多个任务节点,任务节点 --> 任务实例
dolphinscheduler-master master模块,提供工作流管理和编排服务。
dolphinscheduler-worker worker模块,提供任务执行管理服务。
dolphinscheduler-alert 告警模块,提供 AlertServer 服务。
dolphinscheduler-api web应用模块,提供 ApiServer 服务。
dolphinscheduler-common 通用的常量枚举、工具类、数据结构或者基类
dolphinscheduler-dao 提供数据库访问等操作。
dolphinscheduler-extract extract模块,包含master/worker/alert的sdk
dolphinscheduler-service service模块,包含Quartz、Zookeeper、日志客户端访问服务,便于server模块和api模块调用
dolphinscheduler-ui 前端模块
为更好的理解上述架构图, 相关概念介绍:
下面具体展示调度任务的创建、被调度执行的过程:
MasterServer采用分布式无中心设计理念,其主要负责DAG任务切分、任务提交监控、并同时监听其它MasterServer和WorkerServer的健康状态。
MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务。
WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。
WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。 WorkerServer基于netty提供监听服务。
该服务内主要包含:
WorkerManagerThread主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;
TaskExecuteThread主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;
RetryReportTaskStatusThread主要负责定时轮询向Master汇报任务的状态,直到Master回复状态的ack,避免任务状态丢失;
提供告警服务,通过告警插件的方式实现丰富的告警手段。
API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。
系统的前端页面,提供系统的各种可视化操作界面。
系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。
(1)中心化思想
中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为两种角色:
该中心化思想设计存在的问题:
(2)去中心化
容错分为服务宕机容错和任务重试,服务宕机容错又分为Master容错和Worker容错两种情况
服务宕机容错设计依赖于ZooKeeper的Watcher机制,实现原理如图:
其中Master监控其他Master和Worker的目录,如果监听到remove事件,则会根据具体的业务逻辑进行流程实例容错或者任务实例容错。
这里首先要区分任务失败重试、流程失败恢复、流程失败重跑的概念:
根据任务实例的json解析优先级,然后把流程实例优先级_流程实例id_任务优先级_任务id信息保存在ZooKeeper任务队列中,当从任务队列获取的时候,通过字符串比较即可得出最需要优先执行的任务。
(1)流程定义的优先级:考虑到有些流程需要先于其他流程进行处理,这个可以在流程启动或者定时启动时配置,共有5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图
(2)任务的优先级:分为5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图
负载均衡即通过路由算法(通常是集群环境),合理的分摊服务器压力,达到服务器性能的最大优化。
DolphinScheduler-Master 分配任务至 worker,默认提供了三种算法:
默认配置为线性加权负载。该算法每隔一段时间会向注册中心上报自己的负载信息,主要根据两个信息来进行判断:
如果两者任何一个低于配置项,那么这台worker将不参与负载(即不分配流量)。可以在 worker.properties 修改下面的属性来自定义配置
参考文章:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。