1 回答

TA貢獻1946條經驗 獲得超3個贊
既然你提到有并行和多個作業,下面是我們解決類似問題的方法。我們有一個報告系統來準備來自多個客戶的報告。有超過1000名客戶。
每個
ReportPusher
工作負責一個客戶在這項工作中,我們從不同的數據庫獲取報告并將所有數據推送到存儲桶(redis 列表)。
如果所有工作(有時是 99% 的工作)都完成工作,另一個
ReportCollector
工作應該完成它的工作。從單個存儲桶中獲取所有數據、格式化、創建 excel 并發送電子郵件。- 此收集器作業必須在所有
ReportPusher
作業完成后運行。
我們是怎么做的;
ReportPusher
同時觸發所有作業在某個地方設置觸發作業的總數(例如 redis 鍵)
$total
n分鐘后觸發
ReportCollector
(可能是15分鐘)每個
ReportPusher
作業在完成其過程時都會增加另一個鍵$incremented
15分鐘后
ReportCollector
工作時,做這些;如果
total
等于incremented count
讓 ReportCollector 起作用如果不是,則以 t 延遲(由您決定)+ 增加嘗試觸發相同的作業
在 n 次嘗試(您決定)之后,如果計數仍然不匹配(我上面提到的 %99),則計算報告。
如果一個/兩個客戶出現錯誤,此回退策略是為了防止完全失敗。我們不會僅僅因為一個/兩個客戶而丟棄所有計算數據(客戶的 %99)。您可以放置一些警報/錯誤跟蹤系統以在以后修復損壞的數據。
- 1 回答
- 0 關注
- 145 瀏覽
添加回答
舉報