在如今的分布式盛行的時代,分布式事務(wù)永遠(yuǎn)都是繞不開的一個話題,今天就談?wù)劮植际绞聞?wù)相關(guān)的一致性與實戰(zhàn)解決方案。
01 為什么需要分布式事務(wù)
由于近十年互聯(lián)網(wǎng)的發(fā)展非常迅速,很多網(wǎng)站的訪問越來越大,集中式環(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)境。
舉一個典型的例子,阿里的淘寶網(wǎng)站隨著訪問量越來越大,只能按照商品、訂單、用戶、店鋪等業(yè)務(wù)為單位進(jìn)行數(shù)據(jù)庫拆分,以及按照業(yè)務(wù)為單位提供服務(wù)接口。

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

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

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

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

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

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