分布式系統(tǒng)的定義:一個(gè)用戶的請(qǐng)求,由多個(gè)系統(tǒng)協(xié)同處理
思路:最終一致性 BASE理論(非實(shí)時(shí)一致性)
一.分布式事務(wù)的幾種解決方案
1.基于數(shù)據(jù)庫的XA/JTA協(xié)議的方式 --需要數(shù)據(jù)庫廠商支持
2.異步校驗(yàn)數(shù)據(jù)的方式? ? --支付寶、微信等主動(dòng)查詢訂單的狀態(tài)谍珊、對(duì)賬單的形式
3.基于可靠消息 (MQ)的解決方案 --異步場(chǎng)景谚殊、通用性強(qiáng)市俊、擴(kuò)展性強(qiáng)
4.TCC編程式解決方案--阿里等自己封裝的DTX
二.消息隊(duì)列中間件(MQ)
本質(zhì):存儲(chǔ)數(shù)據(jù)沿腰,獨(dú)立運(yùn)行(類似java LinkedBolckQueue)
沒有sql語句鲜锚、強(qiáng)制結(jié)構(gòu)化數(shù)據(jù)、強(qiáng)制事務(wù) --功能簡(jiǎn)單扯键,沒數(shù)據(jù)庫那么復(fù)雜 --性能比數(shù)據(jù)庫高很多
mq如何可靠:
1.如何確保消息一定發(fā)送到Mq?
1).mq有消息發(fā)送確認(rèn)機(jī)制--發(fā)送者可以收到確認(rèn)回執(zhí)(ack)
2).保存發(fā)送mq消息的數(shù)據(jù)表睦袖,保存狀態(tài)-- 收到回執(zhí),修改狀態(tài)
3).定時(shí)檢查消息表是否發(fā)送--未發(fā)送則重發(fā)
2.確保消息被正確消費(fèi)
1).消息消費(fèi)確認(rèn)機(jī)制--給mq發(fā)送回執(zhí)(ack)
2).未發(fā)送回執(zhí)荣刑,mq會(huì)繼續(xù)推送該消息
3).程序無法預(yù)知異常馅笙,需要手動(dòng)干預(yù)(監(jiān)控監(jiān)控、短信厉亏、微信進(jìn)行預(yù)警董习、手動(dòng)干預(yù))