分布式事务解决方案框架(LCN)
事務(wù)概念
事務(wù)特性(ACID)
原子性(A)
所謂的原子性就是說,在整個事務(wù)中的所有操作,要么全部完成,要么全部不做,沒有中間狀態(tài)。對于事務(wù)在執(zhí)行中發(fā)生錯誤,所有的操作都會被回滾,整個事務(wù)就像從沒被執(zhí)行過一樣。
一致性(C)
事務(wù)的執(zhí)行必須保證系統(tǒng)的一致性,就拿轉(zhuǎn)賬為例,A有500元,B有300元,如果在一個事務(wù)里A成功轉(zhuǎn)給B50元,那么不管并發(fā)多少,不管發(fā)生什么,只要事務(wù)執(zhí)行成功了,那么最后A賬戶一定是450元,B賬戶一定是350元。
隔離性(I)
所謂的隔離性就是說,事務(wù)與事務(wù)之間不會互相影響,一個事務(wù)的中間狀態(tài)不會被其他事務(wù)感知。
持久性(D)
所謂的持久性,就是說一單事務(wù)完成了,那么事務(wù)對數(shù)據(jù)所做的變更就完全保存在了數(shù)據(jù)庫中,即使發(fā)生停電,系統(tǒng)宕機(jī)也是如此。
這種特性 簡稱 剛性事物
分布式事務(wù)
分布式事務(wù)產(chǎn)生原因
分布式事物產(chǎn)生的原因
分布式事務(wù)產(chǎn)生的場景
在分布式系統(tǒng),都會垂直拆分?jǐn)?shù)據(jù)庫,分為支付數(shù)據(jù)庫、訂單數(shù)據(jù)庫、積分?jǐn)?shù)據(jù)庫、優(yōu)惠全數(shù)據(jù)庫等,業(yè)務(wù)組成,分為多個數(shù)據(jù)源,會產(chǎn)生分布式事物問題。
spring事務(wù)和分布式事務(wù)的區(qū)別是什么?
spring事務(wù),本地事務(wù)
分布式事務(wù)是跨服務(wù)間的通訊(不同的數(shù)據(jù)庫連接)
分布式理論知識
CPA理論
CAP由Eric Brewer在2000年P(guān)ODC會議上提出[1][2],是Eric Brewer在Inktomi[3]期間研發(fā)搜索引擎、分布式web緩存時得出的關(guān)于數(shù)據(jù)一致性(consistency)、服務(wù)可用性(availability)、分區(qū)容錯性(partition-tolerance)的猜想:
? 數(shù)據(jù)一致性(consistency):如果系統(tǒng)對一個寫操作返回成功,那么之后的讀請求都必須讀到這個新數(shù)據(jù);如果返回失敗,那么所有讀操作都不能讀到這個數(shù)據(jù),對調(diào)用者而言數(shù)據(jù)具有強(qiáng)一致性(strong consistency) (又叫原子性 atomic、線性一致性 linearizable consistency)[5]
? 服務(wù)可用性(availability):所有讀寫請求在一定時間內(nèi)得到響應(yīng),可終止、不會一直等待
? 分區(qū)容錯性(partition-tolerance):在網(wǎng)絡(luò)分區(qū)的情況下,被分隔的節(jié)點(diǎn)仍能正常對外服務(wù)
Base理論
BASE理論是指,Basically Available(基本可用)、Soft-state( 軟狀態(tài)/柔性事務(wù))、Eventual Consistency(最終一致性)。是基于CAP定理演化而來,是對CAP中一致性和可用性權(quán)衡的結(jié)果。核心思想:即使無法做到強(qiáng)一致性,但每個業(yè)務(wù)根據(jù)自身的特點(diǎn),采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性。
1、基本可用:指分布式系統(tǒng)在出現(xiàn)故障的時候,允許損失部分可用性,保證核心可用。但不等價于不可用。比如:搜索引擎0.5秒返回查詢結(jié)果,但由于故障,2秒響應(yīng)查詢結(jié)果;網(wǎng)頁訪問過大時,部分用戶提供降級服務(wù),等。
2、軟狀態(tài):軟狀態(tài)是指允許系統(tǒng)存在中間狀態(tài),并且該中間狀態(tài)不會影響系統(tǒng)整體可用性。即允許系統(tǒng)在不同節(jié)點(diǎn)間副本同步的時候存在延時。
3、最終一致性:
系統(tǒng)中的所有數(shù)據(jù)副本經(jīng)過一定時間后,最終能夠達(dá)到一致的狀態(tài),不需要實(shí)時保證系統(tǒng)數(shù)據(jù)的強(qiáng)一致性。最終一致性是弱一致性的一種特殊情況。BASE理論面向的是大型高可用可擴(kuò)展的分布式系統(tǒng),通過犧牲強(qiáng)一致性來獲得可用性。ACID是傳統(tǒng)數(shù)據(jù)庫常用的概念設(shè)計(jì),追求強(qiáng)一致性模型。
ACID,指數(shù)據(jù)庫事務(wù)正確執(zhí)行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。
柔性事務(wù)和剛性事務(wù)
柔性事務(wù)滿足BASE理論(基本可用,最終一致)
剛性事務(wù)滿足ACID理論
本文主要圍繞分布式事務(wù)當(dāng)中的柔性事務(wù)的處理方式進(jìn)行討論。
柔性事務(wù)分為
兩階段型
補(bǔ)償型
異步確保型
最大努力通知型幾種。 由于支付寶整個架構(gòu)是SOA架構(gòu),因此傳統(tǒng)單機(jī)環(huán)境下數(shù)據(jù)庫的ACID事務(wù)滿足了分布式環(huán)境下的業(yè)務(wù)需要,以上幾種事務(wù)類似就是針對分布式環(huán)境下業(yè)務(wù)需要設(shè)定的。
什么是XA接口
XA是一個分布式事務(wù)協(xié)議,由Tuxedo提出。XA中大致分為兩部分:事務(wù)管理器和本地資源管理器。其中本地資源管理器往往由數(shù)據(jù)庫實(shí)現(xiàn),比如Oracle、DB2這些商業(yè)數(shù)據(jù)庫都實(shí)現(xiàn)了XA接口,而事務(wù)管理器作為全局的調(diào)度者,負(fù)責(zé)各個本地資源的提交和回滾。XA實(shí)現(xiàn)分布式事務(wù)的原理如下:
什么是Jta
作為java平臺上事務(wù)規(guī)范JTA(Java Transaction API)也定義了對XA事務(wù)的支持,實(shí)際上,JTA是基于XA架構(gòu)上建模的,在JTA 中,事務(wù)管理器抽象為javax.transaction.TransactionManager接口,并通過底層事務(wù)服務(wù)(即JTS)實(shí)現(xiàn)。像很多其他的java規(guī)范一樣,JTA僅僅定義了接口,具體的實(shí)現(xiàn)則是由供應(yīng)商(如J2EE廠商)負(fù)責(zé)提供,目前JTA的實(shí)現(xiàn)主要由以下幾種:
1.J2EE容器所提供的JTA實(shí)現(xiàn)(JBoss)
2.獨(dú)立的JTA實(shí)現(xiàn):如JOTM,Atomikos.這些實(shí)現(xiàn)可以應(yīng)用在那些不使用J2EE應(yīng)用服務(wù)器的環(huán)境里用以提供分布事事務(wù)保證。如Tomcat,Jetty以及普通的java應(yīng)用。
基于XA協(xié)議的兩階段(2PC)提交
所謂的兩個階段是指:第一階段:準(zhǔn)備階段(投票階段)和第二階段:提交階段(執(zhí)行階段)。
XA一般由兩階段完成,稱為two-phase commit(2PC)。
階段一為準(zhǔn)備階段,即所有的參與者準(zhǔn)備執(zhí)行事務(wù)并鎖住需要的資源。參與者ready時,向transaction manager匯報自己已經(jīng)準(zhǔn)備好。
階段二為提交階段。當(dāng)transaction manager確認(rèn)所有參與者都ready后,向所有參與者發(fā)送commit命令。
如下圖所示:
XA的性能問題
XA的性能很低。一個數(shù)據(jù)庫的事務(wù)和多個數(shù)據(jù)庫間的XA事務(wù)性能對比可發(fā)現(xiàn),性能差10倍左右。因此要盡量避免XA事務(wù),例如可以將數(shù)據(jù)寫入本地,用高性能的消息系統(tǒng)分發(fā)數(shù)據(jù)。或使用數(shù)據(jù)庫復(fù)制等技術(shù)。
只有在這些都無法實(shí)現(xiàn),且性能不是瓶頸時才應(yīng)該使用XA。
分布式事物解決方案
分布式事物問題,在互聯(lián)網(wǎng)公司比較常見,例如“”分布式事物解決方案 可以使用全局事物2pc(兩段提交協(xié)議)、3pc(三段提交協(xié)議),消息中間件、tcc、gts、提供回滾接口、分布式數(shù)據(jù)庫
2PC和3PC區(qū)別:https://blog.csdn.net/secretx/article/details/53322989
LCN 核心采用3PC+TCC補(bǔ)償機(jī)制
使用LCN框架解決分布式事務(wù)
什么是LCN框架
LCN分布式事務(wù)框架v4.0 https://www.txlcn.org
"LCN并不生產(chǎn)事務(wù),LCN只是本地事務(wù)的搬運(yùn)工"
框架特點(diǎn)
兼容SpringCloud、Dubbo
使用簡單,低依賴,代碼完全開源
基于切面的強(qiáng)一致性事務(wù)框架
高可用,模塊可以依賴Dubbo或SpringCloud的集群方式做集群化,TxManager也可以做集群化
支持本地事務(wù)和分布式事務(wù)共存
事務(wù)補(bǔ)償機(jī)制,服務(wù)故障或掛機(jī)再啟動時可恢復(fù)事務(wù)
LCN框架原理
參考網(wǎng)站 https://github.com/codingapi/tx-lcn/wiki/LCN%E5%8E%9F%E7%90%86
lcn框架原理
?
核心步驟
創(chuàng)建事務(wù)組 是指在事務(wù)發(fā)起方開始執(zhí)行業(yè)務(wù)代碼之前先調(diào)用TxManager創(chuàng)建事務(wù)組對象,然后拿到事務(wù)標(biāo)示GroupId的過程。
添加事務(wù)組 添加事務(wù)組是指參與方在執(zhí)行完業(yè)務(wù)方法以后,將該模塊的事務(wù)信息添加通知給TxManager的操作。
關(guān)閉事務(wù)組 是指在發(fā)起方執(zhí)行完業(yè)務(wù)代碼以后,將發(fā)起方執(zhí)行結(jié)果狀態(tài)通知給TxManager的動作。當(dāng)執(zhí)行完關(guān)閉事務(wù)組的方法以后,TxManager將根據(jù)事務(wù)組信息來通知相應(yīng)的參與模塊提交或回滾事務(wù)。
總結(jié)
以上是生活随笔為你收集整理的分布式事务解决方案框架(LCN)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新变异株在美国35天占比飙升21倍:传播
- 下一篇: 华为全新三大健康研究:将数字健康带给每个