為什么要有分布式事務 分布式事務解決的什么問題 一次解答


可以這么認為,分布式事務是在分布式環境下能保證數據一致性程序單元

 

在說說什么是數據一致性,數據一致性是相對的,是復合邏輯的數據統一。

  比如張三轉賬給李四,張三-100,李四+100. 這是一致。

  比如 張三消費100 塊 獲取1000 積分, 金額-100,積分+1000. 這也是一致的。

  如果我們認為 張三每消費 100 ,李四就獎勵 10 元,  張三 -100 ,李四 +10 這也是 一致的。

  如果我們認為 張三  送個 李四 100 元,李四就得到 1 塊錢,張三 -100 ,李四+1 ,也是一致的。

 

上面你的 例子,如果 我們認為的 正確合理的 數據處理片段,正確的執行,我們就認為 是一致的。如果 一個完成一個不完成,我們就認為是不一致。

 

 

傳統事務,一個程序里面執行  只需要傳統事務 就可以 實現強一致性。

    方法A  里面 調用 方法B ,然后調用了方法C ,只要在 A 方法上面加上事務,B,C 不開啟新的事務,使用A的 事務 那么不管  A  ,B,C 任何地方異常都會讓事務回滾,並且 A,B,C 的數據變動會 一起提交。ACB 的 為提交 數據,相互可見。

 

分布式事務,還是 上面 A,B,C 的例子

  但是 A,B ,C是 3 個獨立的程序了, A ,B,C中 不是本地調用,而是 RPC 調用(  不管是 什么RPC 都是走的網絡 ,不是本地調用(指的本程序內,不需要過網絡 ,不過需要過IP地址 )),

  

  這時候本地事務明顯不生效了。

  在來模擬  服務的 A 方法里面調用了 ,B服務的 B方法,然后調用的 C服務的 C方法。

  然后,

    1 如果 A 調用 B ,C 之前報錯,A 被事務回滾 ,B ,C 沒有調用, 這沒問題。

    2 如果是  A 調用 了 B,C 以后   A 拋出異常, 那么  A 回滾了 ,B ,C 執行了 就提交了。  數據 不一致了

    3 如果 A 調用 B ,然后調用 C ,C 報錯了 ,C 回滾,C 調用異常 被 A 感知,A 也會回滾,B  執行完就自己提交了,不會跟着一起回滾,數據不一致。  

 

 有人會說 我避免 3 個服務相互調用 ,我每次 只有2 個服務相互聯系

    我 只會  A 調用 B ,然后 B 調用C

    1 A 調用 B ,在方法的最后面 ,A 前面如果報錯 了,B不會被調用 ,如果前面沒有出錯 ,調用B,B失敗了,B回滾,異常傳遞個A,A 也回滾 , A B 之間的數據就 一致了 ,B,C  同理。    

    上面說的沒錯,理想環境下,如果只保持 2 層調用,並且調用 下一個服務 都在 事務提交前一刻執行 那么完全沒問題,但是 網絡環境 有一種極端情況。

    A 發起一次調用B 可以拆分成幾部,A請求B ---> B 收到請求 做自己的 ---> 然后B  響應 A --> A 收到 B 的響應 

    這時候 如果  B做了,提交了自己, 然后響應B的時候超時, A 那邊拋出響應超時, A 不知道 B 是 做了 還是 沒做 ,A 收到 超時異常 就回滾,然后 數據就不一致了。

   

    有人又說了,我們是是內網 無限帶寬 幾乎不會出絡異常,不考慮。網絡不考慮,但是如果 B 做了提交了事務,然后B掛了,A 依舊沒有收到響應,依舊要回滾,還是 會出數據不一致的問題。即便這些都是 小概率,然后 服務 只能保持 2 層調用,在大型 系統中依舊 明顯不適用 ,因為這樣會 鏈 會很長,調用會很不方便,然后 這個 鏈還必須是同步執行的。效率差。

    

  

 

解釋 分布式環境 為什么會出 一致性問題,所以分布式事務就是來解決這些問題的。 

  

  分布式事務 在我看來有4種

   第1種 2pc事務,3pc事務,包括 TX-LCN 的 LCN 模式, 可以叫做 長鎖定多段式分布式事務

   第2中 TCC 這種補償事務, 可以叫做短鎖定多段式分布式事務,特地額 try 階段 會獨立提交,不會多個節點相互 等待,comfrom 階段 也是相互獨立的。 比第一種效率高,但是 一個方法寫三遍,一個邏輯 分三個方向寫,編碼麻煩。

  第3中,基於消息:效率沒有 長鎖定多段式分布式事務 那么低, 編碼沒有 TCC 那么麻煩。 但是需要注意的編程細節也挺多的。  總的來說算一種比較綜合的解決方案,消息機制 有個 很明顯的缺陷,它強調保證最終一致性,並不能同時回滾。  A 服務 發送給B服務的的消息,或者發出去的確認消息,只能完成, B 做失敗了,只能重試(並且保持冪等), 不能讓 A 一起回滾。 只有 主動 發起方可以終止 和回滾 這個分布式事務,入股A 提交以后,只能硬着頭皮走到底。 

  第4種 留給未來...................

 

 

一些相關的資料:

 消息方式的的實現原理:https://www.cnblogs.com/cxygg/p/9526401.html

2pc 和 3pc 還有TCC 區別:https://www.cnblogs.com/cxygg/p/12525898.html

分布式框架 TX-LCN 的使用: https://www.cnblogs.com/cxygg/p/12410294.html

分布式事務解決方案:https://www.cnblogs.com/cxygg/p/12464016.html

分布式事務 XA 兩段式事務 X/open CAP BASE 一次分清 : https://www.cnblogs.com/cxygg/p/10813072.html

 


免責聲明!

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



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