先定義需求,不要先選技術
三種機制都能把系統 A 的變更帶到系統 B,但它們對即時性、流量與故障的處理方式不同。選型前應先確認幾件事:資料可以延遲多久、漏掉一筆是否可接受、事件是否必須依序處理、尖峰流量有多集中,以及來源系統能提供哪些介面。若這些條件沒有被寫清楚,團隊很容易因為追求即時而採用過重的架構,或為了簡單而留下難以補救的資料缺口。
還要區分通知與資料本身。Webhook 通常只需要通知接收端某個資源已改變,再由接收端查詢最新狀態;輪詢直接讀取來源資料;事件串流則常把足以處理業務的事件內容送入訊息系統。這個差異會影響敏感資料暴露、重送策略、稽核需求與來源系統負載。
Webhook:即時且輕量,但接收端必須為失敗而設計
當來源系統支援事件通知、事件量中低且希望在數秒內反應時,Webhook 通常是合理起點。例如 CRM 商機狀態更新後觸發 ERP 建單,或 LINE 使用者傳入訊息後啟動企業助理流程。來源端只有在事件發生時才送出請求,不必持續查詢,因此正常情況下流量直接且容易理解。
真正的難題不在 HTTP 端點,而在可靠性。接收端應先驗證簽章與時間戳,快速回應成功,再把工作放入內部佇列;不要在請求內同步完成所有資料庫與外部 API 操作。每個事件需要穩定的識別碼,消費端必須具備冪等性,因為網路逾時可能使來源端重送已經成功處理的事件。若來源端沒有重試、查詢事件紀錄或補送能力,Webhook 就不能成為唯一的同步保證。
事件也未必依發生順序抵達。若後到的舊事件可能覆蓋新狀態,應比較來源版本、更新時間或序號,而不是相信接收順序。實務上常搭配定期對帳作業,找出遺漏或長時間未同步的資料。
輪詢:相容性最好,也最容易低估成本
當既有 ERP、政府平台或第三方 SaaS 沒有可靠的事件通知時,輪詢往往是最務實的方案。它的優點是控制權在讀取端:可以調整頻率、暫停同步、從指定游標重新開始,也不需要把公開端點交給來源呼叫。對每日批次、庫存定期校準或不要求秒級反應的流程,輪詢通常比建置事件基礎設施更簡單。
不要每次掃描整張表或完整 API 清單。優先使用遞增 ID、更新時間、變更版本或分頁游標保存進度,並保留小幅重疊區間,以涵蓋時間精度、交易提交與跨系統時鐘差異。重疊會產生重複資料,因此寫入端仍需冪等。若來源支援 ETag、條件式請求或增量同步端點,也應善用以降低頻寬與查詢負載。
固定頻率不是唯一策略。正常時依業務所需間隔執行,遇到限流或錯誤時採指數退避並加入隨機抖動;大量積壓時則可縮短間隔或提高每批筆數,但仍須遵守來源限制。監控重點不只是請求是否成功,而是同步游標停留多久,以及來源最新資料與本地最新資料之間的延遲。
事件串流:適合多消費者與可重播需求
當同一批事件要供多個服務獨立使用、流量持續且可能突增,或需要保留事件以供重播與稽核時,事件串流才真正展現價值。訂單事件可以同時被庫存、通知、分析與風險服務消費,各服務以自己的進度讀取,不必讓來源逐一呼叫。串流平台也能把生產速度與消費速度解耦,讓下游短暫故障後繼續追趕。
代價是更高的設計與維運複雜度。團隊要決定分區鍵,因為順序通常只在同一分區內成立;還要管理消費者群組、保留期限、結構版本、權限、積壓與死信處理。所謂恰好一次往往不能只靠訊息平台保證,資料庫寫入、外部 API 與訊息確認之間仍可能失敗,因此消費端通常需要冪等鍵、交易式收件匣或等效的一致性模式。
事件格式應描述已經發生的事,並包含事件識別碼、來源、發生時間、實體識別碼與結構版本。發布端新增欄位時應保持向後相容;破壞性修改則要有清楚的版本與遷移期。若沒有這些治理,串流只會把點對點耦合轉成難以追蹤的資料契約問題。
用決策條件組合,而不是三選一
多數企業整合不必只選一種機制。Webhook 可以提供快速通知,輪詢或每日對帳負責補漏;外部 SaaS 的 Webhook 可以先進入內部佇列,再轉成公司統一的事件;串流處理即時變更,批次工作則定期重建快照。好的架構會把即時路徑與復原路徑分開考慮。
- 選 Webhook:來源原生支援可靠通知、延遲要求短、接收端可安全公開,而且有重試或補查機制。
- 選輪詢:來源能力有限、資料可容忍分鐘或更久的延遲,或團隊需要掌握讀取節奏與回補範圍。
- 選事件串流:事件量持續、多個下游需要獨立消費,並且保留、重播與流量解耦具有明確價值。
- 採混合模式:即時通知不能完全信任、外部與內部架構不同,或業務同時需要低延遲與可驗證的最終一致性。
無論採用哪一種方式,都應先定義事件識別、冪等規則、重試上限、死信處理、資料回補與告警責任。選型的目標不是使用最先進的工具,而是在來源限制與團隊能力之內,建立可觀察、可恢復、能被長期維護的整合流程。