一、什么是事務(wù)
要么都成功伞鲫,要么都失敗
1. 本地事務(wù)
用關(guān)系型數(shù)據(jù)庫控制事務(wù)粘茄,基于關(guān)系型數(shù)據(jù)庫的事務(wù)被稱為本地事務(wù)。
數(shù)據(jù)庫事務(wù)的四大特性ACID
- A:原子性
- C:一致性
- I:隔離性秕脓,多線程操作數(shù)據(jù)庫柒瓣,并發(fā)的事務(wù)操作互不干擾,避免臟讀撒会、重復讀
- D:持久性嘹朗,事務(wù)完成后,數(shù)據(jù)的更改持久化到數(shù)據(jù)庫诵肛,不會被回滾屹培。
2. 分布式事務(wù)
多服務(wù)遠程協(xié)作,由于網(wǎng)絡(luò)問題就會導致分布式事務(wù)問題怔檩。
2.1 分布式事務(wù)產(chǎn)生的場景
a) 微服務(wù)架構(gòu)
b) 單體系統(tǒng)訪問多個數(shù)據(jù)庫實例
跨數(shù)據(jù)庫實例產(chǎn)生分布式事務(wù)
c) 多服務(wù)訪問同一個數(shù)據(jù)庫實例
以上均為產(chǎn)生分布式事務(wù)的典型場景褪秀。
二、分布式事務(wù)的基礎(chǔ)理論
1. CAP理論
- C:一致性
- A:可用性
-
P:分區(qū)容忍性
2. BASE理論
三薛训、分布式事務(wù)的解決方案
1. 兩階段提交2PC
1.1 什么是2PC
2PC將事務(wù)流程分為兩個階段:準備階段P媒吗、提交階段C
1.2 2PC解決方案
a) XA方案
b) Seata方案
TM是通知方,TC是執(zhí)行者
2. TCC
2.1 什么是TCC
Try成功就confirm或人工接入處理
Try失敗就cancel
confirm和cancel失敗需要重試乙埃,保證冪等性
2.2 TCC的解決方案
冪等:一個功能無論執(zhí)行多少次闸英,效果是一樣的
3. 可靠消息最終一致性
3.1 什么是可靠消息最終一致性事務(wù)
可靠消息最終一致性方案是指當事務(wù)發(fā)起方執(zhí)行完成本地事務(wù)后并發(fā)出一條消息,事務(wù)參與方(消息消費者)一定能夠接受消息并處理事務(wù)成功介袜,此方案強調(diào)的是只要消息發(fā)給事務(wù)參與方最終事務(wù)達成一致甫何。
1. 本地事務(wù)與消息發(fā)送的原子性問題
2. 事務(wù)參與方一定要接收到消息
如果沒有收到,重發(fā)機制
3. 消息重復消費的問題
由于網(wǎng)絡(luò)的原因遇伞,某個消費節(jié)點超時但消費成功辙喂,此時消息中間件會重復投遞此消息,就導致了消息的重復消費鸠珠。
要解決消息重復消費的問題就是要實現(xiàn)事務(wù)參與方的方法冪等性巍耗。
3.2 可靠消息最終一致性解決方案
1. 本地消息表方案
數(shù)據(jù)庫端需要定時掃描消息表,性能開銷會比較大渐排。
2. RocketMQ事務(wù)消息方案
4. 最大努力通知
4.1 什么是最大努力通知
a) 目標
發(fā)起通知方通過一定的機制最大努力將業(yè)務(wù)處理結(jié)果通知到接收方炬太。
- 有一定的消息重復通知機制
- 消息校對機制:如果盡最大努力也沒有通知到接收方,或者接收方消費消息后要再次消費驯耻,此時可由接收方主動向通知方查詢消息信息來滿足需求娄琉。
b)最大努力通知與可靠消息一致性
可靠消息一致性:發(fā)起方保證可靠性次乓,關(guān)注交易過程,消息從發(fā)出到接收的一致性孽水。
最大努力通知:接收方保證可靠性票腰,用于交易后的通知事務(wù),只提供消息接收的可靠性機制女气。
4.2 最大努力通知解決方案
a) 方案一
b) 方案二
三杏慰、總結(jié)
分布式事務(wù)對比分析:
- 2PC
最大的詬病是一個阻塞協(xié)議,RM在執(zhí)行分支事務(wù)后需要等待TM的決定炼鞠,此時服務(wù)會阻塞并鎖定資源缘滥。由于其阻塞機制和最差時間復雜度高,因此谒主,這種設(shè)計不能適應(yīng)隨著事務(wù)涉及的服務(wù)數(shù)量增加而擴展的需要朝扼,很難用于并發(fā)較高以及子事務(wù)生命周期較長(long-running transactions)的分布式服務(wù)中。 - TCC
2PC通常都是在跨庫的DB層面霎肯,而TCC則在應(yīng)用層面的處理擎颖,需要通過業(yè)務(wù)邏輯來實現(xiàn)。這種分布式事務(wù)的實現(xiàn)方式的優(yōu)勢在于观游,可以讓應(yīng)用自己定義數(shù)據(jù)操作的粒度搂捧,使得降低鎖沖突、提高吞吐量成為可能懂缕。而不足之處在于對應(yīng)用的侵入性非常強允跑,業(yè)務(wù)邏輯的每個分支都要實現(xiàn)try、confirm搪柑、cancel三個操作聋丝,實現(xiàn)難度大,需要安裝網(wǎng)絡(luò)狀態(tài)工碾、系統(tǒng)故障等不同的失敗原因?qū)崿F(xiàn)不同的回滾策略潮针。典型場景:登錄送優(yōu)惠券等。 - 可靠消息最終一致性
可靠消息最終一致性事務(wù)適合執(zhí)行周期長且實時性要求不高的場景倚喂,引入消息機制后,同步的事務(wù)操作變?yōu)榛谙?zhí)行的異步操作瓣戚,避免了分布式事務(wù)中的同步阻塞操作的影響端圈,并實現(xiàn)了兩個服務(wù)的解耦。典型的使用場景:注冊送積分子库、登錄送優(yōu)惠券等舱权。 - 最大努力通知
最大努力通知是分布式事務(wù)中要求最低的一種,適用于一些最終一致性時間敏感度低的業(yè)務(wù)仑嗅,允許發(fā)起通知方處理業(yè)務(wù)失敗宴倍,在接收通知方收到通知后積極進行失敗處理张症,無論發(fā)起通知方如何處理結(jié)果都不影響到接收通知方的后續(xù)處理;發(fā)起通知方需提供查詢執(zhí)行情況接口鸵贬,用于接收通知方校對結(jié)果俗他。典型場景:銀行通知、支付結(jié)果通知等阔逼。