一、什麼是工作流?
在闡述什麼是工作流之前,先說一下工作流和普通任務的差別,在于依賴視圖。
普通任務本身他隻會有自己的 dag 圖,依賴視圖是無邊界的,不可控的,而工作流則是把整個工作流都展示出來,是有邊界的,可控的,這是工作流的優勢。下面為大家介紹工作流的相關功能:
01 工作流 — 功能介紹
● 虛拟節點
虛拟節點,它是不産生任何資料的空跑節點(即排程到該節點時,系統直接傳回成功,不會真正執行、不會占用資源或阻塞下遊節點運作),比如說任務并行執行,那麼就會用到虛拟節點。

● 周期生成
指排程系統按照排程配置自動定時運作的任務。
● 補資料運作
當業務變更,可以使用補資料功能。如修改了某個任務的代碼,可将本月的資料按照新的代碼重新跑一遍,立即生成所需資料。
● 排程屬性
工作流中的子任務依賴于父任務的周期排程屬性,父任務修改後,子任務同步修改,以工作流的周期排程屬性作為各個子節點的周期排程時間。
● 工作流所在目錄
修改工作流目錄同步修改工作流下的子任務目錄。
02 工作流 — 依賴成環
具體實作:
任務完成依賴的關系,key 為目前節點,value 為該節點的所有父節點 Map <long list> nodeMap。
周遊 nodeMap,以此周遊單集合中的每一個節點。每周遊一個新節點,就從頭檢查新節點之前的所有節點,用新節點和此節點之前所有節點依次做比較。如果發現新節點和之前的某個節點相同,則說明該節點被周遊過兩次,連結清單有環。如果之前的所有節點中不存在與新節點相同的節點,就繼續周遊下一個新節點,繼續重複剛才的操作。
二、Taier 工作流周期執行個體運作
了解完工作流的功能介紹後,我們來為大家分享 Taier 工作流周期執行個體運作:
01 Taier— 周期執行個體生成
Taier 主節點在啟動的時候,會開啟一個定時器,定時器會不停的去判斷當日的執行個體是否已經生成。如果沒有生成,就會觸發事件給 CycleJobBuilder 生成執行個體,再通過 JobDependency 封裝執行個體之間的依賴關系。
● CycleJobBuilder
用于生成周期執行個體。掃描資料庫任務表并且擷取 zk 上所有的 Taier 節點,把封裝後的執行個體配置設定到每一台 Taier 節點上。
● JobDependency
用于生成 job 之間的依賴關系。
02 Taier— 排程流程
在啟動 Taier 服務時,會啟動配置的所有排程器,并且開始掃描執行個體,并送出。
03 Taier— 工作流任務狀态修改邏輯
任務送出攔截器處理:
1、工作流下無子任務更新為完成狀态
2、工作流下任務都是完成狀态,任務送出隊列可以移除
3、同時更新工作流 engine_job 狀态,工作流隻有四種狀态,成功 / 失敗 / 取消 / 送出中:
(1) 所有子任務狀态為運作成功時,工作流狀态更新為成功
(2) 工作流狀态根據子任務的運作狀态來确定,失敗狀态存在優先級:運作失敗 > 送出失敗 > 上遊失敗
a. 子任務存在運作失敗時,工作流狀态更新為運作失敗
b. 子任務不存在運作失敗時,存在送出失敗,工作流狀态更新為送出失敗
c. 子任務不存在運作失敗時,不存在送出失敗,存在上遊失敗時,工作流狀态更新為上遊失敗
(3) 子任務存在取消狀态時,工作流狀态更新為取消
(4) 若子任務中同時存在運作失敗或取消狀态,工作流狀态更新為失敗狀态
(5) 其他工作流更新為運作中狀态
三、Taier1.3 即将上線功能
新增功能
・ChunJun 的向導模式資料源增強 hive1、hive2、hive3、sparkThrift、oracle、mysql、postgresql、sqlserver 、es7
・flink on standalone、python.shell、spark jar 、pyspark 支援