分布式事務(wù)管理與恢復(fù)詳細(xì)課件_第1頁
分布式事務(wù)管理與恢復(fù)詳細(xì)課件_第2頁
分布式事務(wù)管理與恢復(fù)詳細(xì)課件_第3頁
分布式事務(wù)管理與恢復(fù)詳細(xì)課件_第4頁
分布式事務(wù)管理與恢復(fù)詳細(xì)課件_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、分布式事務(wù)管理與恢復(fù)詳細(xì)課件分布式事務(wù)管理與恢復(fù)事務(wù)概念事務(wù)是訪問或更新各種數(shù)據(jù)項(xiàng)的程序執(zhí)行單元.事務(wù)必須保證數(shù)據(jù)庫的一致性事務(wù)執(zhí)行期間數(shù)據(jù)庫可能不一致事務(wù)概念-續(xù) 當(dāng)事務(wù)提交(commit)時(shí)數(shù)據(jù)庫必須是一致的DatabaseConsistentConsistent事務(wù)概念-續(xù) 兩個(gè)問題:故障 各種軟硬件故障并發(fā)執(zhí)行 多個(gè)事務(wù)同時(shí)執(zhí)行事務(wù)性質(zhì)ACID原子性(Atomicity) 事務(wù)的操作要么全部執(zhí)行, 要么全部不執(zhí)行 一致性(Consistency) 并發(fā)執(zhí)行的多個(gè)事務(wù),其操作的結(jié)果應(yīng)與以某種順序串行執(zhí)行這幾個(gè)事務(wù)所得的結(jié)果相同. 持久性(Durability) 當(dāng)事務(wù)提交后, 其操作的結(jié)

2、果將永久化, 而與提交后發(fā)生的故障無關(guān) 事務(wù)性質(zhì)-續(xù)獨(dú)立性( Isolation) 雖然可以有多個(gè)事務(wù)同時(shí)執(zhí)行,但是單個(gè)事務(wù)的執(zhí)行不應(yīng)該感知其他事務(wù)的存在,因此事務(wù)執(zhí)行的中間結(jié)果應(yīng)該對(duì)其他并發(fā)事務(wù)隱藏 一對(duì)事務(wù) Ti 和 Tj的執(zhí)行, 看起來好像是或者 Ti 在Ti 執(zhí)行結(jié)束之后才開始執(zhí)行,或者Tj,是在 Ti執(zhí)行結(jié)束之后才開始執(zhí)行舉例從賬號(hào)A向賬號(hào)B轉(zhuǎn)賬 $50: 1. read(A) 2. A := A 50 3. write(A) 4. read(B) 5. B := B + 50 6. write(B)舉例-續(xù) 一致性要求 事務(wù)執(zhí)行后A 和 B賬號(hào)的總金額不變原子性要求 如果事務(wù)在第3

3、步和第6步之間故障, 系統(tǒng)應(yīng)該保證事務(wù)對(duì)數(shù)據(jù)庫的修改沒有產(chǎn)生,否則將導(dǎo)致不一致性舉例-續(xù)持久性要求 一旦用戶通知說事務(wù)已經(jīng)完成(即$50 轉(zhuǎn)賬成功),那么由該事務(wù)對(duì)數(shù)據(jù)庫的修改就必須保證是永久的,即使是發(fā)生故障也如此舉例-續(xù)獨(dú)立性要求 如果在第 3步和第6步之間, 允許其他事務(wù)訪問被修改的數(shù)據(jù)庫的中間結(jié)果, 那么它將見到一個(gè)不一致的數(shù)據(jù)庫 (也就是說, A + B 的和少于它的正確值) 當(dāng)然事務(wù)的串行執(zhí)行將不會(huì)出現(xiàn)這種情況,但是數(shù)據(jù)庫中事務(wù)并行執(zhí)行的優(yōu)點(diǎn)就損失了事務(wù)狀態(tài)活動(dòng) 從事務(wù)開始執(zhí)行的初始狀態(tài)始, 事務(wù)執(zhí)行中保持該狀態(tài)部分提交 事務(wù)的最后一個(gè)語句執(zhí)行后進(jìn)入該狀態(tài)失敗 一旦發(fā)現(xiàn)事務(wù)不能正常

