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掉正在运行的并行任务,流程失败结束

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

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 系统架构图

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/707215.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

音频混音算法的实现

最近项目有用到混音算法&#xff0c;这里用比较常见的一种&#xff0c;就是简单的加和之后做一下归一化。 是参考这个博主实现的&#xff1a; 音频混音的算法实现 下面直接贴代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <math.h&…

Python学习 day05(异常、模块导入)

异常 为什么要捕获异常 当程序遇到了BUG&#xff0c;如果不对BUG进行手动捕获&#xff0c;那么整个程序就会因为一个BUG而停止运行&#xff0c;这在有些情况下是会造成很大的损失&#xff0c;但是如果我们进行了手动捕获&#xff0c;那么整个程序会继续运行捕获异常的作用在于&…

vue-router4 (六) 命名视图

命名视图可以使得同一级&#xff08;同一个组件&#xff09;中展示更多的路由视图&#xff0c;而不是嵌套显示&#xff0c; 命名视图可以让一个组件中具有多个路由渲染出口&#xff0c;这对于一些特定的布局组件非常有用。 应用场景&#xff1a; 比如点击login切换到组件A&am…

vue3第三节(v-model 执行原理)

特殊说明&#xff1a; 以下vue3语法是基于 3.4之前版本进行使用的&#xff0c;3.4之后的版本 引入了 defineModel 宏&#xff0c;后续会介绍defineModel 1、vue3 与vue2 中v-model区别 vue3 中v-model绑定的不再是value&#xff0c;而是modelValue&#xff0c;接收的方法也不再…

2024-02-28(Kafka,Oozie,Flink)

1.Kafka的数据存储形式 一个主题由多个分区组成 一个分区由多个segment段组成 一个segment段由多个文件组成&#xff08;log&#xff0c;index&#xff08;稀疏索引&#xff09;&#xff0c;timeindex&#xff08;根据时间做的索引&#xff09;&#xff09; 2.读数据的流程 …

论文精读--GPT3

不像GPT2一样追求zero-shot&#xff0c;而换成了few-shot Abstract Recent work has demonstrated substantial gains on many NLP tasks and benchmarks by pre-training on a large corpus of text followed by fine-tuning on a specific task. While typically task-agnos…

Day04:APP架构小程序H5+Vue语言Web封装原生开发Flutter

目录 常见APP开发架构 APP-开发架构-原生态-IDEA APP-开发架构-Web封装-平台 APP-开发架构-H5&Vue-HBuilderX WX小程序-开发架构-Web封装-平台 WX小程序-开发架构-H5&Vue-HBuilderX 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服…

Leetcode—82. 删除排序链表中的重复元素 II【中等】

2024每日刷题&#xff08;117&#xff09; Leetcode—82. 删除排序链表中的重复元素 II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val…

在Golang中简化日志记录:提升性能和调试效率

最大化效率和有效故障排除&#xff1a;在Golang中简化日志记录 日志记录是软件开发的一个基本方面&#xff0c;有助于调试、监控和理解应用程序的流程。在Golang中&#xff0c;有效的日志记录实践可以显著提高性能并简化调试过程。本文探讨了优化Golang日志记录的技术&#xf…

服务器数据恢复-异常断电导致服务器硬盘离线的数据恢复案例

服务器数据恢复环境&#xff1a; dell某型号服务器中有一组通过raid卡组建的raid10&#xff0c;该raid阵列中一共有4块磁盘。上层部署XenServer虚拟化平台&#xff0c;作为网站服务器使用。 服务器故障&#xff1a; 服务器异常断电导致服务器上的一台虚拟机不可用。需要恢复这…

Java Web(八)--Servlet(二)

Servlet API Servlet API 包含以下4个Java包&#xff1a; 1. javax.servlet&#xff1a;其中包含定义Servlet和Servlet容器之间契约的类和接口。 2. javax.servlet.http&#xff1a;主要定义了与HTTP协议相关的HttpServlet类&#xff0c;HttpServletRequest接口和HttpServl…

C语言第三十二弹---自定义类型:联合和枚举

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、联合体 1.1、联合体类型的声明 1.2、联合体的特点 1.3、相同成员的结构体和联合体对比 1.4、联合体大小的计算 1.5、联合的⼀个练习 2、枚举类型 …

网络初识(概念入门)

目录 1.局域网VS广域网 1.1局域网 1.2广域网 2.五元组 2.1 IP和端口 2.1.1 IP 2.1.2端口号 2.2协议 3.协议分层 4. TCP/IP五层模型 5.封装和分用 5.1封装 5.2分用 1.局域网VS广域网 1.1局域网 简单介绍&#xff1a;指在某一特定区域内由多台计算机组成的互联网组…

springboot-基础-添加model和controller的简单例子+常用注解含义

备份笔记。所有代码都是2019年测试通过的&#xff0c;如有问题请自行搜索解决&#xff01; 上一篇&#xff1a;springboot-基础-eclipse配置helloword示例 目录 添加model和controller的例子注解开发使用RestController 大坑 Model ModelMap和ModelAndView的区别 添加model和c…

only office-用着确实很省心

小程一言 最近一直在使用各种办公软件进行学习笔记整理&#xff0c;但是在使用过程中&#xff0c;总感觉不是自己想要的一款软件&#xff0c;想要一款真正懂自己的软件&#xff0c;是一个选择的过程。最近在网上闲逛发现一款宝藏软件&#xff0c;好奇心驱使我去进行适用&#…

Apache POl

介绍 Apache POl是一个处理Miscrosoft Ofice各种文件格式的开源项目。简单来说就是&#xff0c;我们可以使用 POI 在 Java 程序中对Miscrosoft Office各种文件进行读写操作,一般情况下&#xff0c;POI都是用于操作 Excel 文件。 Apache POl 的应用场景 1.银行网银系统导出交易…

VScode打开keil5软件的内容

VScode想要打开keil5软件的内容&#xff0c;需要在此引入 具体可参考&#xff1a; VS Code环境下编辑、编译、下载Keil工程代码

《大模型时代-ChatGPT开启通用人工智能浪潮》精华摘抄

原书很长&#xff0c;有19.3w字&#xff0c;本文尝试浓缩一下其中的精华。 知识点 GPT相关 谷歌发布LaMDA、BERT和PaLM-E&#xff0c;PaLM 2 Facebook的母公司Meta推出LLaMA&#xff0c;并在博客上免费公开LLM&#xff1a;OPT-175B。 在GPT中&#xff0c;P代表经过预训练(…

排序算法之快速排序(挖坑法)

挖坑法的思想&#xff1a;记第一个数为key&#xff0c;要调整key的位置&#xff0c;使得左边的都要比key的小&#xff0c;右边的数都比key的大。 记录下关键字keybegin&#xff0c;把28那个位置挖坑holebegin 让end找到小于28&#xff08;key&#xff09;的数&#xff0c;把那…

开源现场总线协议栈(ethercat、ethernet/ip、opc ua、profinet、canopen、modbus)

ecat主站及其相关&#xff1a; 1.soem&#xff1a;GitHub - OpenEtherCATsociety/SOEM: Simple Open Source EtherCAT MasterSimple Open Source EtherCAT Master. Contribute to OpenEtherCATsociety/SOEM development by creating an account on GitHub.https://github.com/…