分布式系統中,服務之間的互相呼叫有時候在某些業務場景下,被呼叫者需要將業務處理結果再通知到呼叫者,呼叫者才能繼續完成後續的業務操作,在這種場景下要保證業務的連續性、完整性、最終一致性等,就需要訊息通知的可靠性至關重要。結合以上的分析,最大努力通知就是服務間的訊息通知,要盡可能的設計和使用某些策略手段,達到最接近100%的通知成功率。
下單扣減庫存場景:
訂單服務收到下單的請求開始執行下單業務邏輯
訂單服務處理了一定的前置業務邏輯後,需要通知庫存服務扣減庫存
庫存服務接收到訊息通知之後扣減庫存,需要把結果告訴訂單服務
訂單服務接收到庫存服務的通知結果,繼續後續的業務邏輯,如訂單狀態的改變
在該場景中,一共存在兩次通知:訂單 to 庫存、庫存 to 訂單,這兩次都可能出現通知失敗的情況。
總結為兩點
通知一定要存在按照某些既定的策略重**送通知的機制,
通知方要存在通知傳送成功的確認機制
可靠訊息一致性可參考另一篇博文:分布式事務解決方案——可靠訊息最終一致性(本地訊息表、mq自身提供的可靠性保證)
可靠訊息一致性,發起通知方需要保證將訊息發出去,訊息的可靠性關鍵由通知方保證、
最大努力通知,發起通知方盡最大的努力的發訊息給消費方,但是訊息可能接收不到,此時需要消費方主動呼叫通知傳送方的介面查詢業務處理結果,通知的可靠性關鍵在消費方
可靠訊息一致性關注的是業務處理中的業務一致性,以非同步的方式完成業務處理。
最大努力通知關注的是業務處理後的通知事務,即將業務處理結果通知可靠的傳送出去
可靠訊息一致性要解決訊息從傳送到接收的一致性,即訊息發出並且一定能接收到
最大努力通知無法保證訊息從傳送到接收的一致性,只提供訊息接受的可靠性機制。可靠機制:最大努力的將訊息傳送給接收方,當訊息無法被接收方消費的時候,由接收方主動查詢訊息
本圖所示是利用mq的ack機制向消費者傳送生產者的訊息,流程如下:
通知方傳送通知到mq
接收方監聽mq的訊息佇列
接收方接收到訊息後處理業務,全部完成後回應mq ack
接收方若沒有回應ack,則mq會重**送該條業務訊息
接收方通過通知方提供的介面校對訊息傳送的一致性
與方案1思路類似不同點是採用了乙個單獨的通知系統來對mq進行訊息的監聽:
方案1中接收方直接監聽mq,只適合內部系統之間的訊息通知
分布式事務解決方案之四 最大努力通知
自學筆記 6.1.什麼是最大努力通知 最大努力通知也是一種解決分布式事務的方案,下邊是乙個是充值的例子 互動流程 1 賬戶系統呼叫充值系統介面 2 充值系統完成支付處理向賬戶系統發起充值結果通知 若通知失敗,則充值系統按策略進行重複通知 3 賬戶系統接收到充值結果通知修改充值狀態。4 賬戶系統未接收...
分布式事務 解決方案之最大努力通知理論
常見的分布式事務四大解決方案 2pc tcc 可靠訊息最終一致性 最大努力通知。前三種解決方案我們都分別從理論和實戰兩個維度做了講解。今天我們來說說最大努力通知這個解決方案的理論部分。先來看看下面這個充值的例子 互動流程如下 1 賬戶系統呼叫充值系統介面發起支付請求。2 充值系統完成支付處理向賬戶系...
分布式事務(五)之最大努力通知
最大努力通知型 best effort delivery 是最簡單的一種柔性事務,適用於一些最終一致性時間敏感度低的業務,且被動方處理結果不影響主動方的處理結果。典型的使用場景 如銀行通知 商戶通知等。最大努力通知型 best effort delivery 是最簡單的一種柔性事務,適用於一些最終一...