分布式事務解決方案


1.分布式事務產生的原因

來源於微服務、分布式系統之間跨數據庫產生的問題,數據庫做垂直分割(按照業務需求划分數據庫、分庫),分為多個不同的數據源(JDBC連接),會產生分布式事務的問題。

在微服務環境下,因為會根據不同的業務會拆分成不同的服務,比如會員服務、訂單服務、商品服務等,讓專業的人做專業的事情,每個服務都有自己獨立的數據庫,並且是獨立運行,互不影響。

服務與服務之間通訊采用RPC遠程調用技術,但是每個服務中都有自己獨立的數據源,即自己獨立的本地事務。兩個服務相互通訊的時候,兩個本地事務互不影響,從而出現分布式事務產生的原因。

2.分布式事務產生的場景

訂單服務、庫存服務。服務之間的調用接口的時候會產生分布式事務的問題,服務之間的調用走的是http協議進行通訊的。

流程圖:

 

3.Spring事務和分布式事務的區別?

Spring事務是本地事務。

分布式事務是需要跨服務進行通訊的。

4.如何區分分布式事務

不同的JDBC連接,下圖是一個分布式事務場景。雖然二個服務連接的是同一個數據庫,但是它們有各自的JDBC連接,所以屬於分布式事務。

5.分布式事務解決方案

 5.1 使用Jta+Automatic 只適合傳統項目。

 5.2 消息中間件MQ,底層通過Base理論 柔性事務解決

 5.3 2PC(二段提交協議)、3PC

 5.4 TCC補償、GTS 屬於阿里產品

 5.5  TX-LCN框架

5.6 支付回調方式(重試機制+補償機制)

核心原理:LCN並不生產事務,LCN只是本地事務的協調工。

LCN官網:http://www.txlcn.org/zh-cn/

6.基本的事務概念

原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability),ACID原則,這種特性也成 剛性事務。

博客:https://www.cnblogs.com/ming-blogs/p/10513874.html

7.base理論

BASE理論是指,Basically Available(基本可用)、Soft-state( 軟狀態/柔性事務)、Eventual Consistency(最終一致性)。是基於CAP定理演化而來,是對CAP中一致性和可用性權衡的結果。核心思想:即使無法做到強一致性,但每個業務根據自身的特點,采用適當的方式來使系統達到最終一致性。

1、基本可用:指分布式系統在出現故障的時候,允許損失部分可用性,保證核心可用。但不等價於不可用。比如:搜索引擎0.5秒返回查詢結果,但由於故障,2秒響應查詢結果;網頁訪問過大時,部分用戶提供降級服務,等。

2、軟狀態:軟狀態是指允許系統存在中間狀態,並且該中間狀態不會影響系統整體可用性。即允許系統在不同節點間副本同步的時候存在延時。

3、最終一致性:

系統中的所有數據副本經過一定時間后,最終能夠達到一致的狀態,不需要實時保證系統數據的強一致性。最終一致性是弱一致性的一種特殊情況。BASE理論面向的是大型高可用可擴展的分布式系統,通過犧牲強一致性來獲得可用性。ACID是傳統數據庫常用的概念設計,追求強一致性模型。

ACID,指數據庫事務正確執行的四個基本要素的縮寫。包含:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability)。

軟狀態、最終一致性,對接支付寶項目。

支付寶流程回調:同步回調地址、異步回調地址。

 

 

8.CPA理論

CAP由Eric Brewer在2000年PODC會議上提出[1][2],是Eric Brewer在Inktomi[3]期間研發搜索引擎、分布式web緩存時得出的關於數據一致性(consistency)、服務可用性(availability)、分區容錯性(partition-tolerance)的猜想:

數據一致性(consistency):如果系統對一個寫操作返回成功,那么之后的讀請求都必須讀到這個新數據;如果返回失敗,那么所有讀操作都不能讀到這個數據,對調用者而言數據具有強一致性(strong consistency) (又叫原子性 atomic、線性一致性 linearizable consistency)[5]

服務可用性(availability):所有讀寫請求在一定時間內得到響應,可終止、不會一直等待

分區容錯性(partition-tolerance):在網絡分區的情況下,被分隔的節點仍能正常對外服務

9.柔性事務與剛性事務

柔性事務滿足Base理論(基本可用、最終一致性)、CAP理論。

剛性事務滿足ACID理論。

柔性事務分為:

  9.1.二階段型

  9.2補償型

  9.3異步確保型

  9.4最大努力通知型

10.LCN分布式事務原理

LCN並不生產事務,LCN只是本地事務的協調工。

事務協調者、本地服務(訂單服務(發起方)、庫存服務(參與方))。

發起方:調用其他服務接口。

參與方:被別人調用的接口。

 執行流程:

1.LCN客戶端(發起方和參與方都必須要注冊到事務協調者中) 建立一個長連接。解答:長連接 好處減少寬帶傳輸 弊端比較占內存。
2.訂單服務(發起方)調用庫存服務接口(參與方)之前會向TxManager事務協調者創建一個事務的分組id。
3.訂單服務(發起方)調用庫存服務接口(參與方)的時候,會在請求頭中存放該事務的分組id,給庫存服務。
4.如果庫存服務獲取到請求頭中有對應的事務分組id,庫存服務業務邏輯代碼執行完畢的,會采用假關閉,不會提交該事務。

5.參與方在什么時候提交事務?
答案:肯定在發起方 執行成功情況下。
訂單服務(發起方)調用庫存服務接口(參與方)之后,如果訂單服務(發起方)執行沒有問題的情況下。
訂單服務(發起方)使用對應的事務分組id,通知給TxManager事務協調者,讓后TxManager事務協調者在根據該事務分組id,通知給所有的參與方提交事務。

 

集成LCN分布式事務注意事項

版本集成問題: 目前LCN版本已經升級為4.0了,但是官方沒有SpringCloud2.0的demo案例。因為LCN本身是開源的,網上有大牛對LCN框架源碼做修改,可以支持SpringCloud2.0版本。 使用LCN官方提供的@TxTransaction注解解決分布式事務難題,isStart參數是否LCN事務發起方 true 是:是發起方 false 否:是參與方。

 

LCN 官網:http://www.txlcn.org/zh-cn/

github地址:https://github.com/codingapi/tx-lcn

博客內容來源:http://www.mayikt.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM