1. 概述
計(jì)算平臺的一個(gè)核心功能,是任務(wù)調(diào)度饵隙,包含任務(wù)之間的依賴處理、任務(wù)之間傳參沮脖、任務(wù)的執(zhí)行等金矛。
本文重點(diǎn)分析和介紹任務(wù)調(diào)度的需求總結(jié)、數(shù)據(jù)庫設(shè)計(jì)與架構(gòu)設(shè)計(jì)勺届。
2. 需求總結(jié)
2.1. 術(shù)語介紹
術(shù)語
- Pipeline驶俊,即管線,這里指實(shí)際的藥物研發(fā)管線免姿,例如plk1饼酿、zinc
- Job,或Workflow胚膊,即任務(wù)流故俐,是一系列Task的有向無環(huán)圖,包含所屬Pipeline紊婉、創(chuàng)建人药版、描述、定時(shí)配置喻犁、hook槽片、最大運(yùn)行實(shí)例數(shù)等
- Task,即任務(wù)肢础,是執(zhí)行某一個(gè)特定任務(wù)的參數(shù)集合还栓,包含任務(wù)類型、任務(wù)配置传轰、任務(wù)輸入剩盒、任務(wù)輸出等
- Job Instance,指任務(wù)流實(shí)例路召。每運(yùn)行一次Job勃刨,則產(chǎn)生一個(gè)Job Instance
- Task Instance波材,指任務(wù)實(shí)例。每運(yùn)行一次Task身隐,則產(chǎn)生一個(gè)Task Instance
實(shí)體之間關(guān)系
- Pipeline -> Job, 1 -> n
- Job -> Task, 1 -> n
- Job -> Job Instance, 1 -> n
- Task -> Task Instance, 1 -> n
- Job Instance -> Task Instance, 1 -> n
實(shí)體的操作
- 對于Pipeline廷区,支持修改、增加贾铝、刪除(沒有其相關(guān)聯(lián)的Job時(shí))隙轻、廢棄、完結(jié)
- 對于Job垢揩,支持修改玖绿、增加、刪除(將刪除其相關(guān)聯(lián)的所有Job Instance)叁巨、鎖定(鎖定后不能修改其配置)斑匪、解鎖、克隆
- 對于Job Instance锋勺,支持暫停蚀瘸、啟動、終止庶橱、重試
- 對于Task Instance贮勃,支持強(qiáng)制終止
2.2. 需求與功能描述
2.2.1. Job的運(yùn)行方法支持多種
- a.【完整Job】自動運(yùn)行,由定時(shí)器觸發(fā)苏章,例如每天晚上11點(diǎn)開始
- b.【完整Job】手動運(yùn)行寂嘉,由用戶手動觸發(fā),例如web ui或api觸發(fā)
- c.【部分Job】手動運(yùn)行單個(gè)Task枫绅,不包含該Task的下游Task
- d.【部分Job】手動運(yùn)行單個(gè)Task泉孩,包含該Task的下游Task
方法c和d,需要考慮
起始Task
的任務(wù)輸入
可以默認(rèn)其前置Task
最近一次Task Instance
的任務(wù)輸出
也可以將其前置Task
所有Task Instance
的任務(wù)輸出
按照時(shí)間羅列出來撑瞧,由用戶選擇其中一個(gè)或多個(gè)
如果前置Task
不存在Task Instance
棵譬,則提示warning,由用戶確定是否堅(jiān)持運(yùn)行
另外预伺,方法d的起始Task
可能不止一個(gè)订咸,要選擇一個(gè)最小的Subgraph
2.2.2. 修改Task的配置
支持修改、刪除或增加Task酬诀,修改Task包含Task依賴脏嚷、Task配置參數(shù)等。
Job的Task配置
- Job包含的Task配置瞒御,隨時(shí)可以修改父叙、增加或刪除,沒有限制
Job Instance的Task配置
- 創(chuàng)建Job Instance時(shí),會復(fù)制一份Job當(dāng)前的Task配置趾唱,作為其執(zhí)行計(jì)劃
- 所以涌乳,支持修改某個(gè)
未運(yùn)行
的Task參數(shù)、輸入甜癞、輸出夕晓,暫不支持修改任務(wù)依賴,也不支持新增或刪除
2.2.3. 日志查看
- 調(diào)度日志悠咱,按照J(rèn)ob Instance分為單獨(dú)文件蒸辆,用于查看和分析執(zhí)行情況
- 任務(wù)執(zhí)行日志,根據(jù)不同的任務(wù)類型析既,由任務(wù)自身存儲
2.2.4. 任務(wù)類型
- docker container
- docker swarm service
- slurm task