多任務(wù)分布式調(diào)度算法——合理分配任務(wù)資源

問題:A網(wǎng)站抓取需要8個小時,B網(wǎng)站需要半個小時,如果A網(wǎng)站先開始那么B網(wǎng)站需要8個小時候才能執(zhí)行到。如果A網(wǎng)站的緊迫性沒那么高,只期望能慢慢的刷新譬如論壇網(wǎng)站,而B網(wǎng)站期望能盡快執(zhí)行完畢。因此我們期望通過調(diào)配資源達(dá)到謀種和諧狀態(tài)。
分析:若設(shè)置權(quán)重B權(quán)重高,A權(quán)重低,可以滿足先執(zhí)行B網(wǎng)站,但是如果A網(wǎng)站是循環(huán)任務(wù),就會導(dǎo)致B網(wǎng)站永遠(yuǎn)獲取不到資源。所以我們期望A網(wǎng)站每次執(zhí)行的概率大,B網(wǎng)站執(zhí)行任務(wù)的概率小。所以就轉(zhuǎn)化為“權(quán)重to概率問題”。
設(shè)想方案參見:


調(diào)度方案

簡述:A、B、C三個網(wǎng)站的任務(wù),權(quán)重分別設(shè)為:2、3、5,它們衍生出來的抓取請求分別排隊入A、B、C隊列(當(dāng)然也可以拓展深度、廣度算法,比較簡單可自行按需拓展)。


權(quán)重池

這個圖是當(dāng)前任務(wù)權(quán)重池,新來添加完成移除。


權(quán)重轉(zhuǎn)概率

每個線程獲取任務(wù)時根據(jù)當(dāng)前權(quán)重池的所有權(quán)重,隨機(jī)一個隨機(jī)因子看會落到哪個范圍,然后從該范圍對應(yīng)的權(quán)重隊列中獲取任務(wù)執(zhí)行。
任務(wù)分布式調(diào)度時最后幾個請求被多個節(jié)點并行獲取并執(zhí)行時,很難區(qū)分到底是哪一個線程最后執(zhí)行完畢并通知任務(wù)結(jié)束。采用from_que/to_que這種方案比較優(yōu)。
任務(wù)分布式調(diào)度

并且若某個節(jié)點的任務(wù)執(zhí)行一半宕機(jī)后,還可以從to_que中將任務(wù)恢復(fù)并重新拉入from_que中供執(zhí)行,這些請求需要追加一個retry_times屬性,重試多次后需要記錄到failed_record表,供問題分析。
還可以從隊列中查看待執(zhí)行的任務(wù)、正在執(zhí)行的任務(wù)、需要重試的任務(wù)等等做統(tǒng)計和展示。

此方案是針對爬蟲分布式多網(wǎng)站抓取所涉及也適用于類似分布式調(diào)度, 若有好的建議可以深入討論分析~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容