4、執(zhí)行時(shí)進(jìn)入該狀態(tài)夭折 當(dāng)事務(wù)被回滾后,數(shù)據(jù)庫恢復(fù)到事務(wù)開始執(zhí)行前的狀態(tài)。 事務(wù)夭折后有兩種選擇重啟動(dòng) 僅當(dāng)沒有內(nèi)部邏輯錯(cuò)誤時(shí)KILL提交 當(dāng)事務(wù)成功執(zhí)行后.事務(wù)狀態(tài)-續(xù)abortedcommittedfailedPartiallycommittedactive分布式事務(wù)分布式事務(wù)是由若干個(gè)不同Site上的子事務(wù)組成的事務(wù)事務(wù)的ACID性質(zhì)此時(shí)事務(wù)的原子性、一致性、持久性、獨(dú)立性等都要將每個(gè)Site上的子事務(wù)考慮在內(nèi)分布式事務(wù)結(jié)構(gòu)Begin Trans . . . .Abort/CommitBegin Trans T1 T2 . . . Tn Abort/Commit進(jìn)程協(xié)作進(jìn)程 系統(tǒng)中可以并行

5、執(zhí)行的一段操作序列,分布式事務(wù)中的子事務(wù)序列是進(jìn)程方式完成過程 不可并行執(zhí)行的操作序列事務(wù)代理(Agent) 應(yīng)用在各個(gè)Site上執(zhí)行的若干進(jìn)程,稱作應(yīng)用在該Site上的代理。代理可以執(zhí)行應(yīng)用程序員寫的程序,也可以執(zhí)行系統(tǒng)的原語函數(shù),不同代理間通過報(bào)文實(shí)現(xiàn)通訊,根代理(Root Agent) 應(yīng)用啟動(dòng)Site上的代理。根代理所在的Site稱作原發(fā)Site。 一般,根代理負(fù)責(zé)發(fā)系統(tǒng)原語,只有根代理可以請(qǐng)求創(chuàng)建新代理。事務(wù)代理轉(zhuǎn)賬應(yīng)用事務(wù)在兩個(gè)賬戶之間執(zhí)行“基金匯兌”操作。全局關(guān)系 Account (Account-number, Amount)假設(shè)賬戶分布在網(wǎng)絡(luò)的不同站點(diǎn)上。全局級(jí)轉(zhuǎn)帳事務(wù)FUN

6、D_TRANSFER:read (terminal,$AMOUNT,$FROM_ACC,$TO_ACC);begin_transaction;select AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER=$FROM_ACC;if $FROM_AMOUNT-$AMOUNT0 then abortelse begin update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT_NUMBER = $FROM_ACC; update ACCOUNT set AMOUNT = AM

7、OUNT+$AMOUNT where ACCOUNT_NUMBER = $TO_ACC; commitend輸入:匯出金額和轉(zhuǎn)入/轉(zhuǎn)出帳號(hào)事務(wù)開始:檢查轉(zhuǎn)出帳號(hào)中是否 有足夠的轉(zhuǎn)出資金?更新轉(zhuǎn)出帳號(hào)存款余額創(chuàng)建AGENT1向代理1送消息:轉(zhuǎn)入帳號(hào),金額等待來自AGENT1的消息成功?提交事務(wù):成功結(jié)束撤消事務(wù):失敗結(jié)束ROOT_AGENTAGENT接收來自根代理的信息更新轉(zhuǎn)入帳號(hào)存款余額發(fā)送執(zhí)行消息給根代理(成功或失敗)是否否轉(zhuǎn)賬應(yīng)用處理流程ROOT_AGENT;read(terminal,$AMOUNT,$FROM_ACC,$TO_ACC);begin_transaction;select

