參考資料

  • 在處理請求時與其他服務做同步通訊會降低應用程式的可用性
  • 因此,你應該盡可能設計服務使用非同步 messaging

同步通訊會降低可用性
  • 「使用 REST 做服務間通訊」的問題在於「它是同步協定」
  • 同步協定 => 降低可用性
  • 如果你想最大化可用性,就必須最小化同步通訊的量。

消除同步互動
在處理同步請求的同時減少與其他服務同步通訊量的方法
  • 定義只有非同步 API 的服務(但公開 API 通常是 RESTful 的)

使用非同步互動風格

複製資料
  • 如果服務有同步 API,提升可用性的一種方式是複製資料
  • 服務維護一份處理請求時所需資料的副本。
  • 透過訂閱擁有資料的服務所發佈的 event 來保持副本是最新的
  • 缺點
    • 有時候需要複製大量的資料,這是沒效率的。
    • 它無法解決服務如何更新其他服務擁有的資料的問題

回傳回應後才完成處理
處理請求的方式如下:
  1. 只使用本地可用的資料來驗證請求。
  2. 更新自己的資料庫,包括將訊息插入 OUTBOX 表。
  3. 回傳回應給 client。
它會非同步地發送訊息給其他服務

缺點:
  • 讓 client 端更複雜