任務(wù)調(diào)度系統(tǒng)-業(yè)務(wù)線資源隔離

問題背景

最近注意到自己負(fù)責(zé)的一個(gè)任務(wù)調(diào)度集群碰到了計(jì)算資源業(yè)務(wù)線分配不均的問題(即業(yè)務(wù)線資源隔離沒有做好):

  1. 在任務(wù)高峰期,調(diào)度系統(tǒng)會(huì)將計(jì)算資源偏向分配給(執(zhí)行耗時(shí)比較長的)大任務(wù),而(執(zhí)行耗時(shí)比較短的)小任務(wù)卻分到較少的計(jì)算資源。
  2. 當(dāng)某一個(gè)業(yè)務(wù)線的任務(wù)都是大任務(wù)時(shí),就會(huì)出現(xiàn)大部分計(jì)算資源都分配到該業(yè)務(wù)線,而其他業(yè)務(wù)線只分配到較少的計(jì)算資源。

閱讀該系統(tǒng)調(diào)度相關(guān)代碼稍加分析就明白了為什么會(huì)出現(xiàn)這種情況,在分析之前先講一下這個(gè)任務(wù)調(diào)度系統(tǒng)工作機(jī)制:

  1. 該系統(tǒng)為master-slave模式,即有一個(gè)中心調(diào)度節(jié)點(diǎn),多個(gè)工作節(jié)點(diǎn)。
  2. 工作節(jié)點(diǎn)會(huì)不停的嘗試請求中心調(diào)度節(jié)點(diǎn)獲取任務(wù)并執(zhí)行,循環(huán)往復(fù)。
  3. 當(dāng)工作節(jié)點(diǎn)請求調(diào)度節(jié)點(diǎn)獲取任務(wù)時(shí),調(diào)度節(jié)點(diǎn)會(huì)選擇一條業(yè)務(wù)線,并將該業(yè)務(wù)線的任務(wù)返回給工作節(jié)點(diǎn)。

問題分析

現(xiàn)在問題就出現(xiàn)在調(diào)度節(jié)點(diǎn)選擇業(yè)務(wù)線的算法上,目前的算法是:

  1. 各業(yè)務(wù)線提前配置好資源上下限,根據(jù)任務(wù)堆積情況進(jìn)行自動(dòng)擴(kuò)縮,即每條業(yè)務(wù)線分配的資源是實(shí)時(shí)計(jì)算的。
  2. 選擇業(yè)務(wù)線則是根據(jù)業(yè)務(wù)線實(shí)時(shí)配置的計(jì)算資源 / 所有業(yè)務(wù)線實(shí)時(shí)配置的資源之和 得到一個(gè)權(quán)重比例,然后根據(jù)該權(quán)重比例進(jìn)行選擇業(yè)務(wù)線。權(quán)重比例大(即該業(yè)務(wù)線配置的資源在所有業(yè)務(wù)線資源之和中所占比例大),被選中的概率就大。

這個(gè)算法粗略一看沒什么問題,但是仔細(xì)分析一下這里忽略了一個(gè)關(guān)鍵因素:沒有考慮任務(wù)執(zhí)行耗時(shí),默認(rèn)任務(wù)執(zhí)行耗時(shí)都一樣。
這樣會(huì)造成大任務(wù)占用了大部分的計(jì)算資源(即工作節(jié)點(diǎn)),這里簡單描述一下:

  1. 這里有A、B2條業(yè)務(wù)線,分別配置了5個(gè)計(jì)算資源(總共10個(gè)計(jì)算資源):可以計(jì)算得出每條業(yè)務(wù)線中的任務(wù)被執(zhí)行的概率是50%。
  2. 其中業(yè)務(wù)線A中有100大任務(wù),業(yè)務(wù)線B有200個(gè)小任務(wù)。假設(shè)大任務(wù)執(zhí)行需要20s,小任務(wù)執(zhí)行需要10s。那么正常情況業(yè)務(wù)線A總共需要(100 * 20) 2000s計(jì)算時(shí)間才能執(zhí)行完,業(yè)務(wù)線B也需要(200 * 10)2000s計(jì)算時(shí)間執(zhí)行完,同時(shí)在(2000s * 2 / 10)400s后執(zhí)行完成
  3. 實(shí)際情況是:
調(diào)度輪次 第1次 第2次 第3次 第4次 第5次 第6次 第N次
選擇的業(yè)務(wù)線 A B A B A B
業(yè)務(wù)線A剩余任務(wù) 99 99 98 98 97 97 100 - N/2
業(yè)務(wù)線B剩余任務(wù) 200 199 199 198 198 197 200 - N/2

大家發(fā)現(xiàn)端倪沒有,雖然在選擇任務(wù)線的邏輯上是公平的、符合預(yù)期的,但是任務(wù)本身是不公平的(任務(wù)執(zhí)行耗時(shí)有長有短),這就會(huì)造成大任務(wù)多的業(yè)務(wù)線實(shí)際上分配了比預(yù)期多得多的計(jì)算資源。

思考

到了這里,心里出現(xiàn)了一些疑問:

  1. 調(diào)度系統(tǒng)存在的意義是什么?
  2. 任務(wù)怎么調(diào)度才符合預(yù)期?

對于第一個(gè)問題,我給出一些我的見解:任務(wù)調(diào)度系統(tǒng)存在的意義是解決任務(wù)與計(jì)算資源之間的矛盾。如果計(jì)算資源足夠多,多到每一個(gè)任務(wù)都能夠立即得到執(zhí)行,那么調(diào)度系統(tǒng)就沒有存在的意義了。

