DolphinScheduler2.0执行流程-MasterServer

 

 

术语:
process 工作流
process definition 工作流定义
process instance 工作流实例
task instance 任务实例


Master运行流程

启动master
    MasterServer的main()方法

    MasterServer的run()方法
        初始化netty远程服务
        注册到zookeeper
        启动容错
        调用MasterSchedulerService.start方法,start方法实际调用了Thread.start方法,Thread.start调用的是MasterSchedulerService.run方法
    MasterSchedulerService的run()方法
        进入一个死循环(一定条件下可以退出)
        检查资源是否够用(mem,cpu),如果资源不够,睡1秒
        调用scheduleProcess()方法
            调用findOneCommand()方法
            调用handleCommand()方法返回一个processInstance,将一个command转换成processInstance,并删除command
            如果processInstance不为空,则利用processInstance信息生成一个WorkflowExecuteThread实例
            调用masterExecService.execute(workflowExecuteThread),把workflowExecuteThread加入masterExecService线程池。        
    workflowExecuteThread的run()方法
        run()调用 startProcess()方法
            调用buildFlowDag来构建工作流dag图(build process dag)
            调用initTaskQueue来初始化任务队列(init task queue)
            调用submitPostNode(null)提交初始节点
                submitPostNode方法第一次运行会将dag图的初始节点(第一个task instance)加入standByList,然后调用submitStandByTask运行standByList中就绪的task instance.
                而submitStandByTask运行成功后又会返回来再次调用submitPostNode()方法,使得运行成功的task instance节点的后续节点能够加入到standByList。
                submitStandByTask中也会调用submitTaskExec(task)方法运行。
                
                    submitTaskExec()方法会调用taskProcessor.submit()方法
                        taskProcessor.submit()调用时候有多种选择,一般走CommonTaskProcessor类的submit()方法,当然还有ConditionTaskProcessor/DependentTaskProcessor/SubTaskProcessor/SwitchTaskProcessor等类的submit方法。
                        submit()方法会执行processService.submitTask()方法和CommonTaskProcessor.dispatchTask()方法
                            submitTask()方法会将task存入db,将子工作流存入command表。
                            dispatchTask()方法有待进一步探究
                    submitTaskExec()紧接着会调用taskProcessor.run()方法
                        
        run()调用 handleEvents()方法
            

posted @ 2021-11-26 15:49  田野与天  阅读(758)  评论(0编辑  收藏  举报