1、调度系统概述

1.1、调度系统介绍
  • 含义:在指定时间协调器通过分布式执行器并行执行任务。

(1)目标

​ 分布式环境下处理任务调度,在基于给定的时间点,给定的时间间隔或者给定执行次数自动的执行任务。

(2)作用

  • 分布式调度

  • 作业高可用

  • 最大限度利用资源

(3)常见调度方案

1.2、分布式调度平台设计目标

(1)强一致性

(2)服务高可用、系统稳健:保证服务器的正常工作

(3)弹性扩容:保证整体调度效率

(4)作业接入极简:任务创建尽可能简单化

(5)可视化管理后台:监控及管理,调度平台产品化

1.3、分布式任务调度轻量级架构设计

(1)task-manager:管理作业

(2)task-center:即调度中心,向节点分配作业

(3)Zookeeper:分布式协调工具,信息存储

(4)Job-executor:执行器,实现具体的业务逻辑

(5)DB:管理元数据

2、DolphinScheduler架构设计

2.1、DolphinScheduler1.x系统架构说明

(1)MasterServer

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

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

  • 主要服务及功能说明:

①Distributed Quartz 分布式调度组件,主要负责定时任务的启停操作,当 quartz 调起任务后, Master 内部会有线程池具体负责处理任务的后续操作

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

③MasterExecThread 主要是负责 DAG 任务切分、任务提交监控、各种不同命令类型的逻辑处理 ④MasterTaskExecThread 主要负责任务的持久化

(2)WorkerServer

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

  • 主要服务及功能说明:

① FetchTaskThread 主要负责不断从 Task Queue 中领取任务,并根据不同任务类型调用 。

②TaskScheduleThread 对应执行器

③LoggerServer 是一个 RPC 服务,提供日志分片查看、刷新和下载等功能

(3) ZooKeeper

​ 系统中的 MasterServer 和 WorkerServer 节点都通过 ZooKeeper 来进行集群管理 和容错

​ 系统基于 ZooKeeper 进行事件监听和分布式锁

(4)Task Queue

​ 提供任务队列的操作,目前队列也是基于 Zookeeper 来实现。由于队列中存的信息较少,不必担心队 列里数据过多的情况,实际上我们压测过百万级数据存队列,对系统稳定性和性能没影响。

(5)Alert

​ 提供告警相关接口,接口主要包括告警两种类型的告警数据的存储、查询和通知功能。

(6)API

​ API 接口层,主要负责处理前端UI层的请求。该服务统一提供 RESTful api 向外部提供请求服务。 接口 包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执 行等等。

(7)UI

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

2.2、架构设计思想

(1)中心化思想

  • 含义:分布式集群中的节点按照角色分工,大体上分为两种角色:Master&slave

①Master :主要负责任务分发监督 Slave 的健康状态,可以动态的将任务均衡到 Slave 上,以致 Slave 节点不至于“忙死”或”闲死”的状态。

②Worker:主要负责任务的执行工作并维护和 Master 的心跳,以便 Master 可以分配任务给 Slave。

  • 主要问题

    • Master单点故障
    • Master内存过载

(2)去中心化 - 动态中心化

  • 含义:集群中的管理者是被动态选择出来的,而不是预置的,并且集群在发生故障的时候,集群的节点会自发的举行"会议"来选举新的"管理者"去主持工作。

  • DolphinScheduler去中心化:Master/Worker 注册到 Zookeeper 中,实现 Master 集群和 Worker 集群无中心,并使用 **Zookeeper 分布式锁来选举其中的一台 Master 或 Worker 为“管理 者”**来执行任务。

(3)分布式锁

  • DolphinScheduler使用 ZooKeeper 分布式锁来实现同一时刻只有一台 Master 执行 Scheduler,或者只有 一台 Worker 执行任务的提交。

