在如今的分布式盛行的時(shí)代,分布式事務(wù)永遠(yuǎn)都是繞不開(kāi)的一個(gè)話題,今天就談?wù)劮植际绞聞?wù)相關(guān)的一致性與實(shí)戰(zhàn)解決方案。
01 為什么需要分布式事務(wù)
由于近十年互聯(lián)網(wǎng)的發(fā)展非常迅速,很多網(wǎng)站的訪問(wèn)越來(lái)越大,集中式環(huán)境已經(jīng)不能滿足業(yè)務(wù)的需要了,只能按照業(yè)務(wù)為單位進(jìn)行數(shù)據(jù)拆分(包含:垂直拆分與水平拆分),以及按照業(yè)務(wù)為單位提供服務(wù),從早期的集中式轉(zhuǎn)變?yōu)槊嫦蚍?wù)架構(gòu)的分布式應(yīng)用環(huán)境。
舉一個(gè)典型的例子,阿里的淘寶網(wǎng)站隨著訪問(wèn)量越來(lái)越大,只能按照商品、訂單、用戶、店鋪等業(yè)務(wù)為單位進(jìn)行數(shù)據(jù)庫(kù)拆分,以及按照業(yè)務(wù)為單位提供服務(wù)接口。

這個(gè)時(shí)候 為了完成一個(gè)簡(jiǎn)單的業(yè)務(wù)功能,比如:購(gòu)買(mǎi)商品后扣款,有可能需要橫跨多個(gè)服務(wù),涉及用戶訂單、商品庫(kù)存、支付等多個(gè)數(shù)據(jù)庫(kù),而這些操作又需要在同一個(gè)事務(wù)中完,這就涉及到到了分布式事務(wù)。
本質(zhì)上來(lái)說(shuō),分布式事務(wù)就是為了保證不同資源服務(wù)器的數(shù)據(jù)一致性。
02 分布式的一致性理論
最早加州大學(xué)伯克利分校 Eric Brewer教授提出一個(gè)分布式系統(tǒng)特性的CAP理論。
1.CAP 理論的不可能三角

- 一致性(Consistency)
- 可用性(Availability)
- 分區(qū)容錯(cuò)性(Partition tolerance)
在分布式系統(tǒng)中,是不存在同時(shí)滿足一致性 Consistency、可用性 Availability和分區(qū)容錯(cuò)性 Partition Tolerance三者的。
一句話總結(jié):一致性、可用性和分區(qū)容錯(cuò)在分布式事務(wù)中不可兼得。
在絕大多數(shù)的場(chǎng)景,都需要犧牲強(qiáng)一致性來(lái)?yè)Q取系統(tǒng)的高可用性,系統(tǒng)往往只需要保證最終一致性。
這也是是后來(lái)發(fā)展出的BASE理論的基礎(chǔ)。
2.BASE 理論

- Basically Available(基本可用)
- Soft state(柔軟狀態(tài))
- Eventually consistent(最終一致性)三個(gè)短語(yǔ)的簡(jiǎn)寫(xiě)。
BASE是對(duì)CAP中一致性和可用性權(quán)衡的結(jié)果,其來(lái)源于對(duì)大規(guī)模互聯(lián)網(wǎng)系統(tǒng)分布式實(shí)踐的結(jié)論,是基于CAP定理逐步演化而來(lái)的,其核心思想是即使無(wú)法做到強(qiáng)一致性(Strong consistency),但每個(gè)應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點(diǎn),采用適當(dāng)?shù)姆绞絹?lái)使系統(tǒng)達(dá)到最終一致性(Eventual consistency)。
03 分布式事務(wù)的解決方案
1.基于XA協(xié)議的兩階段提交 2PC(2-phase commit protocol)
XA是一個(gè)分布式事務(wù)協(xié)議,XA中大致分為兩部分:事務(wù)管理器和本地資源管理器,其中本地資源管理器往往由數(shù)據(jù)庫(kù)實(shí)現(xiàn),而事務(wù)管理器作為全局的調(diào)度者,負(fù)責(zé)各個(gè)本地資源的提交和回滾。

大致的流程:
- 第一階段是表決階段,所有參與者都將本事務(wù)能否成功的信息反饋發(fā)給協(xié)調(diào)者;
- 第二階段是執(zhí)行階段,協(xié)調(diào)者根據(jù)所有參與者的反饋,通知所有參與者,步調(diào)一致地在所有分支上提交或者回滾。
優(yōu)缺點(diǎn)
盡量保證了數(shù)據(jù)的強(qiáng)一致,實(shí)現(xiàn)成本較低,在各大主流數(shù)據(jù)庫(kù)都有自己實(shí)現(xiàn),存在單點(diǎn)故障問(wèn)題、性能問(wèn)題、跨數(shù)據(jù)庫(kù)問(wèn)題。
2.事務(wù)補(bǔ)償TCC模式
TCC方案其實(shí)是兩階段提交的一種改進(jìn),將整個(gè)業(yè)務(wù)邏輯的每個(gè)分支顯式的分成了Try、Confirm、Cancel三個(gè)操作。
Try部分完成業(yè)務(wù)的準(zhǔn)備工作,confirm部分完成業(yè)務(wù)的提交,cancel部分完成事務(wù)的回滾,基本原理如下圖所示:

優(yōu)缺點(diǎn)
對(duì)代碼有侵入性,降低了鎖沖突,提高了吞吐量,缺點(diǎn)是有時(shí)候并沒(méi)有那么好實(shí)現(xiàn)。
案例
螞蟻金服的DTS(prepare、commit、rollback)
3.消息隊(duì)列最終一致性方案
通過(guò)異步解耦的方式,通過(guò)第三方中間件

案例
RocketMQ RabbitMQ等均可實(shí)現(xiàn),RocketMQ 還有專門(mén)的事務(wù)型消息,新版的kafka也有。
總之,分布式系統(tǒng)中事務(wù)更多的是對(duì)CAP權(quán)衡,在實(shí)際應(yīng)用中,根據(jù)業(yè)務(wù)要求、開(kāi)發(fā)人員情況以及所用框架不同進(jìn)行調(diào)整。
本文轉(zhuǎn)載于:https://youzhixueyuan.com/distributed-transaction.html