場景
業(yè)務按領域垂直分庫后,在某些場景下,就必然會出現(xiàn)同一個事務上下文中,需要協(xié)調(diào)多個資源(數(shù)據(jù)庫)以保證業(yè)務的一致性。如訂單創(chuàng)建服務中生成訂單數(shù)據(jù)、和預占資源(扣減庫存)。
實現(xiàn)方式
XA事務
事務管理器、RM1、RM2、RM3、...
第一階段:準備,READY/就緒、RRAD_ONLY/只讀、NOT_READY/未準備好。任一RM回答“未準備好”,則整個事務回滾;全部回答READY,進入第二階段提交;某個回答只讀,第二階段處理中排除掉。
所有RM在預備階段必須完成所有的約束檢查,并確保后續(xù)提交或放棄時所需要的數(shù)據(jù)已持久化?。ǚ艞??)
準備階段,由于各RM已完成數(shù)據(jù)的持久化,因此各數(shù)據(jù)已被加鎖,并要等到第二階段的提交操作完成才會釋放鎖!因此,整體上看,兩階段事務方式下,每個RM上的操作,鎖的時間都變長了,所以會降低并發(fā)處理能力(鎖等待)和增加系統(tǒng)異常幾率(死鎖)。第二階段:提交
實現(xiàn)
- TX接口(APP - TM)、XA接口(TM - RM)
事務管理器通常由專門的中間件提供,資源管理器如數(shù)據(jù)庫、消息隊列等產(chǎn)品一般會提供對XA接口的支持。
總結(jié)
- 核心思想:前面給予充分的處理時間和出錯機會,第二階段一致性提交確認做的事情足夠少,保證最小不一致幾率。(焦點是解決多個參與者的協(xié)調(diào)&同步問題!在最短的時間內(nèi)完成一致性同步/協(xié)調(diào)!)
- 單機鎖時間消耗微秒級,分布式事務下鎖時間消耗毫秒級,1000倍的差異!
- 系統(tǒng)處理上的吞吐率與資源上的時間消耗成反比,即阿姆達爾定理!