8、AMOUNT into $FROM_AMOUNT from ACCOUNT where ACCOUNT_NUMBER=$FROM_ACC;if $FROM_AMOUNT-$AMOUNT0 then abortelse begin update ACCOUNT set AMOUNT = AMOUNT-$AMOUNT where ACCOUNT_NUMBER = $FROM_ACC;create AGENT;send to AGENT($AMOUNT,$TO_ACC);commit/*這里省略了等待消息和判別*/endAGENT;receive from ROOT_AGENT($AMOUNT,$T

9、O_ACC);update ACCOUNT set AMOUNT=AMOUNT+$AMOUNT where ACCOUNT=$TO_ACC;send to ROOT_AGENT(SUCCESS/FALL) 轉(zhuǎn)賬事務(wù)的兩個(gè)代理事務(wù)管理目標(biāo)效率的幾個(gè)重要方面CPU和主存的使用控制報(bào)文響應(yīng)時(shí)間可用性目標(biāo)維護(hù)事務(wù)的ACID性質(zhì)獲得最小的主存和CPU開銷,降低報(bào)文數(shù)目,加快響應(yīng)時(shí)間獲得最大限度的可靠性和可用性事務(wù)管理DTM功能 保證分布式Trans的特征,特別是原子性支持分布式Trans執(zhí)行的位置傳遞LTM功能保證本地Trans的特征代替DTM把分布Trans的執(zhí)行與恢復(fù)信息記入Log接收并遵從本Sit

10、e上DTM發(fā)來的Log原語,記入Log并執(zhí)行之DTMLTMSiteLog原語: Local Begin-Trans, Local-Commit, Local-Abort分布式Trans執(zhí)行的控制模型主從模型 LTM之間無通信三角模型 LTM之間有通信層次控制模型 LTM之間有通信,并且LTM還可再創(chuàng)建Agent,控制其它LTM執(zhí)行分布式事務(wù)管理器局部事務(wù)管理器局部事務(wù)管理器局部事務(wù)管理器數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫命令命令命令回答回答回答主從控制分布式事務(wù)管理器局部事務(wù)管理器局部事務(wù)管理器數(shù)據(jù)庫數(shù)據(jù)庫命令命令回答回答臨時(shí)數(shù)據(jù)三角控制分布式事務(wù)管理器局部事務(wù)管理器數(shù)據(jù)庫命令命令回答回答局部事務(wù)管理器局部事

11、務(wù)管理器局部事務(wù)管理器局部事務(wù)管理器局部事務(wù)管理器命令命令命令命令回答回答回答回答數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫數(shù)據(jù)庫層次控制故障類型事務(wù)故障由非預(yù)期的、不正常的程序結(jié)束所造成的故障,即事務(wù)沒有執(zhí)行到Commit或顯示Rollback語句的故障,如:溢出、死循環(huán)等內(nèi)存、磁盤上信息沒有損失,使用Log做Rollback系統(tǒng)故障造成系統(tǒng)停止運(yùn)行的任何事件,要求系統(tǒng)重啟動(dòng)內(nèi)存、I/O Buffer內(nèi)容皆丟失,DB沒有破壞,恢復(fù)時(shí),搜索Log, 確定Rollback的Trans。設(shè)置檢查點(diǎn)故障類型-續(xù)介質(zhì)故障輔助存儲(chǔ)器介質(zhì)遭破壞數(shù)據(jù)丟失, 日志無損失 從某個(gè)Dump狀態(tài)開始執(zhí)行已提交事務(wù)數(shù)據(jù)與日志都丟失 不

12、可能完全恢復(fù)通訊故障前三種統(tǒng)稱為站點(diǎn)故障. 通訊故障通訊發(fā)生, 既有某個(gè)報(bào)文Message從Site x 發(fā)往Site y, 正常情況:(a) 在Dmax 之后, x 站點(diǎn)收到y(tǒng)發(fā)回的應(yīng)答信息(Ack)(b) y收到的Message是一個(gè)合適的次序(c ) Message本身的信息是正確的 但是當(dāng)某個(gè)Dmax之后, x還沒收到y(tǒng)的Ack, 則可能發(fā)生: (a) Message 或 Ack 信息丟失 (b) 網(wǎng)絡(luò)分割, 及網(wǎng)絡(luò)不通Site xSite ymessageAck通訊故障-續(xù) 問題可以進(jìn)一步分為:a) 是否是所在Site故障, 還是系統(tǒng)慢下來了?b) 若是故障, 是通訊故障, 還是 y

13、 站點(diǎn)故障?c) Message 是否已到達(dá) y 站點(diǎn)? 對(duì)上述故障, 其恢復(fù)程序可以有不同級(jí)別:一級(jí): 僅處理Site故障二級(jí): Site故障及Message故障三級(jí): Site故障及Message故障, 還包括網(wǎng)絡(luò)分割SiteSiteSite Site Site Site Site 恢復(fù)算法恢復(fù)算法是保證系統(tǒng)故障后數(shù)據(jù)庫仍保持一致性,以及保證事務(wù)原子性和持久性的技術(shù)恢復(fù)算法有兩部分組成在事務(wù)正常執(zhí)行時(shí),記錄下足夠的能使系統(tǒng)恢復(fù)的信息在故障發(fā)生時(shí),恢復(fù)數(shù)據(jù)庫到一致性、原子性和持久性狀態(tài)事務(wù)日志日志Log 記錄所有對(duì)DB的操作事務(wù)標(biāo)識(shí) 每個(gè)事務(wù)給定一個(gè)具有惟一性的標(biāo)識(shí)符Log記錄項(xiàng) : 開始,

14、 T, 提交, T, 夭折, T, 讀, T, x, 寫, T, x, 舊值, 新值DB寫動(dòng)作 Log優(yōu)先 Log存儲(chǔ) 一般存在盤上, 事務(wù)提交時(shí), Log Buffer強(qiáng)迫寫Log舉例Log Write Output A = 950 B = 2050 BB, BA C = 600 BC 注: BX 表示含有X的存儲(chǔ)塊.數(shù)據(jù)訪問xYABx1y1 緩沖區(qū)緩沖塊 A 緩沖塊 Binput(A)output(B) read(X)write(Y)磁盤 T1工作區(qū)T2 工作區(qū)主存x2基于日志的恢復(fù)當(dāng)系統(tǒng)故障時(shí):如果 log 含有記錄, 但沒有記錄 ,事務(wù) Ti 必須執(zhí)行 undone 如果 log 即含

15、有 又有 記錄,事務(wù) Ti 必須 redone Undo 操作先執(zhí)行, redo 操作后執(zhí)行.舉例 已知事務(wù) T0 和 T1 (T0 在 T1前執(zhí)行):T0: read (A)T1 : read (C)A: = A - 50C:=C- 100Write (A) write (C)read (B)B:= B + 50write (B)舉例-續(xù)如下是系統(tǒng)在三個(gè)不同時(shí)刻的Log記錄.舉例-續(xù) 三個(gè)不同時(shí)刻的系統(tǒng)恢復(fù)動(dòng)作:(a) undo (T0): B 恢復(fù)到 2000 ,A恢復(fù)到 1000.(b) undo (T1) 并且 redo (T0): C恢復(fù)到 700, 然后 A和 B 分別寫入950

16、和 2050 .(c) redo (T0)和 (T1): A 和 B分別寫入950 和 2050 .C 寫入600檢查點(diǎn)檢查點(diǎn)設(shè)置一個(gè)周期性操作點(diǎn)a) Log Buffer寫入Log數(shù)據(jù)集b) 寫檢查點(diǎn)Log項(xiàng), 當(dāng)前活動(dòng)事務(wù)表, 每個(gè)事務(wù)最近一次Log記錄在Log文件中的位置c) DB Buffer寫入DBd) 將檢查點(diǎn)Log項(xiàng)在Log文件中的位置記入“重啟動(dòng)文件”檢查點(diǎn)恢復(fù)T1 可以忽略 (因?yàn)橛袡z查點(diǎn),更新已經(jīng)被寫入磁盤)T2 和 T3 redone.T4 undoneTcTfT1T2T3T4checkpointsystem failure事務(wù)故障恢復(fù)恢復(fù)原則孤立和逐步退出事務(wù)的原則 u

17、ndo 事務(wù)已對(duì)DB的修改 ( 不影響其他事務(wù)的可排除性局部故障)成功結(jié)束事務(wù)原則 Redo 已成功事務(wù)的操作夭折事務(wù)原則 撤銷全部事務(wù), 恢復(fù)到初態(tài) (Undo)事務(wù)故障恢復(fù)-續(xù)本地事務(wù)恢復(fù) (與集中式恢復(fù)相同)從“重啟動(dòng)文件” 讀出最近Checkpoint的地址, 并定出Checkpoint在Log文件中的位置創(chuàng)建Redo表, Undo表(即Checkpoint相應(yīng)內(nèi)容中的活動(dòng)事務(wù)表)檢查得出Redo事務(wù)與Undo事務(wù)反向檢索Log, 將Undo表中事務(wù)撤銷, 直到遇到對(duì)應(yīng)的Begin Trans正向檢索Redo事務(wù)的Log記錄, 并執(zhí)行之, 直到對(duì)應(yīng)的Commit記錄2PC協(xié)議 (2-P

18、hase Commit )基本思想 將本地原子性提交行為的效果擴(kuò)展到分布式事務(wù), 保證了分布式事務(wù)提交的原子性, 并在不損壞Log的情況下, 實(shí)現(xiàn)快速故障恢復(fù), 提高DDB系統(tǒng)的可靠性.第一階段 表決階段第二階段 執(zhí)行階段兩類代理協(xié)調(diào)者(Coordinator)參與者(Participants)初始寫begin_commit到日志等待有要求撤消的?寫commit到日志提交寫end_of_transt到日志初始準(zhǔn)備提交?寫ready到日志就緒消息類型?寫abort到日志寫commit到日志提交撤消撤消寫abort到日志寫abort到日志協(xié)調(diào)者參與者nonoabortcommit準(zhǔn)備撤消提交全局撤

19、消全局提交ACKACK2PC的通訊結(jié)構(gòu)集中式通訊只發(fā)生在協(xié)調(diào)者和參與者之間,參與者之間不交換信息分層式協(xié)調(diào)者是在樹根的DTM代理者,協(xié)調(diào)者與參與者之間的通訊不用直接廣播的方法進(jìn)行,而是使報(bào)文在樹中上下傳播。每個(gè)DTM代理這是通信樹的一個(gè)內(nèi)部節(jié)點(diǎn),它從下層節(jié)點(diǎn)除收集報(bào)文或向他們廣播報(bào)文。線性 參與者之間可以互相通信。系統(tǒng)中的站點(diǎn)間要排序分布式允許所有參與者在第一階段相互通信,從而可以獨(dú)立做出事務(wù)終止決定。23451234511協(xié)調(diào)者參與者協(xié)調(diào)者協(xié)調(diào)者參與者第一階段第二階段準(zhǔn)備建議撤消/提交全局撤消/提交提交/撤消集中式34251511協(xié)調(diào)者參 與 者協(xié)調(diào)者協(xié)調(diào)者參 與 者第一階段第二階段準(zhǔn)備建議