第二個(gè)問題,任務(wù)怎么調(diào)度才符合預(yù)期。
還記得上文我提到的業(yè)務(wù)線提前配置好資源上下限嗎?
對,這個(gè)很關(guān)鍵。業(yè)務(wù)線配置的是資源的上下限,業(yè)務(wù)線只關(guān)心資源,只要分配給業(yè)務(wù)線的資源符合預(yù)期就行,不用關(guān)心這一次任務(wù)到底調(diào)度業(yè)務(wù)線A還是業(yè)務(wù)線B的任務(wù)。

理清楚了第二個(gè)問題,那么之前的調(diào)度算法問題就很明顯了,計(jì)算權(quán)重時(shí)應(yīng)該把計(jì)算資源的因素考慮進(jìn)去。

計(jì)算資源的視角

在任務(wù)調(diào)度系統(tǒng)中,看待資源,我覺得有兩種視角:

  1. 機(jī)器視角
  2. 計(jì)算時(shí)間視角

機(jī)器視角

這個(gè)很好理解,符合自然直覺。把物理機(jī)器當(dāng)成一種計(jì)算資源,這個(gè)物理機(jī)器分配給業(yè)務(wù)線A就是業(yè)務(wù)線A的計(jì)算資源,必須優(yōu)先執(zhí)行業(yè)務(wù)線A的任務(wù)。
那么在調(diào)度任務(wù)時(shí)邏輯就非常簡單了,這臺物理機(jī)器嘗試從調(diào)度節(jié)點(diǎn)獲取任務(wù)時(shí),應(yīng)該優(yōu)先獲取業(yè)務(wù)線A的任務(wù),只有當(dāng)業(yè)務(wù)線A沒有任務(wù)時(shí)才能借給其他業(yè)務(wù)線執(zhí)行任務(wù)。

在機(jī)器視角下,業(yè)務(wù)線資源分配邏輯被前置到了物理機(jī)器啟動(dòng)環(huán)節(jié),即在機(jī)器啟動(dòng)時(shí)就要確定好歸屬于哪條業(yè)務(wù)線。

在機(jī)器視角下,業(yè)務(wù)線資源隔離、分配變得很簡單了,但是也存在不小的問題,至少在我這個(gè)(動(dòng)態(tài)擴(kuò)縮容)場景下不太適用:因?yàn)槲覀兊恼{(diào)度系統(tǒng)每分鐘都要?jiǎng)討B(tài)計(jì)算每條業(yè)務(wù)線的目標(biāo)資源數(shù)量,很有可能因?yàn)橘Y源不足導(dǎo)致分配給某條業(yè)務(wù)線的機(jī)器一直起不來,就會(huì)導(dǎo)致該業(yè)務(wù)線沒有計(jì)算資源執(zhí)行任務(wù)。

在實(shí)際的操作過程中,我選擇了從計(jì)算時(shí)間視角看待計(jì)算資源,來解決我碰到的問題。

計(jì)算時(shí)間視角

在機(jī)器視角中,把物理機(jī)器看成計(jì)算資源;在計(jì)算時(shí)間視角中,把物理機(jī)器的計(jì)算時(shí)間抽象成計(jì)算資源。
怎么理解計(jì)算時(shí)間是一種計(jì)算資源呢?可以參考現(xiàn)在計(jì)算機(jī)中CPU的調(diào)度邏輯,把CPU計(jì)算資源按照時(shí)間進(jìn)行分片,按照一定的算法將計(jì)算時(shí)間分配給不同的進(jìn)程,達(dá)到多個(gè)進(jìn)程同時(shí)運(yùn)行的效果。

在計(jì)算時(shí)間視角下,不管底層機(jī)器有多少臺,始終按照業(yè)務(wù)線實(shí)時(shí)配置的計(jì)算資源 / 所有業(yè)務(wù)線實(shí)時(shí)配置的資源之和 得到一個(gè)權(quán)重比例去分配計(jì)算資源。
具體做法是:

  1. 業(yè)務(wù)線實(shí)時(shí)配置的計(jì)算資源 / 所有業(yè)務(wù)線實(shí)時(shí)配置的資源之和 得到一個(gè)權(quán)重比例,稱之為P吧。
  2. 統(tǒng)計(jì)本輪資源調(diào)度中,所有業(yè)務(wù)線已使用的計(jì)算時(shí)間之和,稱之為T吧。
  3. 比較本輪資源調(diào)度中,某業(yè)務(wù)線已使用的計(jì)算時(shí)間是否大于 T * P:若大于,則說明該業(yè)務(wù)線的計(jì)算時(shí)間已經(jīng)使用完,不能再參與本次任務(wù)調(diào)度了;反之則正常參與任務(wù)調(diào)度計(jì)算。
  4. 計(jì)算業(yè)務(wù)線實(shí)時(shí)配置的計(jì)算資源 / 剩下業(yè)務(wù)線實(shí)時(shí)配置的資源之和 得到一個(gè)權(quán)重比例,按照該比例進(jìn)行任務(wù)調(diào)度

通過計(jì)算時(shí)間的視角去分配計(jì)算資源,能夠屏蔽底層機(jī)器狀態(tài),比如資源不夠機(jī)器起不來、機(jī)器擴(kuò)縮容等沒有達(dá)到目標(biāo)機(jī)器數(shù)量的情況。
通過計(jì)算時(shí)間的視角抽象計(jì)算資源也有弊端:如果底層機(jī)器計(jì)算能力差異很大的時(shí)候仍然會(huì)干擾資源分配的準(zhǔn)確性。

本文由mdnice多平臺發(fā)布

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容