DolphinScheduler

1,808 阅读3分钟

前言

DolphinScheduler,简称DS,中文名海豚调度(海豚聪明、人性化,左右脑可互相换班,终生不用睡觉)。作者希望 DolphinScheduler 就像它的名字一样,成为一个开箱即用的灵活易用的调度系统。它于 17 年在易观数科立项, 19 年 3 月开源,8 月进入 Apache 孵化器, 已累计有 400+ 公司在生产上使用。

1、生态

官网:dolphinscheduler.apache.org/zh-cn/index…

源码:github.com/apache/dolp…

公众号:海豚调度

微信群管理员的微信号:Leonard-ds

社区:Slack

2、优势

图片.png

3、主要能力

图片.png

4、原理

4.1、概念

4.1.1、Quartz相关

  1. Scheduler(任务调度容器,一般都是StdScheduler实例)。
  2. ProcessScheduleJob;(实现Quarts调度框架的Job接口的业务类,专门生成DolphinScheduler数据库业务表t_ds_commond数据)。

4.1.2、DolphinScheduler相关

  1. NettyRemotingServer(netty服务端,包含netty服务端serverBootstrap对象与netty服务端业务处理对象serverHandler),
  2. NettyServerHandler:(netty服务端业务处理类:包含各类处理器以及处理器对应的执行线程池);
  3. TaskPluginManager(任务插件管理器,不同类型的任务以插件的形式管理,在应用服务启动的时候,通过@AutoService加载实现了TaskChannelFactory接口的工厂信息到数据库,通过工厂对象来加载各类TaskChannel实现类到缓存);
  4. MasterRegistryClient(master操作zk的客户端,封装了master对于zk的所有操作,注册,查询,删除等);
  5. MasterSchedulerService(扫描服务,包含业务执行线程和work包含的nettyhe护短,负责任务调度业务,slot来控制集群模式下任务不被重复调度,底层实现是zookeeper分布式锁),
  6. WorkflowExecuteThread(真正的业务处理线程,. 通过插槽获取命令commond,执行之前会校验slot的变化,如果变化不执行,关键功能就是构建任务相关的参数,定义,优先级等,然后发送到队列,供队列处理线程消费),
  7. CommonTaskProcessor(普通任务处理器,实现ITaskProcessor接口,根据业务分为普通,依赖,子任务,阻塞,条件任务类型,包含了任务的提交,运行,分发,杀死等业务,通过@AutoService加载的类,根本就是封装了对)。
  8. TaskPriorityQueueImpl(任务队列,负责任务队列的存储控制);
  9. TaskPriorityQueueConsumer(任务队列消费线程,负责任务的根据负载均衡策略在worker之间分发与执行);
  10. ServerNodeManager (节点信息控制器,负责节点注册信息更新与槽位(slot)变更,底层实现是zookeeper分布式锁的应用);
  11. EventExecuteService(事件处理线程,通过缓存起来的任务处理线程,处理每个任务在处理过程中注册在线程事件队列中的事件)。
  12. FailoverExecuteThread(故障转移线程,包含Master和worker的)。
  13. MasterRegistryDataListener(托管在zk管理框架cautor的故障监听器,负责对worker和master注册在zk上的节点的新增和删除)

4.2、架构

图片.png

4.3、启动流程活动图

图片.png

4.4、宕机容错

图片.png

4.5、Master容错流程

图片.png

4.6、Worker容错流程

图片.png

4.7、失败重试

图片.png

5、源码分析

  1. dolphinscheduler-alert 告警模块,提供告警服务。
  2. dolphinscheduler-api web应用模块,提供 Rest Api 服务,供 UI 进行调用。
  3. dolphinscheduler-common 通用的常量枚举、工具类、数据结构或者基类
  4. dolphinscheduler-dao 提供数据库访问等操作。
  5. dolphinscheduler-remote 基于netty的客户端、服务端
  6. dolphinscheduler-server 日志与心跳服务
  7. dolphinscheduler-log-server LoggerServer 用于Rest Api通过RPC查看日志
  8. dolphinscheduler-master MasterServer服务,主要负责 DAG 的切分和任务状态的监控
  9. dolphinscheduler-worker WorkerServer服务,主要负责任务的提交、执行和任务状态的更新。
  10. dolphinscheduler-service service模块,包含Quartz、Zookeeper、日志客户端访问服务,便于server模块和api模块调用
  11. dolphinscheduler-ui 前端模块

6、操作手册

6.1、创建HTTP任务

post请求,参数被body的json格式,配置如下: 图片.png 图片.png