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

DophineScheduler通俗版

1.DophineScheduler的架构

ZooKeeper:

AlertServer:

UI:

ApiServer:

  • 一个租户下可以有多个用户;
  • 一个用户可以有多个项目
  • 一个项目可以有多个工作流定义,每个工作流定义只属于一个项目;
  • 一个租户可以被多个工作流定义使用,每个工作流定义必须且只能选择一个租户;
  • 一个工作流定义可以有一个或多个定时的配置;
  • 一个工作流定义对应多个任务定义
  • 一个工作流定义可以有多个工作流实例,一个工作流实例对应一个或多个任务实例
  • Ps:此处的那个心跳机制是Hadoop的一种机制,他是维护master节点和slave节点的一种机制,每过一段时间呢slave节点就发送一个心跳让master知道他还活着,默认五分钟发送一次心跳可以自定义,(且当它1%的心跳失去的话就进入安全模式在此模式下只能进行元数据的读取,不能处理数据)
  • netty详见一篇文章看懂Netty框架 - 知乎,现在笔者还有些迷惑
  • 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,避免任务状态丢失;
  • DML(data manipulation language)是数据操纵语言:它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言。

    DDL(data definition language)是数据定义语言:DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用。

    DCL(DataControlLanguage)是数据库控制语言:是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。

  • 该服务包含:

  • WorkerManagerThread主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;
  • TaskExecuteThread主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;
  • RetryReportTaskStatusThread主要负责定时轮询向Master汇报任务的状态,直到Master回复状态的ack,避免任务状态丢失;
  • ZooKeeper服务,系统中的MasterServer和WorkerServer节点都通过ZooKeeper来进行集群管理和容错。另外系统还基于ZooKeeper进行事件监听和分布式锁。 我们也曾经基于Redis实现过队列,不过我们希望DolphinScheduler依赖到的组件尽量地少,所以最后还是去掉了Redis实现。
  • 提供告警服务,通过告警插件的方式实现丰富的告警手段。
  • API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。
  • 系统的前端页面,提供系统的各种可视化操作界面。

相关文章:

  • BOSS直聘推荐搜索系统工程师校招面经
  • mybatis类型转换器处理MYSQL数据库geometry类型转换
  • 免费的 UI 设计资源网站 Top 8
  • Java面试题136-150
  • LeeCode 3. 无重复字符的最长子串
  • Kafka(二)【文件存储机制 生产者】
  • 2024 年入局大模型:是否为时已晚?
  • 3.Eureka注册中心
  • 【C/C++】C/C++编程——C++ 开发环境搭建
  • Vue3+TS+dhtmlx-gantt实现甘特图
  • typing python 类型标注学习笔记
  • Vue3 Hooks函数使用及封装
  • Qt容器QMap(映射)
  • leetcode---Z字形变换
  • 数据结构<1>——树状数组
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • C学习-枚举(九)
  • HTTP那些事
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript实现分页效果
  • js对象的深浅拷贝
  • Objective-C 中关联引用的概念
  • socket.io+express实现聊天室的思考(三)
  • SpringCloud集成分布式事务LCN (一)
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 复习Javascript专题(四):js中的深浅拷贝
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 1.Ext JS 建立web开发工程
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • Hibernate主键生成策略及选择
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C#)一个最简单的链表类
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (顺序)容器的好伴侣 --- 容器适配器
  • (新)网络工程师考点串讲与真题详解
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (原創) 物件導向與老子思想 (OO)
  • (转)可以带来幸福的一本书
  • (转)为C# Windows服务添加安装程序
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .Net Web项目创建比较不错的参考文章
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /usr/bin/env: node: No such file or directory
  • @Autowired和@Resource装配
  • @Not - Empty-Null-Blank