分卡住與依賴變慢)
一個任務每秒上報心跳十分鐘沒完成任何步驟。另一個任務正在等待供應商生成視頻三分鐘沒有新輸出卻仍在預期時長內。只憑“幾秒沒動靜就重啟”會把這兩種情況混在一起?;钪?、前進、擁有寫權限我會分別記三件事heartbeat_at說明進程仍能通信progress_at說明業(yè)務檢查點確實前進generation決定誰有權提交結果。心跳不能續(xù)期業(yè)務進展日志刷屏也不能算完成步驟。Kubernetes 探針文檔區(qū)分啟動、存活和就緒。它們是進程管理背景不是業(yè)務任務完成度協(xié)議。任務層還需給各步驟定義正常等待區(qū)間例如“視頻供應商處理中”和“結果已下載”是不同檢查點。接管必須讓舊 owner 失去提交資格下面用邏輯時間演示 fencing。它不是分布式租約實現(xiàn)真實系統(tǒng)要讓數(shù)據(jù)庫以條件更新原子地分配代次并在每次落庫時驗證代次。class Task: def __init__(self): self.owner, self.gen, self.progress A, 1, 10 self.step 0 def take(self, new_owner, now, timeout): if now - self.progress timeout: return None self.owner, self.gen new_owner, self.gen 1 self.progress now return self.gen def commit(self, owner, gen, step, now): if (owner, gen) ! (self.owner, self.gen) or step self.step: return False self.step, self.progress step, now return True t Task() assert t.take(B, 15, 10) is None assert t.take(B, 30, 10) 2 assert not t.commit(A, 1, 1, 31) assert t.commit(B, 2, 1, 32) print(early takeover denied; stale owner fenced; new owner committed)本地 Python 3 執(zhí)行通過三項斷言沒有連接任務系統(tǒng)。這個實驗把關鍵反例說清楚超時后舊進程可能恢復如果存儲層不驗代次它依然能覆蓋新結果。應用里單獨檢查一次再寫入會留下競爭窗口。慢依賴別用重啟“治療”每個檢查點保存預期工作、最后進展證據(jù)和等待對象。超出觀察窗口先檢查供應商任務狀態(tài)和本地積壓確認需要接管后再撤銷舊代次、分配新 owner。外部扣款、視頻生成等副作用還要有穩(wěn)定冪等鍵否則 fencing 只能保護本地寫擋不住重復消費。十月的視頻 Agent 熱點適合用這個框架審視但本文不虛構某個平臺耗時或重啟收益。發(fā)布前應補齊真實依賴的等待上限、取消能力及冪等合同未核實前“卡住”只是待驗證假設。