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

DolphinScheduler——介绍及架构设计

目录

一、DolphinScheduler介绍

1.1 概述

1.2 特性

1.2.1 简单易用

1.2.2 丰富的使用场景

1.2.3 High Reliability

1.2.4 High Scalability

1.3 名词解释 

1.3.1 名词解释

1.3.2 模块介绍

二、DolphinScheduler架构原理

2.1 系统架构图

2.2 架构说明

2.2.1 MasterServer

2.2.2 WorkerServer

2.2.3 AlertServer

2.2.4 ApiServer

2.2.5 UI

2.2.6 ZooKeeper

2.3 架构设计思想

2.3.1 去中心化vs中心化

2.3.2 容错设计

2.3.3 任务失败重试

2.3.4 任务优先级设计

三、负载均衡

3.1 Worker 负载均衡算法

3.1.1 加权随机(random)

3.1.2 平滑轮询(roundrobin)

3.1.3 线性负载(lowerweight)

一、DolphinScheduler介绍

1.1 概述

     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博客

1.2 特性

1.2.1 简单易用

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

1.2.2 丰富的使用场景

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

1.2.3 High Reliability

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

1.2.4 High Scalability

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

1.3 名词解释 

    这里整理的是调度系统常用的名词

1.3.1 名词解释

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

  • 流程定义:通过拖拽任务节点并建立任务节点的关联所形成的可视化DAG
  • 流程实例:流程实例是流程定义的实例化,可以通过手动启动或定时调度生成。每运行一次流程定义,产生一个流程实例
  • 任务实例:任务实例是流程定义中任务节点的实例化,标识着某个具体的任务

  • 任务类型:目前支持有 SHELL、SQL、SUB_PROCESS(子流程)等

  • 调度方式:系统支持基于cron表达式的定时调度和手动调度。命令类型支持:启动工作流、从当前节点开始执行、恢复被容错的工作流、恢复暂停流程、从失败节点开始执行、补数、定时、重跑、暂停、停止、恢复等待线程。

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

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

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

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

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

 ps: 工作流--> 工作流实例, 一个工作流包含多个任务节点,任务节点 --> 任务实例

1.3.2 模块介绍

  • 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 前端模块

二、DolphinScheduler架构原理

2.1 系统架构图

  为更好的理解上述架构图, 相关概念介绍:

  • API服务:用于与UI交互;
  • Process(工作流):由任务以有向无环图形式构成,执行时解析一个工作流为多个任务,可设置工作流优先级,工作执行全局参数、超时告警;
  • Task(任务):调度执行的最小单元,包含Shell、Spark、Flink、Sql、MR等多种类型。可设置任务执行优先级、任务执行参数、超时告警、超时失败;
  • Command(待调度指令)工作流经手动调度或定时调度生成的数据,存储在数据库DB中;
  • Instance(任务实例):任务执行后,会生成相应的实例,记录执行时任务的状态及执行内容,任务实例可查看下载日志;
  • Master(调度服务)提供对工作流手动调度、定时调度、超时告警、任务容错、任务执行监控等功能;
  • Worker(运行服务)解析工作流,识别任务类型,调用对应任务类型的逻辑,生成任务实例;
  • Alert(告警通知服务)可通过Email、微信等多种方式,告知工作流、任务执行结果。
  • 主节点(master)和工作节点(worker)是去中心化的,可以部署多个Master和多个Worker,它们可以分布在不同的位置并独立工作。

  下面具体展示调度任务的创建、被调度执行的过程:

  • 根据具体的业务需求,通过Web界面以DAG形式创建工作流,生成Process并落库;
  • 手动调度或定时调度生成待调度指令Command,存储在数据库DB中;
  • Master监听读取Command记录,解析后动态分配至Worker,选择对应的任务类型执行;
  • Worker执行完成后,生成Process Instance(工作流实例)、Task Instance(任务实例)并落库;
  • Alert告警模块监听Instance实例,通过Email等发送任务执行结果。

2.2 架构说明

2.2.1 MasterServer

    MasterServer采用分布式无中心设计理念,其主要负责DAG任务切分、任务提交监控、并同时监听其它MasterServer和WorkerServer的健康状态。

   MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。 MasterServer基于netty提供监听服务。

2.2.2 WorkerServer

   WorkerServer也采用分布式无中心设计理念,WorkerServer主要负责任务的执行和提供日志服务。

   WorkerServer服务启动时向Zookeeper注册临时节点,并维持心跳。 WorkerServer基于netty提供监听服务。

   该服务内主要包含:

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

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

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

2.2.3 AlertServer

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

2.2.4 ApiServer

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

2.2.5 UI

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

2.2.6 ZooKeeper

    系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。 

2.3 架构设计思想

2.3.1 去中心化vs中心化

