分布式系統中的每個節點都能知道自己的事物是成功還是失敗,但是不知道其他節點的操作結果。要保證多個節點的事務性,就需要乙個中間者來協調這些機器,由中間者來決定事物的提交。2pc和3pc應運而生。
過程如下
中間者向每個節點傳送事物請求
每個節點執行事物操作,將undo和redo記錄下來,並將自己的執行結果返回給中間者
如果都執行成功,則中間者向各個節點傳送提交請求,節點們執行事務提交操作,並傳送ack給中間者;如果有任意乙個節點失敗,則中間者向各個節點傳送回滾請求,節點們執行回滾操作,並傳送ack給中間者。
他的缺點也很明顯:中間者是單點,節點會阻塞,可能只有一部分節點收到commit請求
過程如下
中間者向所有節點傳送cancommit請求,詢問是否可以執行事務提交操作
如果所有節點都返回成功,中間者會傳送precommit請求,節點們會執行事務操作,將undo和redo記錄下來,並將自己的執行結果返回給中間者,等待最後的提交或者終止;如果任一節點返回失敗或者中間者在超時時間內沒收到節點的返回,會傳送終止請求,節點們中斷事務。如果節點們在超時時間內沒收到中間者傳送的precommit階段的請求(包括正常的precommit請求或者中斷請求),也會中斷事物。
此階段在成功傳送precommit請求之後。如果任一節點返回失敗或者中間者在超時時間內沒收到節點的返回,中間者會向所有節點傳送終止請求,節點們收到終止請求會中斷事物,利用undo執行回滾操作,返回ack;如果全都返回成功,中間者傳送docommit請求,節點們正式提交事務,返回ack。因為各種原因導致的節點無法在超時時間內收到中間者傳送的提交或者終止請求,節點都會進行事務提交
缺點也很明顯了:在第三步如果中間者傳送的終止操作無法在超時時間內到達節點的話,節點也會執行提交,資料會不一致
分布式事務 二階段提交與三階段提交
一 二階段提交演算法描述 在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資...
分布式事務 二階段提交與三階段提交
一 二階段提交演算法描述 在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資...
分布式事務 二階段提交與三階段提交
一 二階段提交演算法描述 在分布式系統中,事務往往包含有多個參與者的活動,單個參與者上的活動是能夠保證原子性的,而多個參與者之間原子性的保證則需要通過兩階段提交來實現,兩階段提交是分布式事務實現的關鍵。很明顯,兩階段提交保證了分布式事務的原子性,這些子事務要麼都做,要麼都不做。而資料庫的一致性是由資...