Microservice Patterns - 3.4 Microservice 架構中的行程間通訊 - 使用非同步 Messaging 提升可用性
參考資料
- 在處理請求時與其他服務做同步通訊會降低應用程式的可用性
- 因此,你應該盡可能設計服務使用非同步 messaging
同步通訊會降低可用性
- 「使用 REST 做服務間通訊」的問題在於「它是同步協定」
- 同步協定 => 降低可用性
- 如果你想最大化可用性,就必須最小化同步通訊的量。
消除同步互動
在處理同步請求的同時減少與其他服務同步通訊量的方法
- 定義只有非同步 API 的服務(但公開 API 通常是 RESTful 的)
使用非同步互動風格

複製資料
- 如果服務有同步 API,提升可用性的一種方式是複製資料
- 服務維護一份處理請求時所需資料的副本。
- 透過訂閱擁有資料的服務所發佈的 event 來保持副本是最新的
- 缺點
- 有時候需要複製大量的資料,這是沒效率的。
- 它無法解決服務如何更新其他服務擁有的資料的問題
回傳回應後才完成處理
處理請求的方式如下:
- 只使用本地可用的資料來驗證請求。
- 更新自己的資料庫,包括將訊息插入 OUTBOX 表。
- 回傳回應給 client。
它會非同步地發送訊息給其他服務

缺點:
- 讓 client 端更複雜