(4)线程不足循环等待问题

  • 含义:如果一个 DAG 中没有子流程,则如果 Command 中的数据条数大于线程池设置的阈值,则直接 流程等待或失败。 如果一个大的 DAG 中嵌套了很多子流程,如下图则会产生“死等”状态

①问题说明

​ 上图中 MainFlowThread 等待 SubFlowThread1 结束,SubFlowThread1 等待 SubFlowThread2 结 束, SubFlowThread2 等待 SubFlowThread3 结束,而 SubFlowThread3 等待线程池有新线程,则整 个 DAG 流程不能结束,从而其中的线程也不能释放。这样就形成的子父流程循环等待的状态。此时除 非启动新的 Master 来增加线程来打破这样的”僵局”,否则调度集群将不能再使用。

(2)解决方案

​ DolphinScheduler增加一种资源不足的 Command 类型,如果线程池不足,则将主流程挂起。这样线程池就有了新的线程,可以让资源不足挂起的流程重新唤醒执行。

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

(1)Master服务器宕机容错

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

  • Master容错示意图

  • ZooKeeper Master 容错完成之后则重新由 DolphinScheduler 中 Scheduler 线程调度,遍历 DAG 找到”正 在运行”和“提交成功”的任务,对”正在运行”的任务监控其任务实例的状态,对”提交成功”的任务需要判 断 Task Queue 中是否已经存在,如果存在则同样监控任务实例的状态,如果不存在则重新提交任务实 例。

(2)Worker宕机容错

  • Master Scheduler 线程一旦发现任务实例为 ”需要容错” 状态,则接管任务并进行重新提交。
  • 注意事项:由于 ”网络抖动” 可能会使得节点短时间内失去和 ZooKeeper 的心跳,从而发生节点的 remove 事件。对于这种情况,我们使用最简单的方式,那就是节点一旦和 ZooKeeper 发生超时连接,则直接 将 Master 或 Worker 服务停掉。

(3)任务失败重试

  • 重试措施:每一个业务节点 都可以配置失败重试的次数,当该任务节点失败,会自动重试,直到成功或者超过配 置的重试次数。逻辑节点不支持失败重试。但是逻辑节点里的任务支持重试。

①任务失败重试:是任务级别的,是调度系统自动进行的,比如一个 Shell 任务设置重试次数为 3 次,那么在 Shell 任务运行失败后会自己再最多尝试运行3次

②流程失败恢复:是流程级别的,是手动进行的,恢复是从只能从失败的节点开始执行或从当前节点开 始执行

③流程失败重跑:是流程级别的,是手动进行的,重跑是从开始节点进行

