01. 拋磚
敲黑板,講重點。今天我先拋一開放性話題,也是我平時面試候選人時經常談及的,看看你有沒有相關解決思路?
Q:有A、B兩個定時任務,其中任務 B 要在任務 A 執行完成后才能執行,如何保證任務的執行順序?
A:潛意識:啥、啥、啥,一臉懵?心情只能用下圖來形容。
從事金融相關研發的程序員,多多少少都了解,一個完整的系統,會像鍾表一樣,背后隱藏了諸多的齒輪任務在運轉。其中系統中的每個定時任務之間,難免會有前置依賴關系。
舉個業務場景:對接銀行的某理財產品,如果想統計收益,那么最常用的方式便是:雙方約定固定時間,定時從銀行獲取收益文件,然后解析收益文件入庫(任務 A);然后進行執行收益記賬任務(任務 B)。
那么如何保證收益記賬任務 B 執行時,獲取收益文件任務 A 已經執行完成了呢?
02. 思考
能用圖說懂的,不再瞎白話,一言不合,直接畫圖,上圖進行協助思考,相信你仔細看圖,肯定能搞清楚咋回事。
03. 何解
流程搞清楚,那么實現就分分鍾。簡單說一下最原始、最簡單的實現思路。
首先設計一張批量任務定義的表 t_job_define,摘取兩個核心字段示意一下。
任務編號:JOB_ID
前置任務編號:PRE_JOB_ID
接着設計一張批量任務跑批詳情表 t_job_run_detail,摘取兩個核心的字段示意一下。
任務編號:JOB_ID
跑批時間:BATCH_DATE
最后還是配個圖,釋義一下,我相信你肯定能看懂。
04. 升華
不喜歡土槍的,不妨嘗試一下土槍換炮。有精力的你,不妨了解一下阿茲卡班(Azkaban),畢竟每個技術都不需要太深入,用到的時候深入也不晚。但是一定要知道,技多不壓身。
https://azkaban.github.io/
05. 最后
條條思路通羅馬,我相信你肯定會有很多獨特的見解,也不乏好的實現思路,借助《聊齋志異》中的一句話“黃狸黑狸,得鼠者雄”,其實也就是鄧爺爺說的“不管是黑貓白貓,能抓住老鼠的就是好貓”。
今天的分享到這就結束了,主要想表達一下簡單的思想,你 get 到了沒?