2016-06-08 86 views
1

應用程序體系結構有三個微服務;我們稱他們爲A,B和C.微服務不同步

A是持有用戶權限(包括髮送SMS的權限)的權限,當權限更新時,它會爲感興趣的服務發佈事件。

B和C監聽權限更改,以控制發送短信。

主軌應用程序是與A,B,C.

積分

應用與權限,以防止學生甲接收任何SMS, 然後甲公佈它獲取在Queueworker延遲事件更新A; 應用程序開始通過B發送短信,由於Queueworker延遲,該信息尚未更新。

一旦權限更改爲false,我們如何確保(或者需要在設計中更改哪些內容以確保)用戶不會收到SMS?

回答

2

您正遇到分佈式系統的最大挑戰 - the CAP theorem。總之,分佈式系統(像你這樣)不能保證所有三個如下:

  • Ç onsistency - 所有的服務看到相同的數據在同一時間
  • 一個 vailability - 所有服務要求對方接收成功或失敗響應
  • P artition耐受性 - 系統繼續即使服務無法到達對方
0的功能

在你的具體問題中,缺乏一致性會傷害你。你可以修復它,但你必須放棄其他的一點。例如,在發送每個SMS之前,您可以讓服務B對服務A執行同步HTTP請求,以驗證目標收件人是否仍然有權接收SMS。這將解決您的一致性問題,但會創建一個依賴項,A必須啓動並運行B才能運行(即,您已從CAP中丟失了該代碼)。

您還可以通過發送SMS請求作爲事件,通過權限更新所經過的同一隊列來緩解此問題。在權限被禁用後,仍然可以發送短信,但只有在發送短信後允許更新纔會發生。這仍然缺乏一致性,但影響不那麼嚴重(以SMS延遲爲代價)。