(自學筆記)
6.1.
什麼是最大努力通知
最大努力通知也是一種解決分布式事務的方案,下邊是乙個是充值的例子:
互動流程:
1、賬戶系統呼叫充值系統介面 2
、充值系統完成支付處理向賬戶系統發起充值結果通知
若通知失敗,則充值系統按策略進行重複通知
3、賬戶系統接收到充值結果通知修改充值狀態。
4、賬戶系統未接收到通知會主動呼叫充值系統的介面查詢充值結果。
通過上邊的例子我們總結最大努力通知方案的目標:
目標:發起通知方通過一定的機制最大努力將業務處理結果通知到接收方。
具體包括:
1、有一定的訊息重複通知機制。
因為接收通知方可能沒有接收到通知,此時要有一定的機制對訊息重複通知。
2、訊息校對機制。
如果盡最大努力也沒有通知到接收方,或者接收方消費訊息後要再次消費,此時可由接收方主動向通知方查詢訊息
資訊來滿足需求。
最大努力通知與可靠訊息一致性有什麼不同?
1、解決方案思想不同
可靠訊息一致性,發起通知方需要保證將訊息發出去,並且將訊息發到接收通知方,訊息的可靠性關鍵由發起通知
方來保證。
最大努力通知,發起通知方盡最大的努力將業務處理結果通知為接收通知方,但是可能訊息接收不到,此時需要接
收通知方主動呼叫發起通知方的介面查詢業務處理結果,通知的可靠性關鍵在接收通知方。
2、兩者的業務應用場景不同
可靠訊息一致性關注的是交易過程的事務一致,以非同步的方式完成交易。
最大努力通知關注的是交易後的通知事務,即將交易結果可靠的通知出去。
3、技術解決方向不同
可靠訊息一致性要解決訊息從發出到接收的一致性,即訊息發出並且被接收到。
最大努力通知無法保證訊息從發出到接收的一致性,只提供訊息接收的可靠性機制。可靠機制是,最大努力的將消
息通知給接收方,當訊息無法被接收方接收時,由接收方主動查詢訊息(業務處理結果)。
6.2.
解決方案
通過對最大努力通知的理解,採用mq的
ack機制就可以實現最大努力通知。
方案1:
本方案是利用mq的
ack機制由
mq向接收通知方傳送通知,流程如下:
1、發起通知方將通知發給
mq。
使用普通資訊機制將通知發給
mq。
注意:如果訊息沒有發出去可由接收通知方主動請求發起通知方查詢業務執行結果。(後邊會講)
2、接收通知方監聽
mq。
3、接收通知方接收訊息,業務處理完成回應
ack。
4、接收通知方若沒有回應
ack則
mq會重複通知。
mq會按照間隔
1min
、
5min
、
10min
、
30min
、
1h
、
2h
、
5h
、
10h
的方式,逐步拉大通知間隔
(如果mq採用
rocketmq
,在broker
中可進行配置),直到達到通知要求的時間視窗上限。
5、接收通知方可通過訊息校對介面來校對訊息的一致性。
方案2:
本方案也是利用mq的
ack機制,與方案
1不同的是應用程式向接收通知方傳送通知,如下圖:
互動流程如下:
1、發起通知方將通知發給
mq。
使用可靠訊息一致方案中的事務訊息保證本地事務與訊息的原子性,最終將通知先發給
mq。
2、通知程式監聽
mq,接收
mq的訊息。
方案1中接收通知方直接監聽
mq,方案
2中由通知程式監聽mq。
通知程式若沒有回應
ack則
mq會重複通知。
3、通知程式通過網際網路介面協議(如
)呼叫接收通知方案介面,完成通知。
通知程式呼叫接收通知方案介面成功就表示通知成功,即消費
mq訊息成功,
mq將不再向通知程式投遞通知消 息。4
、接收通知方可通過訊息校對介面來校對訊息的一致性。
方案1和方案2
的不同點:
1、方案1
中接收通知方與
mq介面,即接收通知方案監聽
mq,此方案主要應用與內部應用之間的通知。
2、方案2
中由通知程式與
mq介面,通知程式監聽
mq,收到
mq的訊息後由通知程式通過網際網路介面協議呼叫接收
分布式事務 解決方案之最大努力通知理論
常見的分布式事務四大解決方案 2pc tcc 可靠訊息最終一致性 最大努力通知。前三種解決方案我們都分別從理論和實戰兩個維度做了講解。今天我們來說說最大努力通知這個解決方案的理論部分。先來看看下面這個充值的例子 互動流程如下 1 賬戶系統呼叫充值系統介面發起支付請求。2 充值系統完成支付處理向賬戶系...
分布式事務解決方案 最大努力通知以及解決方案
分布式系統中,服務之間的互相呼叫有時候在某些業務場景下,被呼叫者需要將業務處理結果再通知到呼叫者,呼叫者才能繼續完成後續的業務操作,在這種場景下要保證業務的連續性 完整性 最終一致性等,就需要訊息通知的可靠性至關重要。結合以上的分析,最大努力通知就是服務間的訊息通知,要盡可能的設計和使用某些策略手段...
事務 分布式事務解決方案
事務acid特性 事務隔離級別 指的是讀和寫同時出現時出現的資料不一致問題。事務的一致性問題 存在問題問題描述 髒讀 dirty read 針對的是單條資料。即乙個更新操作a修改了某一條資料,但尚未提交該事務,此時另乙個讀操作b來查詢該條資料,讀到的是修改後的但尚未提交的資料。不可重複讀 unrep...