這裡就不畫圖了,文字表述即可。
假如現在有好幾個業務子系統共同完成乙個任務,當大量的任務來臨時,怎麼去保證每個任務都能跑完?這就需要我們對任務進行監控,我的思路是這樣的:建立乙個新的監控專案,定時遍歷資料庫的任務表,看看有沒有新來的任務,有的話取出來,加入乙個待執行佇列,並計算超時時間,再開乙個執行緒去判斷該任務是否跑完,若超時了,則觸發重發機制,若跑完了,則關閉執行緒。
這裡有三個問題要特別注意
1.監控執行緒不得對原有業務造成侵入,必須是額外的
2.一定要保證監控到每個任務,可以統一乙個執行緒監控全部,也可以每個任務開乙個執行緒(我這裡選擇後者)
3.超時時間的計算(由於任務多,會堆在佇列中,所以每個任務的超時時間都不同)
實施這個監控的步驟
1.在業務中,每完成乙個子業務,就把下乙個環節的路徑和資料儲存,這裡用kafka做訊息傳遞,因此儲存佇列、資料和狀態即可
2.在監控專案中,超時時間的計算方法
超時時間 = 任務執行預算時間 * 佇列個數(佇列必須用先進先出策略)
超時類
public class cmdrecordmonitor
else
//啟動執行緒監控該程式
...} }
3.判斷超時和重發,只給個大體思路,具體業務**我剔除掉了
@override
public void run()
//超時,從佇列裡面踢出
if(nowtime - last > cmdrecordmonitor.getovertime() && status < 5)
else if(cmdinfo.getstatus() == 2)
else if(cmdinfo.getstatus() == 3)
//再次加入監控
cmdqueue.pre_cmd_queue.remove(cmdid);
***=true;
...}
}catch(exception e)
} }
PHP Job任務監控
乙個 要能正常運轉起來,定時任務是必不可少的。要知道定時任務程式是否正確執行,要麼每天去看日誌檔案,要麼讓監控程式幫你盯著它們。ror的rake程式,用來排程任務指令碼,可以很方便地在任務開始 結束 發生錯誤時插入hook,從而實現job監控的目的。php沒有像rake這樣的程式來排程任務,所以下面...
sparkStreaming 任務監控
背景 公司一般做業務監控都是採用實時任務的方式,實時任務的可用性就更加需要保障了。監控指令碼 bin bash 去azkaban資料庫獲取所有的實時任務名稱,stream開頭的 stream.sql use azkaban select name from azkaban.projects wher...
crontab機會任務監控
1 如何檢視自己的計畫任務是否成功的執行?昨天crontab中的同步任務沒有執行,不知道是什麼原因沒有執行,貌似任務hang住了,想查詢一下crontab到底問題出在 或者hang在了什麼地方。1.linux 看 var log cron這個檔案就可以,可以用tail f var log cron觀...