(1)中心化思想

    中心化的设计理念比较简单,分布式集群中的节点按照角色分工,大体上分为两种角色:

  • Master的角色主要负责任务分发并监督Slave的健康状态,可以动态的将任务均衡到Slave上,以致Slave节点不至于“忙死”或”闲死”的状态。
  • Worker的角色主要负责任务的执行工作并维护和Master的心跳,以便Master可以分配任务给Slave。

   该中心化思想设计存在的问题:

  • 一旦Master出现了问题,则群龙无首,整个集群就会崩溃。为了解决这个问题,大多数Master/Slave架构模式都采用了主备Master的设计方案,可以是热备或者冷备,也可以是自动切换或手动切换,而且越来越多的新系统都开始具备自动选举切换Master的能力,以提升系统的可用性。
  • 另外一个问题是如果Scheduler在Master上,虽然可以支持一个DAG中不同的任务运行在不同的机器上,但是会产生Master的过负载。如果Scheduler在Slave上,则一个DAG中所有的任务都只能在某一台机器上进行作业提交,则并行任务比较多的时候,Slave的压力可能会比较大

(2)去中心化

  • 在去中心化设计里,通常没有Master/Slave的概念,所有的角色都是一样的,地位是平等的
  • 去中心化设计的核心设计在于整个分布式系统中不存在一个区别于其他节点的”管理者”,因此不存在单点故障问题。但由于不存在” 管理者”节点所以每个节点都需要跟其他节点通信才得到必须要的机器信息,而分布式系统通信的不可靠性,则大大增加了上述功能的实现难度。
  • DolphinScheduler的去中心化是Master/Worker注册心跳到Zookeeper中,Master基于slot(资源槽)处理各自的Command,通过selector分发任务给worker,实现Master集群和Worker集群无中心。

2.3.2 容错设计

   容错分为服务宕机容错和任务重试,服务宕机容错又分为Master容错和Worker容错两种情况

     服务宕机容错设计依赖于ZooKeeper的Watcher机制,实现原理如图:

   其中Master监控其他Master和Worker的目录,如果监听到remove事件,则会根据具体的业务逻辑进行流程实例容错或者任务实例容错。

2.3.3 任务失败重试

   这里首先要区分任务失败重试、流程失败恢复、流程失败重跑的概念:

  • 任务失败重试是任务级别的,是调度系统自动进行的,比如一个Shell任务设置重试次数为3次,那么在Shell任务运行失败后会自己再最多尝试运行3次
  • 流程失败恢复是流程级别的,是手动进行的,恢复是从只能从失败的节点开始执行或从当前节点开始执行
  • 流程失败重跑也是流程级别的,是手动进行的,重跑是从开始节点进行

2.3.4 任务优先级设计

     根据任务实例的json解析优先级,然后把流程实例优先级_流程实例id_任务优先级_任务id信息保存在ZooKeeper任务队列中,当从任务队列获取的时候,通过字符串比较即可得出最需要优先执行的任务。

(1)流程定义的优先级:考虑到有些流程需要先于其他流程进行处理,这个可以在流程启动或者定时启动时配置,共有5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图

(2)任务的优先级:分为5级,依次为HIGHEST、HIGH、MEDIUM、LOW、LOWEST。如下图

三、负载均衡

   负载均衡即通过路由算法(通常是集群环境),合理的分摊服务器压力,达到服务器性能的最大优化。

3.1 Worker 负载均衡算法

  DolphinScheduler-Master 分配任务至 worker,默认提供了三种算法:

3.1.1 加权随机(random)

3.1.2 平滑轮询(roundrobin)

3.1.3 线性负载(lowerweight)

      默认配置为线性加权负载。该算法每隔一段时间会向注册中心上报自己的负载信息,主要根据两个信息来进行判断:

  • load 平均值(默认是 CPU 核数 *2)
  • 可用物理内存(默认是 0.3,单位是 G)

   如果两者任何一个低于配置项,那么这台worker将不参与负载(即不分配流量)。可以在 worker.properties 修改下面的属性来自定义配置

  • worker.max.cpu.load.avg=-1 (worker最大cpu load均值,只有高于系统cpu load均值时,worker服务才能被派发任务. 默认值为-1: cpu cores * 2)
  • worker.reserved.memory=0.3 (worker预留内存,只有低于系统可用内存时,worker服务才能被派发任务,单位为百分比)

参考文章:

DolphinScheduler 介绍及系统架构_dolphinschedule的模块是怎么划分的-CSDN博客

深入了解海豚调度DolphinScheduler-CSDN博客

相关文章:

DolphinScheduler——介绍及架构设计

目录 一、DolphinScheduler介绍 1.1 概述 1.2 特性 1.2.1 简单易用 1.2.2 丰富的使用场景 1.2.3 High Reliability 1.2.4 High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler架构原理 2.1 系统架构图 2.2 架构说明 2.2.1 Maste…...

【Python】约瑟夫环问题

任务描述 据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在…...

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…...

基于springboot+vue的医院药品管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…...

Python爬虫——Urllib库-1

这几天都在为了蓝桥杯做准备,一直在刷算法题,确实刷算法题的过程是及其的枯燥且枯燥的。于是我还是决定给自己找点成就感出来,那么Python的爬虫就这样开始学习了。 注:文章源于观看尚硅谷爬虫视频后笔记 目录 Urllib库 基本使…...

