一、基礎理論
PART1.1
CAP理論
一緻性(Consistency) :在分布式系統中所有的資料備份,在同一時刻都保持一緻狀态,如無法保證狀态一緻,直接傳回錯誤。
可用性(Availability):在叢集中一部分節點故障,也能保證用戶端通路系統并得到正确響應,允許一定時間内資料狀态不一緻。
分區容錯性(Partition tolerance):分布式系統在遇到任何網絡分區故障時,仍然能保證對外提供滿足一緻性和可用性的服務,除非整個網絡環境都發生故障。
PART1.2
本地事務四大特性(ACID)
事務應該是具備原子性、一緻性、隔離性和持久性,簡稱 ACID。
原子性(Atomicity),可以了解為一個事務内的所有操作要麼都執行,要麼都不執行。
一緻性(Consistency),可以了解為資料是滿足完整性限制的,也就是不會存在中間狀态的資料,事務前後資料的完整性必須保持一緻。
隔離性(Isolation),指的是多個事務并發執行的時候不會互相幹擾,即一個事務内部的資料對于其他事務來說是隔離的。
持久性(Durability),指的是一個事務完成了之後資料就被永遠儲存下來,之後的其他操作或故障都不會對事務的結果産生影響。
PART1.3
BASE理論
基本可用(Basically Available):分布式系統在出現故障時,保證核心可用,允許損失部分可用性。(響應時間上的損失、功能上的損失)。
軟狀态(Soft State):系統中的資料允許存在中間狀态,中間狀态不影響系統的整體可用性。(支付中、進行中等)。
最終一緻性(Eventually Consistent):系統中的資料不可一直處于軟狀态,必須在有時間期限,在期限過後應當保證資料的一緻性。(支付中變為支付成功)。
相比于本地事務的ADIC強一緻性模型,BASE理論提出通過犧牲一定的強一緻性來獲得可用性。
不同業務單元和業務元件對資料一緻性的要求不一樣,是以分布式系統中BASE理論和ACID特性會結合使用。
PART1.4
幂等性設計
幂等(Idempotent)是一個數學與計算機學中的概念。f(n) = 1^n , 無論n等于多少,f(n)永遠值等于1。
在程式中,使用相同參數執行同一個方法,每一次執行結果都是相同的,即具有幂等性。
以訂單狀态處理為例的幂等性設計,不論執行多少次orderProcess()方法,都隻會扣減一次庫存,并且傳回true。
二、分布式事務分類
PART2.1
二段送出2PC|三段送出3PC
Two-Phase-Commit |Three-Phase-Commit
三階段送出引入兩個機制
1、 引入逾時機制。同時在協調者和參與者中都引入逾時機制。
2、在第一階段和第二階段中插入一個準備階段。保證了在最後送出階段之前各參與節點的狀态是一緻的。
主要解決的問題:
避免了參與者在長時間無法與協調者節點通訊(協調者挂掉了)的情況下,無法釋放資源的問題,因為參與者自身擁有逾時機制會在逾時後,自動進行本地commit進而進行釋放資源。而這種機制也側面降低了整個事務的阻塞時間和範圍。
缺點:性能較差,會存在長時間的鎖表。
PART2
.2
補償事務-TCC|Saga
TCC 與Saga其實就是采用的補償機制,其核心思想是:針對每個操作,都要注冊一個與其對應的确認和補償(撤銷)操作。确認和補償都有采用幂等性設計。
缺點:代碼量大,可維護性差。
PART2.3
消息事務
消息一緻性方案是通過消息中間件保證上、下遊應用資料操作的一緻性。基本思路是将本地操作和發送消息放在一個事務中,保證本地操作和消息發送要麼兩者都成功或者都失敗。下遊應用向消息系統訂閱該消息,收到消息後執行相應操作。
消息方案從本質上講是将分布式事務轉換為兩個本地事務,然後依靠下遊業務的重試機制達到最終一緻性。
代表産品:RocketMQ
三、分布式事務産品架構
PART3.1
京東jdts
服務通過lb連到叢集中任何一個節點均能保證業務正确執行,某一個節點異常時叢集可正常提供服務,同時支援叢集橫向、縱向擴充。
PART3.2
Seata
一款開源的分布式事務解決方案,緻力于提供高性能和簡單易用的分布式事務服務。Seata 将為使用者提供了 AT、TCC、SAGA 和 XA 事務模式,為使用者打造一站式的分布式解決方案。
PART3.3
全局事務服務GTS
用于實作分布式環境下,特别是微服務架構下的高性能事務一緻性。可以與RDS、MySQL、PostgreSQL等資料源,Spring Cloud、Dubbo、HSF及其他RPC架構,MQ消息隊列等中間件産品配合使用,輕松實作分布式資料庫事務、多庫事務、消息事務、服務鍊路級事務及各種組合。
作者:全管道生态 谷偉
來源:微信公衆号:京東零售技術
出處:https://mp.weixin.qq.com/s/RJL16dJ1DpEM-32NpYxLrg