1 回答

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