目錄
同時,隨著本地交易結束,
1.4.5. 事務傳播機制
1.4.6. 分支的基本行為模式
1.4.7. AT 模式分支的行為模式
1.4.8. MT 模式分支的行為模式
1.4.9. 混合模式
1.5. 初步的版本規劃
首頁 Java java教程 fescar分散式事務的詳細介紹(圖文)

fescar分散式事務的詳細介紹(圖文)

Jan 31, 2019 am 11:04 AM

這篇文章帶給大家的內容是關於fescar分散式事務的介紹(圖文),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

1、fescar分散式交易(概覽)

1.1. 概述

Fescar 是阿里巴巴開源的分散式交易中介軟體,以 高效率 且對業務0 侵入 的方式,解決 微服務 場景下所面臨的分散式事務問題。

1.2. Fescar 的發展歷程

2014 年,阿里中間件團隊發布 TXC(Taobao Transaction Constructor),為集團內應用提供分散式事務服務。

2016 年,TXC 經過產品化改造,以 GTS(Global Transaction Service) 的身份登陸阿里雲,成為當時業界唯一一款雲端分散式事務產品 ,在阿雲裡的公有雲、專有雲端解決方案中,開始服務眾多外部客戶。

2019 年起,基於 TXC 和 GTS 的技術積累,阿里中間件團隊發起了開源專案 Fescar(Fast & EaS​​y Commit And Rollback, FESCAR),和社區一起建立這個分散式事務解決方案。

1.3. 設計初衷

對業務無侵入

高效能

##1.4. 原理與設計

1.4.1. 設計概念圖

fescar分散式事務的詳細介紹(圖文)

  1. Transaction Coordinator (TC):

    事務協調器,維護全域事務的運作狀態,負責協調並驅動全域事務的提交或回滾。

  2. Transaction Manager (TM):

    控制全域事務的邊界,負責開啟一個全域事務,並最終發起全域提交或全域回滾的決議。

  3. Resource Manager (RM):

    控制分支事務,負責分支註冊、狀態報告,並接收事務協調器的指令,驅動分支(本地)事務的提交和回滾。

1.4.2. 與 XA 的差異在什麼地方?

fescar分散式事務的詳細介紹(圖文)

  1. XA 方案的RM 實際上是在

    資料庫層 ,RM 本質上就是資料庫本身(透過提供支援XA 的驅動程式來供應用使用)。

  2. 而Fescar 的RM 是以二方包的形式作為中間件層

    部署在應用程式這一邊的,不依賴與資料庫本身對協定的支持,當然也不需要資料庫支援XA 協定。這點對於微服務化的架構來說是非常重要的:應用層不需要為本地事務和分散式事務兩類不同場景來適配兩組不同的資料庫驅動。

  3. 這個設計,剝離了分散式事務方案對資料庫在

    協定支援 上的要求

1.4.3 .兩階段提交

1.4.3.1. XA 的2PC 流程

  1. XA 的2PC 流程


    fescar分散式事務的詳細介紹(圖文)


fescar分散式事務的詳細介紹(圖文)

  1. ##無論Phase2 的決議是commit 還是rollback,事務性資源的鎖都要保持到Phase2 完成才釋放。 設想一個正常運作的業務,大機率是 90% 以上的事務最終應該是成功提交的,我們是否可以在 Phase1 就將本地事務提交呢?這樣 90% 以上的情況下,可以省去 Phase2 的鎖時間,整體提高效率。

  2. 1.4.3.2. fescar的2PC 程序

  3. 分支交易中資料的
  4. 本地鎖定

    由本地事務管理,在分支事務Phase1 結束時釋放。

同時,隨著本地交易結束,

連線
    也得以釋放。
  1. 分支事務中資料的
    全域鎖定fescar分散式事務的詳細介紹(圖文) 在事務協調器側管理,在決議 Phase2 全域提交時,全域鎖定馬上可以釋放。只有在決議全域回滾的情況下,

    全域鎖定### 才被持有至分支的 Phase2 結束。 ############這個設計,大大減少了分支事務對資源(資料和連結)的鎖定時間,為整體並發和吞吐的提升提供了基礎。 ############1.4.4. 分支事務如何提交與回溯? (重點)############首先,應用程式需要使用 ###Fescar 的 JDBC 資料來源代理###,也就是 Fescar 的 RM#########
  2. Fescar 的JDBC 資料來源代理程式透過對業務SQL 的解析,把業務資料在更新前後的資料鏡像組織成回溯日誌,利用本地事務 的ACID 特性,將業務資料的更新和回溯日誌的寫入在同一個本地事務中提交。

  3. 這樣,可以保證:任何提交的業務資料的更新一定有相應的回滾日誌存在
    fescar分散式事務的詳細介紹(圖文)

  4. 如果決議是全域提交,此時分支事務此時已經完成提交,不需要同步協調處理(只需要非同步清理回滾日誌),Phase2 可以非常快速地完成。

  5. 如果決議是全域回滾,RM 收到協調器發送的回滾請求,透過XID 和Branch ID 找到對應的回滾日誌記錄,透過回滾記錄產生反向的更新SQL 並執行,以完成分支的回溯。

