当前位置: 首页 > news >正文

DolphinScheduler 介绍及系统架构

目录

一、DolphinScheduler 介绍

1.1 关于 DolphinScheduler

1.2 特性

简单易用

丰富的使用场景

High Reliability

High Scalability

1.3 名词解释

1.3.1 名词解释

1.3.2 模块介绍

二、DolphinScheduler 系统架构

2.1 系统架构图

2.2 架构说明

MasterServer

该服务内主要包含:

WorkerServer

该服务包含:


 

一、DolphinScheduler 介绍

1.1 关于 DolphinScheduler

        Apache DolphinScheduler 是一个分布式易扩展的可视化 DAG 工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。

        Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系,并为应用程序提供数据和各种 OPS 编排中的关系。 解决数据研发ETL依赖错综复杂,无法监控任务健康状态的问题。DolphinScheduler 以 DAG(Directed Acyclic Graph,DAG)流式方式组装任务,可以及时监控任务的执行状态,支持重试、指定节点恢复失败、暂停、恢复、终止任务等操作。

1.2 特性

简单易用

  • 可视化 DAG: 用户友好的,通过拖拽定义工作流的,运行时控制工具。
  • 模块化操作: 模块化有助于轻松定制和维护。

丰富的使用场景

  • 支持多种任务类型: 支持Shell、MR、Spark、SQL等10余种任务类型,支持跨语言,易于扩展。
  • 丰富的工作流操作: 工作流程可以定时、暂停、恢复和停止,便于维护和控制全局和本地参数。

High Reliability

  • 高可靠性: 去中心化设计,确保稳定性。 原生 HA 任务队列支持,提供过载容错能力。 DolphinScheduler 能提供高度稳健的环境。

High Scalability

  • 高扩展性: 支持多租户和在线资源管理。支持每天10万个数据任务的稳定运行。

1.3 名词解释

在对 Apache DolphinScheduler 了解之前,我们先来认识一下调度系统常用的名词。

1.3.1 名词解释

DAG: 全称 Directed Acyclic Graph,简称 DAG。工作流中的 Task 任务以有向无环图的形式组装起来,从入度为零的节点进行拓扑遍历,直到无后继节点为止。举例如下图:

流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化 DAG。

流程实例:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成。每运行一次流程定义,产生一个流程实例。

任务实例:任务实例是流程定义中任务节点的实例化,标识着某个具体的任务。

任务类型:目前支持有 SHELL、SQL、SUB_PROCESS(子流程)、PROCEDURE、MR、SPARK、PYTHON、DEPENDENT(依赖),同时计划支持动态插件扩展,注意:其中 SUB_PROCESS类型的任务需要关联另外一个流程定义,被关联的流程定义是可以单独启动执行的。

调度方式:系统支持基于 cron 表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。 其中 恢复被容错的工作流 和 恢复等待线程 两种命令类型是由调度内部控制使用,外部无法调用。

定时调度:系统采用 quartz 分布式调度器,并同时支持cron表达式可视化的生成。

依赖:系统不单单支持 DAG 简单的前驱和后继节点之间的依赖,同时还提供任务依赖节点,支持流程间的自定义任务依赖。

优先级 :支持流程实例和任务实例的优先级,如果流程实例和任务实例的优先级不设置,则默认是先进先出。

邮件告警:支持 SQL任务 查询结果邮件发送,流程实例运行结果邮件告警及容错告警通知。

失败策略:对于并行运行的任务,如果有任务失败,提供两种失败策略处理方式,继续是指不管并行运行任务的状态,直到流程失败结束。结束是指一旦发现失败任务,则同时Kill掉正在运行的并行任务,流程失败结束。

补数:补历史数据,支持区间并行串行两种补数方式,其日期选择方式包括日期范围日期枚举两种。

1.3.2 模块介绍

  • dolphinscheduler-master 模块,提供工作流管理和编排服务。

  • dolphinscheduler-worker 模块,提供任务执行管理服务。

  • dolphinscheduler-alert 告警模块,提供 AlertServer 服务。

  • dolphinscheduler-api web 应用模块,提供 ApiServer 服务。

  • dolphinscheduler-common 通用的常量枚举、工具类、数据结构或者基类。

  • dolphinscheduler-dao 提供数据库访问等操作。

  • dolphinscheduler-remote 基于 netty 的客户端、服务端。

  • dolphinscheduler-service 模块,包含 Quartz、Zookeeper、日志客户端访问服务,便于server 模块和 api 模块调用。

  • dolphinscheduler-ui 前端模块。

二、DolphinScheduler 系统架构

2.1 系统架构图

