天天看點

阿裡P8架構師解決方案!及分布式事務原理!

分布式事務是企業內建中的一個技術難點,也是每一個分布式系統架構中都會涉及到的一個東西,特别是在這幾年越來越火的微服務架構中,幾乎可以說是無法避免,本文就圍繞單機事務,分布式事務以及分布式事務的處理方式來展開。

阿裡P8架構師解決方案!及分布式事務原理!

2 事務

事務提供一種“要麼什麼都不做,要麼做全套(All or Nothing)”的機制,她有ACID四大特性

  • 原子性(Atomicity):事務作為一個整體被執行,包含在其中的對資料庫的操作要麼全部被執行,要麼都不執行。
  • 一緻性(Consistency):事務應確定資料庫的狀态從一個一緻狀态轉變為另一個一緻狀态。一緻狀态是指資料庫中的資料應滿足完整性限制。除此之外,一緻性還有另外一層語義,就是事務的中間狀态不能被觀察到(這層語義也有說應該屬于原子性)。
  • 隔離性(Isolation):多個事務并發執行時,一個事務的執行不應影響其他事務的執行,如同隻有這一個操作在被資料庫所執行一樣。
  • 持久性(Durability):已被送出的事務對資料庫的修改應該永久儲存在資料庫中。在事務結束時,此操作将不可逆轉。

2.1 單機事務

以mysql的InnoDB存儲引擎為例,來了解單機事務是如何保證ACID特性的。

阿裡P8架構師解決方案!及分布式事務原理!

事務的隔離性是通過資料庫鎖的機制實作的,持久性通過redo log(重做日志)來實作,原子性和一緻性通過Undo log來實作。2.2 分布式事務

單機事務是通過将操作限制在一個會話内通過資料庫本身的鎖以及日志來實作ACID,那麼分布式環境下該如何保證ACID特性那?

2.2.1 XA協定實作分布式事務

2.2.1.1 XA描述

X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 這個組織定義的一套分布式事務的标準,也就是了定義了規範和API接口,由各個廠商進行具體的實作。 X/Open DTP 定義了三個元件: AP,TM,RM

阿裡P8架構師解決方案!及分布式事務原理!
  • AP(Application Program):也就是應用程式,可以了解為使用DTP的程式
  • RM(Resource Manager):資料總管,這裡可以了解為一個DBMS系統,或者消息伺服器管理系統,應用程式通過資料總管對資源進行控制。資源必須實作XA定義的接口
  • TM(Transaction Manager):事務管理器,負責協調和管理事務,提供給AP應用程式程式設計接口以及管理資料總管

其中在DTP定義了以下幾個概念

  • 事務:一個事務是一個完整的工作單元,由多個獨立的計算任務組成,這多個任務在邏輯上是原子的
  • 全局事務:對于一次性操作多個資料總管的事務,就是全局事務
  • 分支事務:在全局事務中,某一個資料總管有自己獨立的任務,這些任務的集合作為這個資料總管的分支任務
  • 控制線程:用來表示一個工作線程,主要是關聯AP,TM,RM三者的一個線程,也就是事務上下文環境。簡單的說,就是需要辨別一個全局事務以及分支事務的關系

如果一個事務管理器管理着多個資料總管,DTP是通過兩階段送出協定來控制全局事務和分支事務。

  • 第一階段:準備階段 事務管理器通知資料總管準備分支事務,資料總管告之事務管理器準備結果
  • 第二階段:送出階段 事務管理器通知資料總管送出分支事務,資料總管告之事務管理器結果。

想要學習Dubbo架構、zookeper基本原理、redis分布式緩存、JVM性能優化,Nginx+apache+Tomcat叢集部署、大資料hadoop,Hbase實時計算spark、storm、資料分析分詞和權重等核心技術;需要的可以關注之後私信哈,記得要點贊轉發噢!!!