20、撤消/提交全局撤消/提交提交/撤消23422分層式1234n第一階段第二階段準(zhǔn)備建議提交/撤消建議提交/撤消建議提交/撤消全局提交/撤消全局提交/撤消全局提交/撤消全局提交/撤消線性式1n4324321n協(xié)調(diào)者協(xié)調(diào)者協(xié)調(diào)者+參與者第一階段準(zhǔn)備建議撤消/提交全局撤消/提交可獨(dú)立做決定分布式2PC與故障恢復(fù)站點(diǎn)故障a 參與者在將“Ready”記錄入Log之前故障此時(shí)協(xié)調(diào)者達(dá)到超時(shí),Abort發(fā)生。站點(diǎn)(P)恢復(fù)時(shí),重啟動(dòng)程序?qū)?zhí)行Abort,不必從其他站點(diǎn)獲取信息。b 當(dāng)將“Ready”寫入Log后,P故障此時(shí)所有運(yùn)行的站點(diǎn)都將正常結(jié)束事務(wù)(Commit/Abort)。P恢復(fù)時(shí),因?yàn)镻已Ready

21、,所以不可判定C的最終決定。因此恢復(fù)時(shí),重啟動(dòng)程序要詢問C或其他站點(diǎn)。c 當(dāng)C將“Prepare”寫入Log,但“G-commit”/”G-abort”還沒有寫入是故障所有回答“Ready”的P等待C恢復(fù)。C重啟動(dòng)時(shí),將重開提交協(xié)議,重發(fā)“Prepare”,于是P要識(shí)別重發(fā)。d C在將“G-commit”/”G-abort”寫入Log后,“Complete”沒有寫入前故障收到命令的P正常執(zhí)行,C重啟動(dòng)程序必須再次向所有P重發(fā)命令。以前沒有收到命令的P也必須等待C恢復(fù),P要識(shí)別兩次命令。e “Complete”寫入Log后故障無任何動(dòng)作發(fā)生2PC與故障恢復(fù)-續(xù)2. 報(bào)文丟失a 從P發(fā)出的“Rea

22、dy”/“Abort”報(bào)文丟失C達(dá)到超時(shí),整個(gè)事務(wù)執(zhí)行“G-abort”。該故障僅能被C識(shí)別,此時(shí)C認(rèn)為P故障,但P并無故障,不需執(zhí)行重啟動(dòng)程序。b “Prepare”報(bào)文丟失P等待,C得不到回答,結(jié)果同2.ac “G-commit”/”G-abort”報(bào)文丟失P處于不確定狀態(tài)?;卮稹癆bort”的可以確定其工作,回答“Ready”的不行。此時(shí)可以修改加入計(jì)時(shí)器,超時(shí)則申請(qǐng)重發(fā)命令。d “Ack”報(bào)文丟失C超時(shí),可重發(fā)“G-commit”/”G-abort”命令,P無論是否有活動(dòng),都重發(fā)“Ack”報(bào)文2PC與故障恢復(fù)-續(xù)網(wǎng)絡(luò)分割假設(shè)分成兩組。一組是協(xié)調(diào)者,一組是參與者。于是從協(xié)調(diào)者看是參與者組故障,結(jié)果同1.a, 1.b。 從參與者組看是協(xié)調(diào)者站點(diǎn)故障,動(dòng)作如1.c, 1.d。初始寫begin_commit到日志等待有要求撤消的?寫commit到日志提交寫Complete到日志初始準(zhǔn)備提交?寫ready到日志就緒消息類型?寫abort到日志寫commit到日志提交撤消撤消寫abort到日志寫abort到日志協(xié)調(diào)者參與者nonoabortcommit 2. b 準(zhǔn)備2.a撤消2.a 提交2.c全局撤消全局提交ACKACK1.c1.d1.e1.a1.b2.d業(yè)務(wù)規(guī)則的一致性有效性約束 域約束數(shù)據(jù)依賴約束 實(shí)體完整性和引用完整性例子取現(xiàn)金時(shí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論