LCN分布式事务框架是什么
這篇文章主要講解了“LCN分布式事務(wù)框架是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“LCN分布式事務(wù)框架是什么”吧!
今天無意中發(fā)現(xiàn)了一款分布式事務(wù)框架,LCN,看了下網(wǎng)上介紹感覺挺強大的。這里做一下筆記。
一、環(huán)境基礎(chǔ)
LCN框架基礎(chǔ)需要一臺服務(wù)器作為事務(wù)管理器TxManager,此外還需要Redis和Eureka做配合,eureka負(fù)責(zé)為TxManager注冊,redis主要是用于TxManager存放事務(wù)組和補償?shù)男畔ⅰ?/p>
二、一個事務(wù)所涉及的角色
-
事務(wù)發(fā)起方服務(wù)
-
TxManager事務(wù)管理器
-
事務(wù)下游服務(wù)(可能有多個)
三、原理
TxManager是基于本地事務(wù)的,這里有一個事務(wù)組的概念,事務(wù)組是所有涉及的微服務(wù)的本地事務(wù)的集合。
它主要原理是對通過重寫dataSource的close方法,本身的close方法是需要關(guān)閉本地事務(wù)的,但是重寫后并沒有關(guān)閉事務(wù),而是把事務(wù)信息記錄在txmanager的redis中,等待事務(wù)發(fā)起方服務(wù)業(yè)務(wù)執(zhí)行完成或異常的時候再發(fā)通知給各個服務(wù)通知本地事務(wù)提交或回滾的。在代理連接池中,并不是都不真實提交事務(wù),它可以自動識別連接的讀或?qū)懖僮鳎绻亲x操作,那么將返回本地連接對象。如果該方法被重復(fù)執(zhí)行,連接也可以被重用,同時也有超時限制,參與模塊等待通知超時會自動提交或者回滾(這里具體不清楚到底是提交還是回滾,暫時存疑,不過看后面的補償機制說明,好像是自動提交?)
TxManager類似于二階段提交,只不過二階段提交的事務(wù)發(fā)起方和事務(wù)管理器在同一臺機器,而TxManager是作為獨立的中間件。
四、事務(wù)補償
事務(wù)補償指的是當(dāng)事務(wù)發(fā)起方服務(wù)異常或正常執(zhí)行的時候發(fā)送事務(wù)組關(guān)閉的請求到TxManager,讓TxManager通知下游服務(wù)回滾或提交事務(wù),二階段模型中這一步?jīng)]有解決結(jié)束事務(wù)操作能否正確提交到資源管理端的問題,在LCN中提供了一種自動補償機制。
首先看一看TxManager后臺頁面:
這里,有兩項值得注意,第一項是補償回調(diào)地址,這正是在TxManager發(fā)送通知下游服務(wù)回滾或提交事務(wù)失敗的時候回調(diào)事務(wù)信息給事務(wù)發(fā)起方服務(wù)的回調(diào)地址 第二項是是否開啟自動補償。 不開啟補償?shù)脑挘琓xManager還是會回調(diào)。 自動補償是怎么實現(xiàn)的勒?首先TxManager回調(diào)事務(wù)發(fā)起方服務(wù)(攜帶了事務(wù)信息,切面攔截信息),那么事務(wù)發(fā)起方在回調(diào)方法中就寫一個重復(fù)業(yè)務(wù)的操作,這個操作中還是會模擬上次的請求。但是針對已經(jīng)上次通知成功commit的服務(wù),這次就需要回滾了,只有通知失敗的服務(wù)需要commit。
五、小結(jié)
git地址:https://github.com/syzpig/tx-lcn
demo地址:https://github.com/codingapi/springcloud-lcn-demo
官方文檔地址:https://txlcn.org/zh-cn/docs/preface.html
Lcn支持springcloud和dubbo。拉了springcloud的demo代碼下來看,看了使用方法,環(huán)境搭好以后只需要在事務(wù)發(fā)起方法里使用@TxTransaction(isStart = true)注解,然后在下游服務(wù)方法中使用@TxTransaction就行了,使用方法很簡單,代碼侵入很低,值得推薦。
另外,提一點,對于消息隊列異步調(diào)用的形式,這款框架并不能滿足事務(wù)一致性,需要結(jié)合其他方案。
在最新版本的Lcn中發(fā)現(xiàn)也支持TCC和TXC模式~~~~~~~~
總結(jié)
以上是生活随笔為你收集整理的LCN分布式事务框架是什么的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css中clearfix实现清楚浮动的方
- 下一篇: 王者荣耀3周年是什么时候