答:指一次大的操作由不同的小操作組成的,這些小的操作分布在不同的服務器上,分布式事務需要保證這些小操作要么全部成功,要么全部失敗。從本質上來說,分布式事務就是為了保證不同數據庫的數據一致性。
???當數據庫單表數據達到千萬級別,就要考慮分庫分表,那么就會從原來的一個數據庫變成多個數據庫。例如如果一個操作即操作了01庫,又操作了02庫,而且又要保證數據的一致性,那么就要用到分布式事務。
???所謂的SOA化,就是業務的服務化。例如電商平臺下單操作就會產生調用庫存服務扣減庫存和訂單服務更新訂單數據,那么就會設計到訂單數據庫和庫存數據庫,為了保證數據的一致性,就需要用到分布式事務。
總結:其實上面兩種場景,歸根到底是要操作多數據庫,并且要保證數據的一致性,而產生的分布式事務的。
???XA是一個分布式事務協議,由Tuxedo提出。XA中大致分為兩部分:事務管理器和本地資源管理器。其中本地資源管理器往往由數據庫實現,比如Oracle、MySQL等數據庫都實現了XA接口,而事務管理器作為全局的調度者,負責各個本地資源的提交回滾。
XA實現分布式事務的原理如下:
??二階段提交看起來確實能夠提供原子性的操作,但是它存在幾個缺點:
1、同步阻塞問題:執行過程中,所有參與節點都是事務阻塞型的。當參與者占有公共資源時,其他第三方節點訪問公共資源不得不處于阻塞狀態。
2、單點故障:由于(事務管理器)協調者的重要性,一旦協調者發生故障。(本地資源管理器)參與者會一直阻塞下去。尤其在第二階段,協調者發生故障,那么所有的參與者還都處于鎖定事務資源的狀態中,而無法繼續完成事務操作。(如果是協調者掛掉,可以重新選舉一個協調者,但是無法解決因為協調者宕機導致的參與者處于阻塞狀態的問題)
3、數據不一致:在二階段提交的階段二中,當協調者向參與者發送commit請求之后,發生了局部網絡異?;蛘咴诎l送commit請求過程中協調者發生了故障,這會導致只有一部分參與者接收到了commit請求。而在這部分參與者接到commit請求之后就會執行commit操作。但是其他部分未接到commit請求的機器無法執行事務提交。于是整個分布式系統便出現了數據不一致的現象。
4、二階段無法解決的問題:參與者在發出commit消息之后宕機,而唯一接收到這條消息的協調者同時也宕機了。那么即使協調者通過選舉協議產生了新的協調者,這條事務的狀態也是不確定的,沒人知道事務是否被已經提交了。
??3PC其實在2PC的基礎上增加了CanCommit階段,是2PC的變種,并引入了超時機制。一旦事務參與者遲遲沒有收到協調者的Commit請求,就會自動進行本地commit,這樣相對有效的解決了協調者單點故障的問題。但是,性能和數據一致性問題沒有根本解決。
3PC分為三個階段:CanCommit、PreCommit、DoCommit
??它跟2PC的 準備階段很像,協調者向參與者發送commit請求,參與者如果可以提交就返回Yes響應,否則返回No響應。
事務詢問:協調者向參與者發送CanCommit請求。詢問是否可以執行事務提交操作。然后開始等待參與者的響應
響應反饋:參與者接到CanCommit請求之后,正常情況下,如果其自身認為可以順利執行事務,則返回Yes響應,并進入預備狀態。否則返回No
??協調者根據參與者的響應情況來決定是否可以進行事務的PreCommit操作。根據響應情況,有以下兩種可能:
假如協調者從所有的參與者獲得的反饋都是Yes,那么就會執行事務的與執行。
發送預提交請求:協調者向參與者發送PreCommit請求,并進入Prepared階段。
事務預提交:參與者接收到PreCommit請求后,會執行事務操作,并將undo和redo信息記錄到事務日志中。
響應反饋:如果參與者成功的執行了事務操作,則返回ACK響應,同時開始等待最終指令。
假如有任何一個參與者向協調者發送了No響應,或者等待超時,或者協調者都沒有接到參與者的響應,那么就執行事務的中斷。
發送中斷請求:協調者向所有參與者發送abort請求。
中斷事務:參與者收到來自協調者的abort請求之后(或超時之后,仍未收到協調者的請求),執行事務的中斷。
??該階段進行真正的事務提交,也可以分為以下兩種情況:
執行提交
發送提交請求:協調接收到參與者發送的ACK響應,那么將從預提交狀態進入到提交狀態。并向所有參與者發送doCommit請求。
事務提交:參與者接收到doCommit請求之后,執行正式的事務提交,并在完成事務提交之后釋放所有事務資源。
響應反饋:事務提交完之后,向協調者發送ACK響應。
完成事務:協調者接收到所有參與者的ACK響應之后,完成事務。
中斷事務
發送中斷請求:協調者向所有參與者發送abort請求
事務回滾:參與者接收到abort請求之后,利用其在階段二記錄的undo信息來執行事務的回滾操作,并在完成回滾之后釋放所有的事務資源。
反饋結果:參與者完成事務回滾之后,像協調者發送ACK消息。
中斷事務:協調者接收到參與者反饋的ACK消息之后,執行事務的中斷。
協調者沒有接收到參與者發送的ACK響應(可能是接受者發送的不是ACK響應,也可能響應超時),那么就會執行中斷事務。
??相對于2PC而言,3PC對于協調者和參與者都設置了超時時間,而2PC只有協調者才擁有超時時間機制。這個優化解決了,參與者在長時間無法與協調者節點通訊的情況下,無法釋放資源的問題,因為參與者自身擁有超時機制會在超時后,自動進行本地commit從而進行釋放資源。而這種機制也側面降低了整個事務的阻塞時間和范圍。但是仍然沒有解決數據一致性問題,即在參與者收到PreCommit請求后等待最終指令,如果此時協調者無法與參與者正常通信,會導致參與者繼續提交事務,造成數據不一致。
??TCC(Try-Confirm-Cancel)又稱補償事務。它實際上與2PC、3PC一樣,都是分布式事務的一種實現方案而已。它分為三個操作:
Try階段:主要是對業務系統做檢測及資源預留。
Confirm階段:確認執行業務操作。
Cancel階段:取消執行業務操作。
??TCC事務的處理流程與2PC兩階段提交類似,不過2PC通常都是在DB層面,而TCC本質上就是應用層面的2PC,需要通過業務邏輯來實現。它的優勢在于,可以讓應用自己定義數據庫操作的粒度,使得降低鎖沖突、提交吞吐量。
??不過對應用的侵入性非常強,業務邏輯的每個分支都需要實現try、confirm、cancel三個操作。
??所謂的消息事務就是基于消息中間件的兩階段提交,本質上是中間件的一種特殊利用,他是將本地事務和發消息放在一個分布式事務里,保證要么本地操作成功并且對外發消息成功,要么兩者都失敗,開源的RocketMQ就支持這一特性,具體原理如下:
步驟如下:
1、:服務A向消息中間件發送一條預備消息。
2、消息中間件保存預備消息并返回成功。
3、服務A執行本地事務。
4、服務A發送提交消息給消息中間件,服務B接收到消息之后執行本地事務。
??基于消息中間件的兩階段提交往往用在高并發場景下,將一個分布式事務拆成一個消息事務(服務A的本地操作+發消息)+服務B的本地操作,其中服務B的操作由消息驅動,只要消息事務成功,那么服務A一定成功,消息也一定發出來了,這時候服務B會收到消息去執行本地操作,如果本地操作失敗,消息會重投,直到服務B操作成功,這樣就變相地實現了A與B的分布式事務。
以上幾個步驟可能存在異常情況,現在對其進行分析:
步驟一出錯:則整個事務失敗,不會執行服務A的本地操作。
步驟二出錯:則整個事務失敗,不會執行服務A的本地操作。
步驟三出錯:需要做回滾預備消息,由服務A實現一個消息中間件的回調接口,消息中間件會不斷執行回調接口,檢查服務A事務執行是否執行成功,如果失敗則回滾預備消息。
步驟四出錯:這個時候服務A的本地事務是成功的,但是消息中間件不需要回滾,其實通過回調接口,消息中間件能夠檢查到服務A執行成功了,這個時候其實不需要服務發提交消息了,消息中間件可以自己對消息進行提交,從而完成整個消息事務。
看完上述內容,你們對分布式事務是什么有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注本站行業資訊頻道,感謝大家的支持。
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
不打疫苗不能回家,不打疫苗不能上學。據《北京青年報》報道,近日,廣州的袁先生反映,自己是外來人員,因未接種疫苗,被限制打開出租屋門鎖。以前有門禁卡可以買,現在規定只能用APP,不允許居民辦卡。沒打預防針不能開門??梢匀ゴ謇镩_一個7天的證明,但是7天之后需要再開一次。當地村委會工作人員回應稱,電腦系統僅限于此,“就這樣?!彼拇吻笾?,廣州12345熱線回應“是村規民約”。不打疫苗就不能回家,有些地方...
中山小瑯環公園游玩指南地址:廣東省中山市三鄉鎮橋頭村和烏石村之間。(資料圖)門票:免門票公交指南共有3條線路經過小瑯環公園。603路運行時間去往白石三溪村方向,06:15-22:15去往小瑯環公園方向,06:38-22:15607路運行時間去往金灣市場方向,06:20-21:30去往小瑯環公園方向,06:20-21:30612路運行時間:06:40-18:40自駕游:電子地圖上搜索“小瑯環公園”導...
近日,中共中央印發了《關于調整預備役部隊領導體制的決定》(以下簡稱《決定》)?!稕Q定》明確,自2020年7月1日零時起,預備役部隊全面納入軍隊領導指揮體系,由現行軍地雙重領導調整為黨中央、中央軍委集中統一領導。那么,你對我軍預備役部隊了解多少?預備役算不算?預備役部隊穿制服嗎?部隊預備役穿什么制服?可能很多人不確定。本文將幫助您普及這些知識。保留ABC預備役部隊是中國人民的組成部分,納入中國人民的...