本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
非同步通訊
相反地,在非同步通訊中,用戶端會向服務發出請求,但不會立即收到回應。在此情況下,用戶端通常只會收到接受請求的確認。
非同步通訊的優點包括:
-
事件驅動型架構支援 – 自然適用於事件來源和命令查詢責任隔離 (CQRS) 模式。
-
更好的資源管理 – 服務能夠根據其容量處理請求。
-
改善故障隔離 – 解耦 服務,防止層疊失敗。
-
峰值負載處理 – 透過訊息佇列更好地處理流量峰值。
缺點包括複雜性。例如:
-
如果用戶端需要非同步操作的結果,則實作機制來擷取或接收該結果需要更多精力。
-
疑難排解非同步操作可能更困難,因為疑難排解需要跨多個系統檢查日誌。
-
測試非同步操作可能更困難,因為測試需要在多個系統和服務之間進行協調。
非同步通訊的方法包括火災和忘記、宣告檢查、回呼和雙向通訊。
Fire 和 忘記
在觸發和忘記模式中,用戶端會向伺服器發出請求,並同步接收確認,指出伺服器已收到訊息並進行處理。不過,實際處理尚未發生,而且用戶端無法查看何時或如何完成。下圖說明此模式。
在此情況下,在物件持久保留之前,服務不應傳送確認。此持久性可以實作為資料庫寫入操作或將項目放入佇列中。
其他考量:
-
實作冪等性來處理重複的訊息。也就是說,每個訊息只應處理一次。
-
考慮無效字母佇列
來處理失敗。 -
監控訊息處理成功率。
宣告檢查
如果用戶端需要服務呼叫的結果,您可以建置服務,在收到請求時發出宣告檢查。下圖說明此模式。宣告檢查會實作為服務在其確認中傳回的識別符。用戶端稍後可以使用此識別符來檢查請求的狀態,並在請求完成時擷取結果。
用戶端必須實作機制來輪詢結果。這可以是自動化 (例如,每 n 分鐘可以執行一次檢查) 或手動實作,其中執行檢查是為了回應另一個事件或使用者動作。實作宣告檢查模式的服務應明確宣告檢查有效的時間長度。
最佳實務:
-
實作指數退避輪詢。
-
為宣告檢查設定適當的存留時間 (TTL)。
-
提供狀態端點以進行進度追蹤。
回電
在回呼模式中,用戶端會向服務發出請求,並提供服務在處理完成時聯絡的位置。用戶端不會等待結果,而處理會繼續。服務負責在處理完成時聯絡 據點並提供結果。回應的常見位置類型為 REST APIs 或佇列。下圖說明回呼模式。
實作:
-
實作失敗回呼的重試機制。
-
像其他 服務一樣保護回呼位置。
-
處理回呼逾時。
雙向通訊
若要實作雙向通訊,您必須在用戶端和服務之間建立具狀態的連線,這可讓用戶端和服務傳送和處理訊息。這會在下列圖表中進行說明。雖然通訊是非同步的,但服務必須能夠支援每個用戶端的開放連線。
實作考量:
-
訊息排序
-
序號
-
分割區策略
-
訊息排序
-
-
狀態管理
-
事件來源模式
-
狀態對帳
-
一致性模式
-
-
錯誤處理
-
監控與可觀測性
-
關聯 IDs
-
訊息追蹤
-
效能指標
-
系統運作狀態指標
-