第二十章 分布式任务调度中心DolphinScheduler架构设计相关推荐

  1. 老徐FrankXuLei受邀为 @IGT中国研发中心 讲授《WCF分布式开发与SOA架构设计》课程...

    老徐FrankXuLei受邀为全球最大的×××游戏制造商@IGT中国研发中心讲授<WCF分布式开发与SOA架构设计>课程 @老徐FrankXuLei 受邀为全球最大的×××游戏制造商 @I ...

  2. hbase 二进制数据写入_分布式数据库HBase的架构设计详解(有彩蛋)

    原标题:分布式数据库HBase的架构设计详解(有彩蛋) 本文根据DBAplus社群第99期线上分享整理而成,文末还有好书送哦~ 讲师介绍 陈鸿威 云财经大数据CTO 曾任百度高级工程师,现主持设计开发 ...

  3. 老徐FrankXuLei受邀为花旗银行讲授《微软WCF服务分布式开发与SOA架构设计课程》...

    老徐FrankXuLei受邀为花旗银行上海研发中心讲授<微软WCF服务分布式开发与SOA架构设计课程> 受邀为花旗银行上海研发中心讲授<微软WCF服务分布式开发与SOA架构设计课程& ...

  4. 分布式任务调度中心xxl-job

    xxl-job 分布式任务调度中心优点 xxl-job简介 部署调度中心 执行器的配置 任务配置 分布式任务调度中心优点 1.多台机器集群部署保证定时任务不被重复执行 2.动态的调整定时任务的执行时间 ...

  5. 老徐FrankXuLei 受邀为花旗银行讲授《微软WCF服务分布式开发与SOA架构设计课程》...

    老徐FrankXuLei 受邀为花旗银行上海研发中心讲授<微软WCF服务分布式开发与SOA架构设计课程> 受邀为花旗银行上海研发中心讲授<微软WCF服务分布式开发与SOA架构设计课程 ...

  6. Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP)

    Java生鲜电商平台-商品中心的架构设计与源码解析(小程序/APP) 说明:Java生鲜电商平台中,由于商品的架构很大程度决定了电商的扩展性与伸缩性.对此根据自己多年的生鲜电商经验,整理了以下的商品中 ...

  7. @老徐FrankXuLei 受邀为上海师翊网络科技有限公司讲授《微软WCF分布式开发与SOA架构设计课程》

    原微博地址: http://weibo.com/1809430977/A4Iwn0Gth?type=repost 新浪微博:@老徐FrankXuLei 受邀为上海师翊网络科技有限公司讲授<微软W ...

  8. @老徐FrankXuLei 受邀为上海师翊网络科技有限公司讲授《微软WCF分布式开发与SOA架构设计课程》...

    原微博地址: http://weibo.com/1809430977/A4Iwn0Gth?type=repost 新浪微博:@老徐FrankXuLei 受邀为上海师翊网络科技有限公司讲授<微软W ...

  9. 保障IDC安全:分布式HIDS集群架构设计

    背景 近年来,互联网上安全事件频发,企业信息安全越来越受到重视,而IDC服务器安全又是纵深防御体系中的重要一环.保障IDC安全,常用的是基于主机型入侵检测系统Host-based Intrusion ...

最新文章

  1. exe4j生成可执行程序的使用方法
  2. python 数据分析基础 day1-初窥内容
  3. python数据预处理_Python数据预处理——缺失值、重复值
  4. VS Code 新版本重磅发布,迎来 2020 年首个重大更新!
  5. 8.Prometheus 监控技术与实践 --- Pushgateway
  6. 密码库LibTomCrypt学习记录——(0)LibTomCrypt简介
  7. 如何让微信好友永远拉黑不了你?
  8. 无法复制 文件:无法读源文件或磁盘
  9. 官宣 .NET RC 2
  10. jQuery插件及表单验证
  11. MYSQL 只能回环口链接_loopback回环口详解
  12. CodeForces 1438D
  13. 弘辽科技:618年中大决战,拖词拖价法快速玩转淘宝直通车
  14. 2021-11-15 入门前端VScode必装的常用插件, HTML+CSS常用属性速记.
  15. EGE基础:基础绘图篇
  16. 每周教育关注 | 紧箍咒?《研究生导师指导行为准则》发布
  17. 迷宫寻宝(BFS模板题)
  18. 初学编程,从抄代码开始就够了吗?看看我的故事!
  19. 利用dlib81人脸关键点提取额头脸颊ROI
  20. WDCP各种停止重启命令

热门文章

  1. Android期末作品
  2. (转)深度研究报告:108家基金公司都有独门武器,这是特色鲜明的十家公司
  3. C++抽奖(随机数+人名的不停闪烁)
  4. C语言学生成绩管理系统详解
  5. 【最优化】C++实现0.618法、Fibonacci法、二分法
  6. Java集合框架(List)
  7. 安卓Android调用C语言实现其他进程应用app的内存变量读取修改与利用BusyBox实现应用暂停和恢复(Native层)
  8. 基于Visual C 2010开发Windows7应用 多点触摸图片处理应用程序 1 同时处理多张图片
  9. 触心创业路 - 记一家VR游戏创业团队的经历
  10. linux脚本执行mysql命令