瑞_Redis_短信登录(一)

文章目录 项目介绍1 项目准备1.1 导入SQL1.2 导入后端项目1.2 导入前端项目 🙊 前言:本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的项目准备小节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系列专栏主要是针对该…...

《剑指 Offer》专项突破版 - 面试题 70 : 排序数组中只出现一次的数字(C++ 实现)

题目链接:LCR 070. 有序数组中的单一元素 - 力扣(LeetCode) 题目: 在一个排序的数组中,除一个数字只出现一次之外,其他数字都出现了两次,请找出这个唯一只出现一次的数字。例如,在…...

Linux安全加固功能

提示:工具下载链接在文章最后 目录 一.加固功能介绍二.配置加固功能1.配置安全加固功能1.1 开放目前设备监听的所有端口1.2 只开放80、443、20、21、22端口1.3 防火墙配置工具1.3.1 开放允许访问的端口1.3.2 删除允许访问的端口1.3.3 添加IP地址允许访问规则1.3.4 添加IP地址禁…...

最新AI系统ChatGPT网站H5系统源码,支持Midjourney绘画

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…...

【服务器数据恢复】昆腾存储中raid5磁盘阵列数据恢复案例

服务器数据恢复环境&故障: 10个磁盘柜,每个磁盘柜配24块硬盘。9个磁盘柜用于存储数据,1个磁盘柜用于存储元数据。 元数据存储中24块硬盘,组建了9组RAID1阵列1组RAID10阵列,4个全局热备硬盘。 数据存储中&#xff0…...

企业微信变更主体怎么改?

企业微信变更主体有什么作用?现在很多公司都用企业微信来加客户,有时候辛辛苦苦积累了很多客户,但是公司却因为各种各样的原因需要注销,那么就需要通过企业微信变更主体的方法,把企业微信绑定的公司更改为最新的。企业…...

常用生理眼电信号整理合集 (EOG)

目录 Sleep-EDF Sleep-EDF expanded Sleep-EDF 这些信号是从白人男性和女性(21-35 岁)中获得的,没有任何药物治疗;它们包含水平 EOG、FpzCz 和 PzOz EEG,每个采样频率为 100 Hz。 sc* 记录还包含颏下肌电图包络、口鼻…...

【场景题】让你设计一个订单号生成服务,该怎么做?

方案 当设计订单号生成服务时,我们需要考虑唯一性、数据量、可读性、基因法、可扩展性、高性能和高可用性等多个方面。根据这些考虑,一个简单的订单号生成服务设计方案可以采取以下措施: 使用Snowflake算法或第三方分布式ID生成器&#xff…...

使用GraphView实现简单的绘图工具

ShapeItem代码: ShapeItem::ShapeItem(ShapeType type) {m_type type;m_lt QPointF(0, 0);m_rb QPointF(0, 0);m_deleteEnable false;m_bll BllData::getInstance();connect(m_bll, &BllData::deleteShapeEnableSignal, this, &ShapeItem::deleteShap…...

javaWebssh教师荣誉库管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh在线授课辅导系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0…...

Android minigbm框架普法

Android minigbm框架普法 引言 假设存在这么一个场景,我的GPU的上层实现走的不是标准的Mesa接口,且GPU也没有提专门配套的gralloc和hwcompoer实现。那么我们的Android要怎么使用到EGL和GLES库呢,并且此GPU驱动是支持drm实现的,也有…...

01、MongoDB -- 下载、安装、配置文件等配置 及 副本集配置

目录 MongoDB -- 下载、安装、配置 及 副本集配置启动命令启动 mongodb 的服务器(单机和副本集)启动单机模式的 mongodb 服务器启动副本集的 3 个副本节点(mongodb 服务器) 启动 mongodb 的客户端 MongoDB 下载MongoDB 安装1、解压…...

uniapp中导入css和scss的区别

在项目中编写了一个基础的公共样式 common.scss文件 想要将其 导入到app.vue文件中 第一次使用的是import url(static/common.scss); 编译直接报错,无法识别这个文件 原因是 使用import url()是CSS中用于导入外部样式表的语法,但它不适用于导入SCS…...

RabbitMQ-TTL/死信队列/延迟队列高级特性

文章目录 TTL死信队列消息成为死信的三种情况队列如何绑定死信交换机 延迟队列RabbitMQ如何实现延迟队列 总结来源B站黑马程序员 TTL TTLTTL(Time To Live):存活时间/过期时间当信息到达存活时间后,还没有被消费,会被自动清除。RabbitMQ可以对消息设置过…...

docker安装php7.4安装(swoole)

容器 docker pull centos:centos7 docker run -dit -p9100:9100 --name“dade” --privilegedtrue centos:centos7 /usr/sbin/init 一、安装前库文件和工具准备 1、首先安装 EPEL 源 yum -y install epel-release2.安装 REMI 源 yum -y install http://rpms.remirepo.net/en…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...