本文是基于1.2.0版本进行分析,与最新版本的实现有一些出入,还请读者辩证的看待本源码分析。具体细节可能描述的不是很准确,仅供参考。1.源码版本DolphinScheduler-1.2.0版本2.技术框架所有模块均采用比较流行的SpringBoot框架3.架构图4.重要概念4.1流程定义在DolphinScheduler中,作业的DAG被命名为“流程定义”。4.2流程实例流程实例是流程定义的实例化,可以通过手动启动或定时调度生成,流程定义每运行一次,产生一个流程实例。流程实例由Master解析流程定义生成。4.3任务实例任务实例是流程定义中任务节点的实例化,标识着具体的任务执行状态。4.4定时DAG的触发频率。与DAG概念隔离,单独创建、单独管理,一个DAG可以没有与之对应的定时。5.架构说明5.1Quartz内部对Quartz进行了一个封装,org.apache.dolphinscheduler.server.quartz.QuartzExecutors仅仅提供增加、删除作业的基础功能。其作业的状态等信息保存在数据库中以QRTZ_开头的表。为了将实际作业的定义与Quartz隔离,抽象了一个ProcessScheduleJob类,用它来创建JobDetail。该类仅仅是根据流程定义的定时等信息创建了一个CommandType.SCHEDULER类型的Command对象,然后插入了数据库,并没有的执行任务的具体逻辑。5.2MasterSchedulerThread架构图中有一个CommandScanner,对应到源码中就是org.apache.dolphinscheduler.server.master.runner.MasterSchedulerThread类。这是一个扫描线程,定时扫描数据库中的t_ds_