本篇內(nèi)容介紹了“數(shù)據(jù)庫(kù)的2PC與3PC是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到伽師網(wǎng)站設(shè)計(jì)與伽師網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名申請(qǐng)、虛擬主機(jī)、企業(yè)郵箱。業(yè)務(wù)覆蓋伽師地區(qū)。
數(shù)據(jù)庫(kù)事務(wù)有ACID四大特性,分布式事務(wù)從實(shí)質(zhì)看也要滿足事務(wù)的基本特性(ACID),只是分布式事務(wù)相對(duì)于本地事務(wù)而言其表現(xiàn)形式有很大不同。
2PC ( Two-Phase Commit縮寫(xiě))即兩階段提交協(xié)議,是將整個(gè)事務(wù)流程分為兩個(gè)階段,準(zhǔn)備階段(Prepare phase)、提交階段(commit phase),2是指兩個(gè)階段,P是指準(zhǔn)備階段,C是指提交階段。用于解決分布式事務(wù)一致性的問(wèn)題。
常用的Oracle及MySQL就支持2PC協(xié)議,2PC協(xié)議的二個(gè)階段如下:
準(zhǔn)備階段(Prepare phase):事務(wù)管理器給每個(gè)參與者發(fā)送Prepare消息,每個(gè)數(shù)據(jù)庫(kù)參與者在本地執(zhí)行事務(wù),并寫(xiě)本地的Undo/Redo日志,此時(shí)事務(wù)沒(méi)有提交。 (Undo日志是記錄修改前的數(shù)據(jù),用于數(shù)據(jù)庫(kù)回滾,Redo日志是記錄修改后的數(shù)據(jù),用于提交事務(wù)后寫(xiě)入數(shù)據(jù)文件)
提交階段(commit phase):如果事務(wù)管理器收到了參與者的執(zhí)行失敗或者超時(shí)消息時(shí),直接給每個(gè)參與者發(fā)送回滾(Rollback)消息;否則,發(fā)送提交(Commit)消息;參與者根據(jù)事務(wù)管理器的指令執(zhí)行提交或者回滾操作,并釋放事務(wù)處理過(guò)程中使用的鎖資源。注意:必須在最后階段釋放鎖資源。
準(zhǔn)備階段:
事務(wù)管理器進(jìn)行事務(wù)詢問(wèn)。事務(wù)管理器(協(xié)調(diào)者)向數(shù)據(jù)庫(kù)參與者發(fā)送事務(wù)內(nèi)容,詢問(wèn)是否可以執(zhí)行事務(wù)提交操作,并等待參與者響應(yīng)。
參與者執(zhí)行事務(wù)。(寫(xiě)本地的Undo、Redo日志)
參與者反饋詢問(wèn)的響應(yīng)
提交階段:
事務(wù)管理器發(fā)送提交(commit)請(qǐng)求。
參與者正式提交事務(wù),并釋放整個(gè)事務(wù)執(zhí)行期間占用的事務(wù)資源。
參與者反饋事務(wù)提交結(jié)果,發(fā)送ACK消息。
事務(wù)管理器收到所有參與者反饋的ACK消息后,完成事務(wù)
準(zhǔn)備階段與成功執(zhí)行的步驟一樣:
事務(wù)管理器進(jìn)行事務(wù)詢問(wèn),事務(wù)管理器(協(xié)調(diào)者)向數(shù)據(jù)庫(kù)參與者發(fā)送事務(wù)內(nèi)容,詢問(wèn)是否可以執(zhí)行事務(wù)提交操作,并等待參與者響應(yīng)。
參與者執(zhí)行事務(wù)。(寫(xiě)本地的Undo、Redo日志)
參與者反饋詢問(wèn)的響應(yīng)
提交階段:
事務(wù)管理器發(fā)送回滾(Rollback)請(qǐng)求,當(dāng)收到參與者執(zhí)行失敗或超時(shí)消息時(shí)。
參與者接收到Rollback請(qǐng)求后,利用準(zhǔn)備階段記錄的Undo日志進(jìn)行事務(wù)回滾操作,并釋放整個(gè)事務(wù)執(zhí)行期間占用的事務(wù)資源。
參與者反饋事務(wù)提交結(jié)果。參與者在完成事務(wù)回滾之后,向協(xié)調(diào)者發(fā)送 Ack 信息。
協(xié)調(diào)者接收到所有參與者反饋的 Ack 信息后,完成事務(wù)中斷。
優(yōu)點(diǎn):原理簡(jiǎn)單,便于實(shí)現(xiàn)。
缺點(diǎn):
同步阻塞
在2PC協(xié)議的執(zhí)行(commit)過(guò)程中,所有參與該事務(wù)操作的數(shù)據(jù)庫(kù)參與者都處于阻塞狀態(tài),即各個(gè)參與者在等待其他參與者響應(yīng)的過(guò)程中,無(wú)法進(jìn)行其他操作。
單點(diǎn)問(wèn)題
事務(wù)管理器在提交(commit)階段中非常重要,如果此時(shí)宕機(jī),所有數(shù)據(jù)庫(kù)參與者處于一直鎖定數(shù)據(jù)庫(kù)資源的過(guò)程中。
數(shù)據(jù)不一致 事務(wù)管理器在提交(commit)階段向部分?jǐn)?shù)據(jù)庫(kù)參與者發(fā)送了commit命令,部分參與者沒(méi)有發(fā)送,此時(shí)又宕機(jī)了,便只有部分?jǐn)?shù)據(jù)庫(kù)參與者更新了數(shù)據(jù),出現(xiàn)數(shù)據(jù)不一致的情況。
過(guò)于保守 務(wù)管理器在提交(commit)階段沒(méi)有設(shè)計(jì)較為完善的容錯(cuò)機(jī)制,任意一個(gè)節(jié)點(diǎn)失敗都會(huì)導(dǎo)致整個(gè)事務(wù)的失敗。
3PC,全稱 “three phase commit”,是 2PC 的改進(jìn)版,將 2PC 的 “提交事務(wù)請(qǐng)求Prepare” 過(guò)程一分為二(CanCommit、PreCommit),共形成了由 CanCommit、PreCommit和doCommit三個(gè)階段組成的事務(wù)處理協(xié)議。
1) 協(xié)調(diào)者進(jìn)行事務(wù)詢問(wèn)
協(xié)調(diào)者向所有的參與者發(fā)送一個(gè)包含事務(wù)內(nèi)容的CanCommit請(qǐng)求,詢問(wèn)是否可以執(zhí)行事務(wù)提交操作,并開(kāi)始等待 各參與者的響應(yīng)。
2) 參與者向協(xié)調(diào)者反饋事務(wù)詢問(wèn)
參與者在接收到來(lái)自協(xié)調(diào)者的包含了事務(wù)內(nèi)容的CanCommit請(qǐng)求后,正常情況下,如果自身認(rèn)為可以順利執(zhí)行事 務(wù),則反饋Yes響應(yīng),并進(jìn)入預(yù)備狀態(tài),否則反饋No響應(yīng)。
協(xié)調(diào)者在得到所有參與者的響應(yīng)之后,參與者在CanCommit反饋的是Yes,執(zhí)行事務(wù)預(yù)提交:
1)協(xié)調(diào)者發(fā)送預(yù)提交請(qǐng)求(發(fā)出preCommit請(qǐng)求,并進(jìn)入prepared階段)
2)參與者進(jìn)行事務(wù)預(yù)提交(參與者接收到preCommit請(qǐng)求后,會(huì)執(zhí)行事務(wù)操作,并將Undo和Redo信息記錄到事務(wù)日志中。)
3)各參與者向協(xié)調(diào)者反饋事務(wù)執(zhí)行的結(jié)果(若參與者成功執(zhí)行了事務(wù)操作,那么反饋Ack)
協(xié)調(diào)者在得到所有參與者的響應(yīng)之后,參與者在CanCommit反饋的是No,中斷事務(wù):
1)協(xié)調(diào)者發(fā)送中斷請(qǐng)求:(協(xié)調(diào)者向所有參與者發(fā)出abort請(qǐng)求。)
2)中斷事務(wù)(無(wú)論是收到來(lái)自協(xié)調(diào)者的abort請(qǐng)求或者等待協(xié)調(diào)者請(qǐng)求過(guò)程中超時(shí),參與者都會(huì)中斷事務(wù))
DoCommit階段完成真正的事務(wù)提交或者完成事務(wù)回滾。
在第二階段PreCommit階段收到ACK確認(rèn)消息,則完成事務(wù)提交:
1)協(xié)調(diào)者發(fā)送提交DoCommit請(qǐng)求(協(xié)調(diào)者將從預(yù)提交狀態(tài)轉(zhuǎn)化為提交狀態(tài),并向所有的參與者發(fā)送doCommit請(qǐng)求)
2)參與者進(jìn)行事務(wù)提交(參與者接收到DoCommit請(qǐng)求后,會(huì)正式執(zhí)行事務(wù)提交操作,并在完成提交之后釋放整個(gè)事務(wù)執(zhí)行過(guò)程中占用的事務(wù)資源。)
3)各參與者向協(xié)調(diào)者反饋事務(wù)提交的結(jié)果(若參與者成功完成事務(wù)提交,那么反饋Ack響應(yīng))
4)完成事務(wù)(協(xié)調(diào)者接收到所有參與者反饋的Ack消息后,完成事務(wù)。)
在第二階段PreCommit階段超時(shí)中斷沒(méi)有收到ACK確認(rèn)消息,則完成事務(wù)中斷:
1)協(xié)調(diào)者發(fā)送中斷請(qǐng)求(協(xié)調(diào)者向所有的參與者節(jié)點(diǎn)發(fā)送abort請(qǐng)求)
2)參與者進(jìn)行事務(wù)回滾(根據(jù)記錄的Undo信息來(lái)執(zhí)行事務(wù)回滾,并在完成回滾之后釋放整個(gè)事務(wù)執(zhí)行期間占用的資源)
3)各參與者向協(xié)調(diào)者反饋事務(wù)回滾的結(jié)果(參與者在完成事務(wù)回滾后,向協(xié)調(diào)者發(fā)送Ack消息。)
4)中斷事務(wù)(協(xié)調(diào)者接收到所有參與者反饋的Ack消息后,中斷事務(wù)。)
注意:在DoCommit階段可能出現(xiàn)協(xié)調(diào)者宕機(jī)、協(xié)調(diào)者與參與者出現(xiàn)網(wǎng)絡(luò)故障;導(dǎo)致參與者接收不到協(xié)調(diào)者的DoCommit請(qǐng)求或Abort請(qǐng)求,參與者會(huì)在請(qǐng)求超時(shí)后,繼續(xù)進(jìn)行事務(wù)提交。
2PC中只有協(xié)調(diào)者有超時(shí)機(jī)制(在一定時(shí)間內(nèi)沒(méi)有收到參與者的消息則默認(rèn)失敗);3PC中協(xié)調(diào)者及參與都設(shè)置了超時(shí)機(jī)制(參與者自身?yè)碛谐瑫r(shí)機(jī)制,在超時(shí)后會(huì)自動(dòng)進(jìn)行本地commit從而進(jìn)行釋放資源,防止2PC出現(xiàn)的同步阻塞問(wèn)題)
3PC相對(duì)于2PC多設(shè)置了一個(gè)緩沖階段(PreCommit),保證在最后一個(gè)階段DoCommit前,各個(gè)參與者節(jié)點(diǎn)狀態(tài)是一致的
“數(shù)據(jù)庫(kù)的2PC與3PC是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前標(biāo)題:數(shù)據(jù)庫(kù)的2PC與3PC是什么
文章URL:http://www.chinadenli.net/article8/gcijop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站改版、定制網(wǎng)站、網(wǎng)站建設(shè)、品牌網(wǎng)站建設(shè)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)