這篇文章主要介紹“怎么理解MySQL的2PC和3PC”,在日常操作中,相信很多人在怎么理解MySQL的2PC和3PC問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解MySQL的2PC和3PC”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
為鹽亭等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及鹽亭網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計制作、成都做網(wǎng)站、鹽亭網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會得到認(rèn)可,從而選擇與我們長期合作。這樣,我們也可以走得更遠(yuǎn)!分布式系統(tǒng)和分布式一致性問題
分布式系統(tǒng),即運(yùn)行在多臺不同的網(wǎng)絡(luò)計算機(jī)上的軟硬件系統(tǒng),并且僅通過消息傳遞來進(jìn)行通信和協(xié)調(diào)。
分布式一致性問題,即相互獨(dú)立的節(jié)點(diǎn)之間如何就一項(xiàng)決議達(dá)成一致的問題。
2PC(Two-Phase Commit 二階段提交)
二階段提交,是指將事務(wù)提交分成兩個部分:準(zhǔn)備階段和提交階段。事務(wù)的發(fā)起者稱之為協(xié)調(diào)者,事務(wù)的執(zhí)行者稱為參與者。
階段一:準(zhǔn)備階段
由協(xié)調(diào)者發(fā)起并傳遞帶有事務(wù)信息的請求給各個參與者,詢問是否可以提交事務(wù),并等待返回結(jié)果。
個 參與者執(zhí)行事務(wù)操作,將Undo和Redo放入事務(wù)日志中(但是不提交)
如果參與者執(zhí)行成功就返回YES(可以提交事務(wù)),失敗NO(不能提交事務(wù))
階段二:提交階段
此階段分兩種情況:所有參與者均返回YES,有任何一個參與者返回NO
所有參與者均反饋YES時,即提交事務(wù)。
任何一個參與者反饋NO時,即中斷事務(wù)。
提交事務(wù):(所有參與者均反饋YES)
1、協(xié)調(diào)者向所有參與者發(fā)出正式提交事務(wù)的請求(即Commit請求)。
2、參與者執(zhí)行Commit請求,并釋放整個事務(wù)期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋Ack完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的Ack消息后,即完成事務(wù)提交。
中斷事務(wù):(任何一個參與者反饋NO)
1、協(xié)調(diào)者向所有參與者發(fā)出回滾請求(即Rollback請求)。
2、參與者使用階段1中的Undo信息執(zhí)行回滾操作,并釋放整個事務(wù)期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋Ack完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的Ack消息后,即完成事務(wù)中斷。
2PC的缺陷
1、同步阻塞:大的問題即同步阻塞,即:所有參與事務(wù)的邏輯均處于阻塞狀態(tài)。
2、單點(diǎn):協(xié)調(diào)者存在單點(diǎn)問題,如果協(xié)調(diào)者出現(xiàn)故障,參與者將一直處于鎖定狀態(tài)。
3、腦裂:在階段2中,如果只有部分參與者接收并執(zhí)行了Commit請求,會導(dǎo)致節(jié)點(diǎn)數(shù)據(jù)不一致。
由于2PC存在如上同步阻塞、單點(diǎn)、腦裂問題,因此又出現(xiàn)了2PC的改進(jìn)方案,即3PC。
3PC(Three-Phase Commit 三階段提交協(xié)議)
3PC,三階段提交協(xié)議,是2PC的改進(jìn)版本,即將事務(wù)的提交過程分為CanCommit、PreCommit、do Commit三個階段來進(jìn)行處理。
階段一:CanCommit
1、協(xié)調(diào)者向所有參與者發(fā)出包含事務(wù)內(nèi)容的CanCommit請求,詢問是否可以提交事務(wù),并等待所有參與者答復(fù)。
2、參與者收到CanCommit請求后,如果認(rèn)為可以執(zhí)行事務(wù)操作,則反饋YES并進(jìn)入預(yù)備狀態(tài),否則反饋NO。
階段二:PreCommit
此階段分為兩種情況:
1.所有參與者均受到請求并返回YES。
2.有任何一個參與者返回NO,或者有任何一個參與者超時,協(xié)調(diào)者無法收到反饋,則事務(wù)中斷
事務(wù)預(yù)提交:(所有參與者均反饋YES時)
1、協(xié)調(diào)者向所有參與者發(fā)出PreCommit請求,進(jìn)入準(zhǔn)備階段。
2、參與者收到PreCommit請求后,執(zhí)行事務(wù)操作,將Undo和Redo信息記入事務(wù)日志中(但不提交事務(wù))。
3、各參與者向協(xié)調(diào)者反饋Ack響應(yīng)或No響應(yīng),并等待最終指令。
中斷事務(wù):(任何一個參與者反饋NO,或者等待超時后協(xié)調(diào)者尚無法收到所有參與者的反饋時)
1、協(xié)調(diào)者向所有參與者發(fā)出abort請求。
2、無論收到協(xié)調(diào)者發(fā)出的abort請求,或者在等待協(xié)調(diào)者請求過程中出現(xiàn)超時,參與者均會中斷事務(wù)。
階段3:do Commit
此階段也存在兩種情況:
1、所有參與者均反饋Ack響應(yīng),即執(zhí)行真正的事務(wù)提交。
2、任何一個參與者反饋NO,或者等待超時后協(xié)調(diào)者尚無法收到所有參與者的反饋,即中斷事務(wù)。
提交事務(wù):(所有參與者均反饋Ack響應(yīng)時)
1、如果協(xié)調(diào)者處于工作狀態(tài),則向所有參與者發(fā)出do Commit請求。
2、參與者收到do Commit請求后,會正式執(zhí)行事務(wù)提交,并釋放整個事務(wù)期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋Ack完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的Ack消息后,即完成事務(wù)提交。
中斷事務(wù):(任何一個參與者反饋NO,或者等待超時后協(xié)調(diào)者尚無法收到所有參與者的反饋時)
1、如果協(xié)調(diào)者處于工作狀態(tài),向所有參與者發(fā)出abort請求。
2、參與者使用階段1中的Undo信息執(zhí)行回滾操作,并釋放整個事務(wù)期間占用的資源。
3、各參與者向協(xié)調(diào)者反饋Ack完成的消息。
4、協(xié)調(diào)者收到所有參與者反饋的Ack消息后,即完成事務(wù)中斷。
注意:進(jìn)入階段三后,無論協(xié)調(diào)者出現(xiàn)問題,或者協(xié)調(diào)者與參與者網(wǎng)絡(luò)出現(xiàn)問題,都會導(dǎo)致參與者無法接收到協(xié)調(diào)者發(fā)出的 do Commit請求或abort請求。此時,參與者都會在等待超時之后,繼續(xù)執(zhí)行事務(wù)提交。
3PC的優(yōu)點(diǎn)和缺陷
優(yōu)點(diǎn):降低了阻塞范圍,在等待超時后協(xié)調(diào)者或參與者會中斷事務(wù)。避免了協(xié)調(diào)者單點(diǎn)問題,階段3中協(xié)調(diào)者出現(xiàn)問題時,參與者會繼續(xù)提交事務(wù)。
缺陷:腦裂問題依然存在,即在參與者收到PreCommit請求后等待最終指令,如果此時協(xié)調(diào)者無法與參與者正常通信,會導(dǎo)致參與者繼續(xù)提交事務(wù),造成數(shù)據(jù)不一致。
到此,關(guān)于“怎么理解MySQL的2PC和3PC”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!