Phorge 現代化改造實戰(十):遷移 Webhook 投遞服務,率先解決重複投遞問題
Phorge 現代化改造實戰,記錄 Webhook 投遞服務遷移與解決重複投遞的架構設計。
本文是 Phorge 現代化改造系列的第十篇,重點探討如何將 Webhook 投遞服務 遷移至獨立的 Gorge 服務。這次改造迎來首個不由入站請求驅動的模組,改由背景常駐程序直接輪詢資料庫並搶佔任務。
• 解決重複投遞:單一實例在非同步處理時容易造成重複發送,因此採用基於 dateModified 的 樂觀鎖機制 (Compare-and-Set) 來確保任務搶佔的原子性。
• 精確時間窗口:處理了 租約期限 (Lease) 與 請求退避 (Backoff) 的時間交織,確保重試機制與逾期處理符合預期。
• 平滑無縫交接:採用嚴格的 雙向守衛 策略,避免 PHP 舊 Worker 與 Go 新服務同時執行而導致重複發送。
• 維持位元組相容:為了確保下游系統的 HMAC 簽章 驗證不失效,JSON 序列化必須維持原有的縮進、結尾換行與欄位順序。
「把兩個概念拆成兩個變數,只是完成了程式分離;只有它們各自依賴不被對方更新的狀態,行為才真正獨立。」
來源:蘇洋博客
閱讀原文 ↗