日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

xa 全局锁_fescar锁设计和隔离级别的理解

發布時間:2025/4/5 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 xa 全局锁_fescar锁设计和隔离级别的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Fescar全局鎖的理解

前幾天夜里,我老大發我一篇文章說阿里的GTS開源了.

因為一直對分布式事務比較感興趣。立馬pull了代碼,進行閱讀。

基本的原理,實現方案我就不一一細化了,詳細見官方文檔(寫的很棒,點贊)。

在fescar的社區,大家比較關注的是通過fescar回滾到before快照前,別的線程假如更新了數據,且業務走完了,那么恢復的這個快照不就是臟數據了么。

很顯然,這種情況在fescar中是不被允許的。

那么fescar是如何做的呢?

我們先簡單了解一下fescar的設計原理

那些一上來就喜歡看源碼的同學,一定不要錯過這么官方的圖文介紹,看完再讀源碼事半功倍.

了解完Fescar的基本原理,我們重點關注下Fescar的全局排他鎖

Fescar設計了一個**全局的排他鎖**,來保證事務間的 **寫隔離**。

關于隔離性:(這是Fescar官方給的一段話)

全局事務的隔離性是建立在分支事務的本地隔離級別基礎之上的。

在數據庫本地隔離級別 **讀已提交或以上** 的前提下,Fescar 設計了由事務協調器維護的 全局寫排他鎖,來保證事務間的 寫隔離,將 **全局事務默認定義在 讀未提交 的隔離級別上**。

我們對隔離級別的共識是:絕大部分應用在讀已提交的隔離級別下工作是沒有問題的。而實際上,這當中又有絕大多數的應用場景,實際上工作在讀未提交的隔離級別下同樣沒有問題。

在極端場景下,應用如果需要達到全局的讀已提交,Fescar也提供了相應的機制來達到目的。

默認,Fescar 是工作在 讀無提交 的隔離級別下,保證絕大多數場景的高效性。

我的解讀

本地事務【讀已提交】,fescar全局事務【讀未提交】。這是這段話的核心。

我理解的這段話中fescar全局事務讀未提交,并不是說本地事務的db數據沒有正常提交,而是指全局事務二階段commit|rollback未真正處理完(即未釋放全局鎖)。

總結來說:全局未提交但是本地已提交的數據,對其他全局事務是可見的【當然在本地事務提交后,本地事務提交前,隔離級別是本地事務的管轄范圍】

for example

產品份額有5W,A用戶購買了2萬,份額branch一階段完畢(本地事務份額已經扣除commit),但是在下單的時候異常了。

因為本地事務讀已提交,這時候fescar允許業務訪問該條數據,3W,在A用戶的份額branch未回滾成功前,對其他用戶可見。

但是其他用戶并不能買該產品,必須等到產品份額回滾到5萬,其他用戶才可以操作產品數據。

所以看了這個例子 真的有必要做到全局事務讀已提交么?

我們先來看一下Fescar的全局鎖的做法

Fescar一階段

1. 本地(Branch)在向TC注冊的時候,把本地事務需要修改的數據table+pks提交到server端申請鎖,拿到全局鎖后,才能提交本地事務

2. 全局鎖的結構:resourceId + table + pks

3. 鎖是存在server端 branchSession中

Fescar二階段

一階段本地事務提交,db的鎖釋放了(for update鎖),但是全局鎖繼續保持,

直到二階段決議(注意釋放鎖的順序):

1. 提交:TC 釋放鎖,通知branch提交后 (rm端異步處理)

2. 回滾:TC 通知branch回滾后,釋放鎖(rm端同步處理 執行undo_log)

Fescar如何保障鎖的高效?

大家自己先思考下,最后給大家仔細解讀官方的demo,并分析fescar的性能問題

Fescar目前開源版本全局鎖的實現

大家有興趣自己閱讀:com.alibaba.fescar.server.lock.DefaultLockManagerImpl

官方的圖實在是做的太漂亮了,clone一份解讀 TC TM RM 以及全局鎖的獲取和釋放動作發生點

分支事務如何工作?關注全局鎖的獲取和釋放 特別是二階段commit和rollback全局鎖釋放的順序

ATBranch.png

Fescar中 RM TM TC如何工作的?

AT distribute transaction.png

看了這兩張圖,大家應該對fescar是如何工作的應該有一個大致的了解了。?

1、全局鎖的獲取

2、tm tc rm之間如何通信工作

3、隔離級別問題的思考

最后我們來解讀一遍官方的demo

branch1:update storage_tbl set count = count - ? where commodity_code = ?

branch2:update account_tbl set money = money - ? where user_id = ?

branch3:insert into order_tbl (user_id, commodity_code, count, money) values (?, ?, ?, ?)

線程A:執行branch1(pk:55),執行branch2的時候發現沒錢了,扔了一個異常,那么勢必需要回滾branch1的份額。

TM通知TC開始回滾branch1份額中

線程B:執行branch1(pk:55)

如果線程A中branch1(pk:55)已經回滾成功了,那么B線程可以正常拿到鎖走下去

如果線程A中branch1還未回滾(resourceId+table+pk鎖未釋放)。當線程B發起branch1向server發起申請鎖,會直接失敗。

Fescar全局鎖簡單總結:操作一條記錄的分支事務,必須等待這條記錄的前一個分支事務執行結束(具體commit rollback情況分析如下),才能持有鎖。

其實相比XA的鎖,fescar在每個分支事務的一階段結束后都釋放了db的鎖,所以fescar的性能瓶頸應該在于二階段的執行速度(釋放鎖的快慢)

因為分布式事務在執行事務編排前,一般會校驗業務的正確性,所以發生回滾的概率相對較低,所以先考慮二階段commit操作。

Commit場景分析:

TM通知server進行commit,server立馬釋 branch的鎖,然后再逐個通知RM提交

消耗:1 rpc操作,(branch刪除undo_log放在異步隊列里面做)

Rollback場景分析:

TM通知server進行rollback,server通知RM回滾后立馬釋放 branch的鎖。

消耗:1 + N的rpc操作 + N的回滾sql操作

所以總的來看fescar在commit的釋放全局鎖還是非常高效的。

思考

1. server支持多臺機器部署,應該如何改造?

全局鎖的問題,鎖改造;

全局事務向server0申請的,Branch1發到server1,branch2發到server2的問題,多機器恢復的情況,TC的改造

2. 全局鎖在Fescar中更新確實是沒有問題的,但是如果就是業務方需要手動調整DB數據呢?

大膽猜測,依賴Fescar寫了一個管理平臺 用來執行sql的。哈哈

3. 隔離級別的思考

Fescar默認工作在,本地事務讀已提交,全局事務讀未提交。

是否存在全局事務必須工作在【讀已提交】級別而不能工作在【讀未提交】的業務場景呢?

大家大膽腦洞 這個問題值得探討。

4. Fescar的文檔中說,是支持全局事務讀已提交的,那么fescar是如何實現的呢?

感興趣的同學可以試著讀一下com.alibaba.fescar.rm.datasource.exec.SelectForUpdateExecutor

源碼核心類

大家想讀源碼的話,可以重點關注一下幾個類。有問題一起探討。

TM相關

com.alibaba.fescar.tm.api.TransactionalTemplate

RM相關

com.alibaba.fescar.rm.datasource.exec.SelectForUpdateExecutor

com.alibaba.fescar.rm.datasource.ConnectionProxy

com.alibaba.fescar.rm.datasource.exec.AbstractDMLBaseExecutor

com.alibaba.fescar.rm.RMHandlerAT

TC相關

com.alibaba.fescar.server.coordinator.DefaultCoordinator

com.alibaba.fescar.server.coordinator.DefaultCore

com.alibaba.fescar.server.lock.DefaultLockManagerImpl

總結

以上是生活随笔為你收集整理的xa 全局锁_fescar锁设计和隔离级别的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一区二区在线免费观看视频 | 99中文字幕 | 欧美一级夜夜爽 | 美女精品久久 | 天天干天天草天天射 | 中文人妻一区二区三区 | 爆操欧美美女 | 二区三区免费 | 亚洲AV成人无码一二三区在线 | 在线免费观看亚洲视频 | 国产日本在线播放 | 久久精品99国产 | 亚洲综合小说 | 毛片xxx| 欧美一区免费 | 五级黄高潮片90分钟视频 | 亚洲成人网页 | 男人操女人的软件 | 欧美成人三级在线视频 | 天天爱天天干天天操 | 日日噜噜噜 | www.com久久| 床戏高潮做进去大尺度视频 | 欧美日韩中 | 国产视频黄色 | www欧美日韩 | 日本黄色激情视频 | 九九热视频精品在线观看 | 无码国产精品一区二区免费式直播 | 亚洲第一页色 | 天天插天天摸 | 奇米影 | 日本免费高清一区二区 | 国产精品久久久久久久久夜色 | 麻豆资源| 国产这里只有精品 | www.五月激情 | 欧美日韩一区二区三区在线 | av毛片在线播放 | 中文字幕久久av | 亚洲av片不卡无码久久 | 99婷婷| 视频福利在线观看 | 中文字幕人乱码中文字 | 欧美一级免费在线 | 久久国产精品久久国产精品 | 日韩少妇一区二区三区 | 懂色av一区二区三区免费 | 日本xxxx裸体xxxx | 美女屁股眼视频网站 | 天天干天天爱天天射 | 一级免费视频 | 朝桐光av在线 | a级黄色网址 | 久久黄色视屏 | 日日夜夜艹 | 9色视频| aⅴ在线免费观看 | 99热免费在线观看 | 国产又黄又猛 | 日本aaaa| 成人手机在线观看 | 久久99精品国产.久久久久久 | а√天堂8资源中文在线 | 丰满白嫩尤物一区二区 | 国产三级av片 | 中文精品无码中文字幕无码专区 | 日本不卡网站 | 韩国精品一区二区三区 | sm国产在线调教视频 | 大色综合 | 精品熟女一区二区三区 | 欧美一区二区人人喊爽 | 人人干免费 | 亚洲一区二区福利 | 一级少妇片| 夜夜撸av | 97超碰人人爱| 91午夜交换视频 | 国产男女猛烈无遮挡免费视频 | 国产在线视视频有精品 | 国产精品久久久久久久久久久久久久久久久 | 欧美黑人啪啪 | 免费观看黄色网址 | 久久精品视频播放 | 男人的天堂成人 | 欧美黑人性受xxxx精品 | 欧美日韩在线一区 | 免费观看国产视频 | 1级性生活片 | 蜜臀av夜夜澡人人爽人人 | 亚洲一二三视频 | xfplay5566色资源网站 | 免费在线播放 | 污视频在线播放 | 国产三级日本三级在线播放 | 国产一区二区三区四区五区六区 | 中文字幕91爱爱 | 国产精品交换 |