2.2 架构说明

  • MasterServer

    MasterServer 采用分布式无中心设计理念,MasterServer 主要负责 DAG 任务切分、任务提交监控,并同时监听其它 MasterServer 和 WorkerServer 的健康状态。MasterServer 服务启动时向 Zookeeper 注册临时节点,通过监听 Zookeeper 临时节点变化来进行容错处理。MasterServer 基于 netty 提供监听服务。

    该服务内主要包含:
    • DistributedQuartz 分布式调度组件,主要负责定时任务的启停操作,当 quartz 调起任务后,Master 内部会有线程池具体负责处理任务的后续操作;

    • MasterSchedulerService 是一个扫描线程,定时扫描数据库中的 t_ds_command 表,根据不同的命令类型进行不同的业务操作;

    • WorkflowExecuteRunnable 主要是负责 DAG 任务切分、任务提交监控、各种不同事件类型的逻辑处理;

    • TaskExecuteRunnable 主要负责任务的处理和持久化,并生成任务事件提交到工作流的事件队列;

    • EventExecuteService 主要负责工作流实例的事件队列的轮询;

    • StateWheelExecuteThread 主要负责工作流和任务超时、任务重试、任务依赖的轮询,并生成对应的工作流或任务事件提交到工作流的事件队列;

    • FailoverExecuteThread 主要负责Master容错和 Worker 容错的相关逻辑;

  • WorkerServer

    WorkerServer 也采用分布式无中心设计理念,WorkerServer 主要负责任务的执行和提供日志服务。 WorkerServer 服务启动时向 Zookeeper 注册临时节点,并维持心跳。 WorkerServer 基于 netty 提供监听服务。

    该服务包含:
    • WorkerManagerThread 主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;

    • TaskExecuteThread 主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;

    • RetryReportTaskStatusThread 主要负责定时轮询向 Master 汇报任务的状态,直到 Master 回复状态的 ack,避免任务状态丢失;

  • ZooKeeper

    ZooKeeper 服务,系统中的 MasterServer 和 WorkerServer 节点都通过 ZooKeeper 来进行集群管理和容错。另外系统还基于 ZooKeeper 进行事件监听和分布式锁。 我们也曾经基于 Redis 实现过队列,不过我们希望 DolphinScheduler 依赖到的组件尽量地少,所以最后还是去掉了 Redis 实现。

  • AlertServer

    提供告警服务,通过告警插件的方式实现丰富的告警手段。

  • ApiServer

    API 接口层,主要负责处理前端 UI 层的请求。该服务统一提供 RESTful api 向外部提供请求服务。

  • UI

    系统的前端页面,提供系统的各种可视化操作界面。

更多关于大数据分布式工作流调度系统--DolphinScheduler 的架构原理及实现思路可以参考官方文档:https://dolphinscheduler.apache.org/zh-cn/docs/3.1.8/architecture/design  

相关文章:

  • 多维时序 | MATLAB实CNN-Mutilhead-Attention卷积神经网络融合多头注意力机制多变量时间序列预测
  • 面试算法72:求平方根
  • Redis基础-Redis概念及常见命令
  • 使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理
  • CentOS系统环境搭建(二十五)——使用docker compose安装mysql
  • Postman调用HTTPS需要配置
  • 中国信通院「星熠」案例公布,个推消息推送获评绿色SDK产品优秀案例
  • 外卖系统开发:构建高效、安全的外卖平台
  • 什么猫粮比较好?最受欢迎猫咪喜爱的5款主食冻干推荐!
  • 服务器系统时间不同步如何处理
  • 【网络安全】Log4j 远程代码执行漏洞解析
  • 机器学习之实验过程01
  • 一文掌握 Vue3 + Express 大文件分片上传、断点续传、秒传技巧!
  • PSINS四元数转换函数rv2q
  • 在Excel中,如何简单快速地删除重复项,这里提供详细步骤
  • 77. Combinations
  • DOM的那些事
  • ECMAScript6(0):ES6简明参考手册
  • Javascript基础之Array数组API
  • Linux链接文件
  • python docx文档转html页面
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • spark本地环境的搭建到运行第一个spark程序
  • Spring框架之我见(三)——IOC、AOP
  • windows-nginx-https-本地配置
  • 对象管理器(defineProperty)学习笔记
  • 高性能JavaScript阅读简记(三)
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (算法)Game
  • (转)ABI是什么
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)从 Java 代码到 Java 堆
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .cn根服务器被攻击之后
  • .net 获取url的方法
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @Builder用法
  • [ C++ ] 继承
  • [Android Studio] 开发Java 程序
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • [C++] Windows中字符串函数的种类
  • [IE技巧] 让IE 以全屏模式启动
  • [Linux]history 显示命令执行的时间
  • [Oh My C++ Diary]\t \n \r的用法