[toc]
## 一、什么是dolphinscheduler?

Apache DolphinScheduler,是一個分布式易擴展的可視化DAG工作流任務調度系統。致力于解決數據處理流程中錯綜復雜的依賴關系,使調度系統在數據處理流程中**開箱即用**。
更多簡介信息請查看[官網](https://dolphinscheduler.apache.org/zh-cn/)。
本文就讓我們跟隨子涵先生來用圖說源碼~走你!┏ (゜ω゜)=?
## 二、圖說dolphinscheduler任務執行過程
### 2-1 概念梳理
為了方便大家容易理解,子涵先生先幫大家梳理一下Dolphinscheduler中的幾個概念:
- ProcessDefinition:流程圖定義,即用戶在項目空間下通過拖拽保存的任務信息;
- ProcessInstance:流程圖實例。了解Java的同學可以通過class信息與類實例,來類比processDefinition與processInstance的概念。
- Task:任務配置信息。一個流程圖中可以有多個任務。
- TaskInstance:任務實例。是根據任務配置信息生成的。
模塊
### 2-2 工作流執行過程源碼解析
#### APIServer的作用
用戶點擊"運行"按鈕時,工作流的執行過程就開始了。處理UI相關用戶請求的都是APIServer模塊,啟動命令由`ExecutorController.execute()`進行處理,最終交給持久化到`t_ds_command`這個隊列表中。

#### MasterSever的作用
MasterServer的主要作用是:解析任務創建流程實例、按照優先級提交任務隊列、負載均衡、把任務分發給workerServer。接下來我們用畫圖的方式看看他是怎么執行的。
MasterServer啟動后,會通過一個`masterSchedulerService`進行以下幾個步驟:
(1)MasterServer環境檢查;
(2)監聽工作流隊列(t_ds_command),查找可運行command();
(3)根據command返回流程實例;
(4)流程實例交給異步線程運行。

#### WorkerServer的作用
MasterServer使用netty的方式遠程調用workerServer處理任務。worker任務的處理主要交給`TaskExecuteProcessor`來負責執行。圖示如下:

## 三、結語
用圖說代碼是一個學習源碼的不錯的方式:一來可以清晰剖析代碼結構,二來通過記錄源碼關鍵位置,回過頭來再看時節省時間,且有跡可循。
有朋友私聊想獲得我的作圖,子涵特意把圖在[processOn](https://www.processon.com/i/55e3d74ee4b0e4854096c282)上畫了一遍,[點我直達??](https://www.processon.com/view/60e84e4ee401fd047de856a6)。
>感謝您的賞讀。客官,點贊、留言再走唄~或者留下您的問題一起探討\~
>讓我們一起共同進步!
>

- 寫在前面
- 如何閱讀源碼
- 第一部分 開源框架
- Netty
- 啟動過程
- SpringSecurityOauth2
- Quartz
- quartz啟動原理
- quartz定時調度任務觸發流程
- 第二部分 優質中間件源碼分析
- Canal
- Canal是如何偽裝為mysql的slave的?
- canal源碼調試
- Sentinel
- 核心概念梳理
- 滑動窗口實現原理
- jvm-sandbox
- jvm-sandbox-repeater
- Windows環境安裝
- 結果比對
- 第三部分 優質行業項目源碼分析
- 第一章 分庫分表實踐
- sharding-jdbc
- 第二章 DDD領域驅動
- 享同科技DDD開源框架
- J-IM
- 功能測試
- 悟空CRM
- 項目搭建
- 默認密碼
- dataX-web
- 項目搭建
- 部署報錯
- dolphinscheduler
- awescnb
- geek
- chrome插件-funds
- 優質開源項目備忘