1.4.5. 事務傳播機制

  1. XID 是一個全域事務的唯一標識,事務傳播機制要做的就是把XID 在在服務呼叫連結中傳遞下去,並綁定到服務的事務上下文中,這樣,服務連結中的資料庫更新操作,就都會向該XID 代表的全域事務註冊分支,納入同一個全域事務的管轄。

  2. 基於這個機制,Fescar 是可以支援任何微服務 RPC 框架的。只要在特定框架中找到可以透明傳播 XID 的機制即可,例如,Dubbo 的 Filter RpcContext。

1.4.6. 分支的基本行為模式

作為全域事務一部分的分支事務,除本身的業務邏輯外,都包含4 個與協調器交互的行為:

  1. 分支註冊: 在分支事務的資料操作進行之前,需要向協調器註冊,把即將進行的分支事務資料操作,納入一個已經開啟的全域事務的管理中去,在分支註冊成功後,才可以進行資料操作。

  2. 狀態回報: 在分支交易的資料作業完成後,需要向交易協調器回報其執行結果。

  3. 分支提交:回應協調器發出的分支事務提交的請求,完成分支提交。

  4. 分支回滾:回應協調器發出的分支交易回滾的請求,完成分支回滾。
    fescar分散式事務的詳細介紹(圖文)

    1.4.7. AT 模式分支的行為模式

  5. #業務邏輯不需要專注於事務機制,分支與全域事務的互動過程自動進行
    fescar分散式事務的詳細介紹(圖文)

1.4.8. MT 模式分支的行為模式

  1. 業務邏輯需要被分解為Prepare/Commit /Rollback 3 部分,形成一個MT 分支,加入全域事務。
    fescar分散式事務的詳細介紹(圖文)

1.4.9. 混合模式

因為AT 和MT 模式的分支從根本上行為模式是一致的,所以可以完全相容,即,一個全域事務中,可以同時存在AT 和MT 的分支。這樣就可以達到全面涵蓋業務場景的目的:AT 模式可以支援的,使用 AT 模式;AT 模式暫時支援不了的,用 MT 模式來取代。另外,自然的,MT 模式管理的非事務性資源也可以和支援事務的關係型資料庫資源一起,納入同一個分散式事務的管理中。

1.5. 初步的版本規劃

v0.1.0

  • 微服務框架支援: Dubbo

  • 資料庫支援: MySQL

  • 基於Spring AOP 的Annotation

  • 交易協調器: 單機版本

#v0.5.x

  • 微服務框架支援: Spring Cloud

  • MT 模式

  • 支援TCC 模式交易的適配

  • 動態設定與服務發現

  • 交易協調器: 高可用叢集版本

v0.8.x

  • Metrics

  • # 控制台: 監控/部署/升級/擴充功能

v1.0.0

  • General Availability: 生產環境適用

##v1.5.x

  • 資料庫支援: Oracle/PostgreSQL/OceanBase

  • #不依賴Spring AOP 的Annotation

  • ##熱點資料的最佳化處理機制
  • RocketMQ 事務訊息納入全域事務管理
  • NoSQL 納入全域事務管理的適配機制
  • #支援HBase
  • 支援Redis
  • #v2.0.0
  • 支持 XA
    當然,專案迭代演進的過程,我們最重視的是社群的聲音,路線圖會和社群充分交流及時調整。

1.6. 總結

  看完概覽,我一口鮮血噴出來,明明說好的支持任何微服務RPC框架,我現在要在適合SpringCloud的分佈式事務解決方案中挑選個,你告訴我預計下下下個版本會整合SpringCloud,路過的大神,推薦個吧

1.7. github開源位址

#https://github.com/alibaba/fescar/

以上是fescar分散式事務的詳細介紹(圖文)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Java的類負載機制如何起作用,包括不同的類載荷及其委託模型? Mar 17, 2025 pm 05:35 PM

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA

如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? 如何使用咖啡因或Guava Cache等庫在Java應用程序中實現多層緩存? Mar 17, 2025 pm 05:44 PM

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射? 如何將JPA(Java持久性API)用於具有高級功能(例如緩存和懶惰加載)的對象相關映射? Mar 17, 2025 pm 05:43 PM

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? 如何將Maven或Gradle用於高級Java項目管理,構建自動化和依賴性解決方案? Mar 17, 2025 pm 05:46 PM

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)? 如何使用適當的版本控制和依賴項管理創建和使用自定義Java庫(JAR文件)? Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

See all articles