前言
DolphinScheduler,简称DS,中文名海豚调度(海豚聪明、人性化,左右脑可互相换班,终生不用睡觉)。作者希望 DolphinScheduler 就像它的名字一样,成为一个开箱即用的灵活易用的调度系统。它于 17 年在易观数科立项, 19 年 3 月开源,8 月进入 Apache 孵化器, 已累计有 400+ 公司在生产上使用。
1、生态
官网:dolphinscheduler.apache.org/zh-cn/index…
公众号:海豚调度
微信群管理员的微信号:Leonard-ds
社区:Slack
2、优势
3、主要能力
4、原理
4.1、概念
4.1.1、Quartz相关
- Scheduler(任务调度容器,一般都是StdScheduler实例)。
- ProcessScheduleJob;(实现Quarts调度框架的Job接口的业务类,专门生成DolphinScheduler数据库业务表t_ds_commond数据)。
4.1.2、DolphinScheduler相关
- NettyRemotingServer(netty服务端,包含netty服务端serverBootstrap对象与netty服务端业务处理对象serverHandler),
- NettyServerHandler:(netty服务端业务处理类:包含各类处理器以及处理器对应的执行线程池);
- TaskPluginManager(任务插件管理器,不同类型的任务以插件的形式管理,在应用服务启动的时候,通过@AutoService加载实现了TaskChannelFactory接口的工厂信息到数据库,通过工厂对象来加载各类TaskChannel实现类到缓存);
- MasterRegistryClient(master操作zk的客户端,封装了master对于zk的所有操作,注册,查询,删除等);
- MasterSchedulerService(扫描服务,包含业务执行线程和work包含的nettyhe护短,负责任务调度业务,slot来控制集群模式下任务不被重复调度,底层实现是zookeeper分布式锁),
- WorkflowExecuteThread(真正的业务处理线程,. 通过插槽获取命令commond,执行之前会校验slot的变化,如果变化不执行,关键功能就是构建任务相关的参数,定义,优先级等,然后发送到队列,供队列处理线程消费),
- CommonTaskProcessor(普通任务处理器,实现ITaskProcessor接口,根据业务分为普通,依赖,子任务,阻塞,条件任务类型,包含了任务的提交,运行,分发,杀死等业务,通过@AutoService加载的类,根本就是封装了对)。
- TaskPriorityQueueImpl(任务队列,负责任务队列的存储控制);
- TaskPriorityQueueConsumer(任务队列消费线程,负责任务的根据负载均衡策略在worker之间分发与执行);
- ServerNodeManager (节点信息控制器,负责节点注册信息更新与槽位(slot)变更,底层实现是zookeeper分布式锁的应用);
- EventExecuteService(事件处理线程,通过缓存起来的任务处理线程,处理每个任务在处理过程中注册在线程事件队列中的事件)。
- FailoverExecuteThread(故障转移线程,包含Master和worker的)。
- MasterRegistryDataListener(托管在zk管理框架cautor的故障监听器,负责对worker和master注册在zk上的节点的新增和删除)
4.2、架构
4.3、启动流程活动图
4.4、宕机容错
4.5、Master容错流程
4.6、Worker容错流程
4.7、失败重试
5、源码分析
- dolphinscheduler-alert 告警模块,提供告警服务。
- dolphinscheduler-api web应用模块,提供 Rest Api 服务,供 UI 进行调用。
- dolphinscheduler-common 通用的常量枚举、工具类、数据结构或者基类
- dolphinscheduler-dao 提供数据库访问等操作。
- dolphinscheduler-remote 基于netty的客户端、服务端
- dolphinscheduler-server 日志与心跳服务
- dolphinscheduler-log-server LoggerServer 用于Rest Api通过RPC查看日志
- dolphinscheduler-master MasterServer服务,主要负责 DAG 的切分和任务状态的监控
- dolphinscheduler-worker WorkerServer服务,主要负责任务的提交、执行和任务状态的更新。
- dolphinscheduler-service service模块,包含Quartz、Zookeeper、日志客户端访问服务,便于server模块和api模块调用
- dolphinscheduler-ui 前端模块
6、操作手册
6.1、创建HTTP任务
post请求,参数被body的json格式,配置如下: