SOFA Weekly | Seata 發佈新版本, QA 整理

SOFA WEEKLY | 每週精選,篩選每週精華問答
同步開源進展,歡迎留言互動
SOFAStack(Scalable Open Financial Architecture Stack)是螞蟻集團自主研發的金融級雲原生架構,包含了構建金融級雲原生架構所需的各個組件,包括微服務研發框架,RPC 框架,服務註冊中心,分佈式定時任務,限流/熔斷框架,動態配置推送,分佈式鏈路追蹤,Metrics 監控度量,分佈式高可用消息隊列,分佈式事務框架,分佈式數據庫代理層等組件,也是在金融場景裏錘鍊出來的最佳實踐。
SOFAStack 官網: https://www.sofastack.tech
SOFAStack: https://github.com/sofastack

  每週讀者問答提煉  

歡迎大家向公衆號留言提問或在羣裏與我們互動
我們會篩選重點問題通過 
" SOFA WEEKLY " 的形式回覆

1、@bruce 提問:

SOFAJRaft 可以實現在三個節點中選出一個 leader , 其他邏輯由自己實現嗎?

A:可以,可以不用狀態機,也不用加載和持久化快照, 只需要選個 leader。

各個節點如何知道自己是主節點還是從節點?

A:示例

SOFAJRaft:https://github.com/sofastack/sofa-jraft


2、@李明 提問:

全局事務執行過程中,有其他線程操作數據庫,這時全局事務執行失敗,在回滾的時校驗數據發現數據被修改過,導致回滾失敗,這種情況怎麼避免?

A:其他線程也加上 global transactional 註解。分佈式事務下,沒有單個分支是獨立的個體存在,需要拿到全局事務中,讓其他事務知曉他的存在,從而避免在分佈式調用鏈路中,恰好遇到同一個數據進行修改時,發生的髒寫髒讀 globallock 是在更新前去 tc 看下這個時候這個數據有沒有被其他事務鎖定,沒有的話就說明這個數據沒有被其他事務使用,是提交的數據,所以這叫讀分佈式事務下的已提交。

但是他並沒有去註冊分支,也就是他沒有去佔有這個全局鎖,來達到分佈式事務下的排他性。他在得到 tc 響應的時候,去執行 update 是有時間的,此時有個分佈式事務下的分支 update 後,拿到了全局鎖,然後他的鏈路二階段是回滾 ,但是數據就被你這個認爲沒有全局鎖的本地線程給改了,這就導致被幹擾無法回滾。

所以 globallock 需要配合 sql 語句,在 update 前,先做 for update 這個數據,拿到這個數據的本地鎖,拿到本地鎖之後,再去 tc 判斷有沒有全局鎖,如果 tc 沒有鎖,因爲本地已經拿到本地鎖了,具有本地事務的排他性,其他分支事務拿不到該數據的本地鎖,是無法去註冊分支去拿到全局鎖,也就是禁止了其他分支事務的干擾,所以不會髒寫。

目前 tcc 下一般就是 globallock+select for update 來防止被其他 at 事務改動後,進行了髒寫。


3、@ 尚攀 提問:

Raft 是爲了解決目前的什麼問題?

A: 依賴外部存儲。AT 有 before 鏡像、after 鏡像,after 鏡像是在 undo_log 表裏存儲,那麼 before 在哪裏存儲?未來的 raft 模式,集羣支持動態擴縮容,事務信息存儲在內存中(測試下來比 redis 快),現在的全局事務信息,分支事務信息,全局鎖都是持久化到 db,或者 redis 去的。如果這個時候持久化用的 db 宕機了,Seata-Server 會不可用,而集成了 raft ,leader 宕機後自動選舉新 leader,繼續運轉。所以,利用 raft 一致性算法,可以讓多個 Seata 集羣內存中的數據保持一致。

Seata:https://github.com/seata/seata


   本週推薦閱讀   


  Seata 項目進展  

本週發佈詳情如下:
發佈 Seata 1.4.0 版本,主要變更如下:
  • 支持 yml 配置文件
  • 支持 Oracle nclob 類型
  • 支持客戶端最少的活動負載均衡
  • 支持客戶端一致性哈希的負載均衡
  • 支持 Spring Boot 使用自定義配置中心和註冊中心
  • 支持配置默認全局事務超時時間
  • 多處 BUG 修復和功能優化

詳細參考:
https://github.com/seata/seata/releases/tag/v1.4.0

本文歸檔在 sofastack.tech。

本文分享自微信公衆號 - 金融級分佈式架構(Antfin_SOFA)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章