国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)

這篇具有很好參考價值的文章主要介紹了分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

分布式系統(tǒng)概念和設(shè)計

事務(wù)與并發(fā)控制

簡介
  • 事務(wù)的目標是在多個事務(wù)訪問對象以及服務(wù)器面臨崩潰的情況下,保證所有由服務(wù)器管理的對象始終維持在一個一致的狀態(tài)上
    事務(wù)是由客戶定義的針對服務(wù)器對象的一組操作,組成為一個不可分割的單元,由服務(wù)器執(zhí)行
    服務(wù)器必須保證整個事務(wù)被執(zhí)行,并將執(zhí)行結(jié)果存儲,或者出現(xiàn)故障時能夠消除這些操作的影響
事務(wù)
  • 客戶端角度看待事務(wù),是組成一個步驟的一組操作,將服務(wù)器數(shù)據(jù)從一個一致性狀態(tài)轉(zhuǎn)換為另一個一致性狀態(tài)。
  • 事務(wù)可以作為中間件的一部分提供。
  • 事務(wù)總是應(yīng)用到可恢復(fù)對象上并具有原子性,事務(wù)常常被作為原子事務(wù)。
    • 故障原子性
      • 服務(wù)器崩潰時事務(wù)的效果是原子的
    • 持久性
      • 一旦事務(wù)完成,所有的效果都會保存到持久存儲中。
      • 存儲介質(zhì)不受服務(wù)器崩潰影響。
    • 隔離性
      • 每個事務(wù)的執(zhí)行不受其它事務(wù)的影響,事務(wù)執(zhí)行過程中的中間效果對其他事務(wù)不可見

分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)

  • 進程崩潰時的服務(wù)器動作
    • 如果服務(wù)器意外進程崩潰,最終會被新的服務(wù)器進程替代。
    • 新的服務(wù)器進程將放棄所有未提交的事務(wù),并通過一個過程將對象的值恢復(fù)到最近提交的事務(wù)所產(chǎn)生的值
    • 檢查點的設(shè)計是為了處理崩潰后恢復(fù)到最近狀態(tài)(CHECK POINT)
    • 為了處理事務(wù)過程中客戶進程崩潰,服務(wù)器給每個事務(wù)設(shè)定一個過期時間,服務(wù)器將放棄在過期時間還未完成提交的所有事務(wù)。
  • 服務(wù)器進程崩潰時的客戶動作
    • 如果服務(wù)器在執(zhí)行事務(wù)間崩潰,那么客戶在超時后會接收到一個異常。
    • 如果在執(zhí)行事務(wù)期間,服務(wù)器崩潰了且被新服務(wù)器替代,那么未完成的事務(wù)將不在有效,當(dāng)客戶發(fā)起新操作時會接收到異常。
并發(fā)控制
更新丟失

事務(wù)U的更新被事務(wù)T覆蓋,兩個事務(wù)的更新前讀出的數(shù)據(jù)都是舊的數(shù)據(jù)。

不一致檢索

事務(wù)W匯總時其他事務(wù)已經(jīng)完成了數(shù)據(jù)的更新。

串行等價性

每個事務(wù)知道它單獨執(zhí)行的正確效果,那么可以推斷這些事務(wù)按照某種次序一次執(zhí)行一個事務(wù)的組合也是正確的。串行等價衡量

事務(wù)放棄時的恢復(fù)

服務(wù)器必須記錄所有已經(jīng)提交事務(wù)的效果,而不保存被放棄事務(wù)的效果。

服務(wù)器必須保證事務(wù)被放棄后,它的更新作用完全取消,而不影響其它并發(fā)事務(wù)運行。

讀取臟數(shù)據(jù)

事務(wù)的隔離性要求未提交的事務(wù)的狀態(tài)對其它事務(wù)是不可見的狀態(tài)。

如果某個事務(wù)讀取了其他未提交事務(wù)寫入的數(shù)據(jù),這種交互會引起讀取臟數(shù)據(jù)的問題。

事務(wù)可恢復(fù)性

如果一個事務(wù)訪問了一個被放棄事務(wù)的更新結(jié)果,并且已經(jīng)提交,那么這個事務(wù)的狀態(tài)是不可恢復(fù)的。

解決不可恢復(fù)問題方法是:所有進行了臟數(shù)據(jù)讀取的事務(wù)必須推遲提交。

可恢復(fù)的策略是推遲事務(wù)的提交,直到它讀取更新結(jié)果的其它事務(wù)都已經(jīng)提交。

連鎖放棄

假設(shè)事務(wù)U一直推遲提交直到事務(wù)T放棄,那么此時事務(wù)U也要放棄,避免臟讀。

同時,觀察到U事務(wù)結(jié)果的其他事務(wù)也要放棄,這些事務(wù)的放棄可能導(dǎo)致觀察這些事務(wù)結(jié)果的事務(wù)也要放棄,從而造成連鎖放棄現(xiàn)象。

解決方法是:只允許事務(wù)讀取已經(jīng)提交寫入的數(shù)據(jù)。

為了保證這一點:讀取某對象的操作必須一直推遲到寫該數(shù)據(jù)的事務(wù)提交或者放棄。

防止連鎖反應(yīng)是一個比保證事務(wù)可恢復(fù)性更強的條件。

過早寫入

考慮事務(wù)放棄的另一種可能;

同時兩個事務(wù)針對一個對象進行寫操作的交互。

放棄事務(wù)時,將變量值恢復(fù)到該事務(wù)所有寫操作的前映像。

分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)

為了保證使用前映像進行事務(wù)恢復(fù),獲得正確的結(jié)果,寫操作必須等到前面修改同一對象的其他事務(wù)提交或放棄后才能進行。

事務(wù)的嚴格執(zhí)行

為了避免過早寫入和臟讀,通常要求事務(wù)推遲讀寫操作。

如果讀操作和寫操作都推遲到寫同一對象的其它事務(wù)提交或放棄后才進行,這是嚴格執(zhí)行條件。

事務(wù)的嚴格執(zhí)行可以真正保證事務(wù)的隔離特性。

臨時版本

對于參與事務(wù)可恢復(fù)對象服務(wù)器,必須保證事務(wù)放棄后,能夠清楚所有對象的更新。

達到此目的,事務(wù)中的所有的更新操作都是針對對象在揮發(fā)存儲中的臨時版本。

每個事務(wù)都有本事務(wù)已更改的對象的臨時版本集。

事務(wù)的所有更新操作將值存儲在自己臨時版本中。

如果可能,事務(wù)的訪問操作會從臨時版本中取值,如果失敗,從對象取值。

只有更新提交事務(wù),臨時版本的數(shù)據(jù)才會應(yīng)該真的更新對象數(shù)據(jù),同時將數(shù)據(jù)持久化到存儲。這個過程是一個原子步驟,保證更新成功或者失敗。

期間將不允許其他事務(wù)訪問對象,如果事務(wù)失敗,則刪除臨時版本。

ACID

在事務(wù)中實現(xiàn)并發(fā)控制,通常需要考慮以下幾種條件:

  1. 原子性(Atomicity):事務(wù)中的操作應(yīng)該作為一個原子性單元來執(zhí)行,即要么全部執(zhí)行成功,要么全部回滾。如果事務(wù)中的某個操作失敗,那么整個事務(wù)應(yīng)該回滾到之前的狀態(tài),以確保數(shù)據(jù)的一致性。
  2. 一致性(Consistency):在事務(wù)執(zhí)行過程中,如果數(shù)據(jù)被修改了,那么事務(wù)結(jié)束時,系統(tǒng)應(yīng)該保持一致性。這意味著,在事務(wù)開始時和結(jié)束時,系統(tǒng)應(yīng)該保持一致狀態(tài)。
  3. 隔離性(Isolation):在并發(fā)情況下,多個事務(wù)可能同時訪問數(shù)據(jù)庫。為了確保事務(wù)之間不會相互干擾,系統(tǒng)應(yīng)該實現(xiàn)隔離性,即每個事務(wù)應(yīng)該感覺到自己是唯一的,并且能夠獨立地訪問和修改數(shù)據(jù)。
  4. 持久性(Durability):在事務(wù)結(jié)束后,系統(tǒng)必須確保修改的數(shù)據(jù)被持久化到數(shù)據(jù)庫中,即使系統(tǒng)中斷或出現(xiàn)故障,數(shù)據(jù)也不應(yīng)丟失。

這些條件通常被稱為ACID特性,在事務(wù)性系統(tǒng)中是非常重要的,并且被廣泛采用。

事務(wù)恢復(fù)

在事務(wù)放棄時恢復(fù)是非常重要的,因為這可以確保數(shù)據(jù)庫的一致性和完整性。以下是一些關(guān)鍵的設(shè)計說明:

  1. 事務(wù)放棄時恢復(fù)應(yīng)該是自動的,而不是手動的。這意味著,當(dāng)出現(xiàn)故障時,系統(tǒng)應(yīng)該能夠自動檢測到事務(wù)放棄,并進行恢復(fù)。
  2. 恢復(fù)操作應(yīng)該能夠檢測到系統(tǒng)中斷的位置,并將數(shù)據(jù)庫恢復(fù)到中斷前的狀態(tài)。如果有多個事務(wù)同時進行,那么系統(tǒng)應(yīng)該優(yōu)先處理已經(jīng)提交的事務(wù),并且應(yīng)該能夠正確地協(xié)調(diào)所有事務(wù)的恢復(fù)。
  3. 在執(zhí)行恢復(fù)操作時,應(yīng)該謹慎考慮并發(fā)控制的條件。在恢復(fù)期間,數(shù)據(jù)庫應(yīng)該保持在“未提交”狀態(tài),以允許事務(wù)回滾和恢復(fù)。
  4. 在恢復(fù)期間,應(yīng)該禁止所有事務(wù)的提交,以確保事務(wù)回滾和恢復(fù)順利進行。在恢復(fù)結(jié)束后,系統(tǒng)應(yīng)該允許新的事務(wù)提交。
  5. 恢復(fù)期間,系統(tǒng)應(yīng)該將所有修改操作記錄在日志文件中。這樣一來,如果恢復(fù)操作失敗,系統(tǒng)可以撤銷所有的更改操作,以便恢復(fù)到中斷前的狀態(tài)。
    這些是事務(wù)放棄時恢復(fù)的一些關(guān)鍵設(shè)計說明,可以幫助確保數(shù)據(jù)庫的一致性和完整性。
嵌套事務(wù)

分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)

事務(wù)的并發(fā)訪問和故障處理而言,子事務(wù)對于父事務(wù)是原子的。

在同一層次的子事務(wù)可以并發(fā)執(zhí)行,但對公共對象的訪問是串行化的。

每個子事務(wù)可以獨立于其他事務(wù)而獨立故障。

當(dāng)某個子事務(wù)失敗時,其父事務(wù)可能選擇另一個子事務(wù)來完成工作

  • 嵌套事務(wù)的主要優(yōu)勢:
    • 在同一層次的子事務(wù)可以并發(fā)運行,提高事務(wù)內(nèi)的并發(fā)度
    • 子事務(wù)可以獨立提交或者放棄,與單個事務(wù)相比,若干的子事務(wù)可能更健壯——減少當(dāng)個事務(wù)的負載
  • 嵌套事務(wù)的提交規(guī)則:
    • 事務(wù)在其子事務(wù)完成以后才能提交或者放棄
    • 當(dāng)一個子事務(wù)執(zhí)行完畢后,可以獨立決定是暫時提交還是放棄。如果放棄,那么這個決定是最終。
    • 父事務(wù)放棄時,所有子事務(wù)都放棄。即使子事務(wù)可能已經(jīng)暫時提交了。
    • 如果頂層事務(wù)提交了,那么所有暫時提交的子事務(wù)都被最終提交了。
    • 只有當(dāng)頂層事務(wù)提交后,子事務(wù)的作用才能夠持久化。

事務(wù)必須通過調(diào)度使得對共享數(shù)據(jù)的執(zhí)行效果是串行等價的。

服務(wù)器可以通過串行化對象訪問來達到事務(wù)的串行等價。

簡單的串行化機制是使用互斥鎖。服務(wù)器試圖給客戶端訪問的對象加鎖,如果一個客戶訪問對象發(fā)下已經(jīng)上鎖,那么訪問對象將會被掛起,或者是獲取鎖失敗,知道對象解鎖后才可以獲取。

  • 串行等價性要求一個事務(wù)對一個對象的訪問相對于其他事務(wù)進行訪問是串行化的,兩個事務(wù)的所有沖突操作都必須以相同的次序執(zhí)行。
    • 事務(wù)在釋放任何一個鎖之后都不允許再申請新的鎖。保證串行等價。
    • 每個事務(wù)的都一個階段是不斷的申請鎖,增長階段。
    • 第二個階段事務(wù)不斷的釋放鎖,收縮階段。
  • 所有事務(wù)在執(zhí)行的過程中獲取的鎖必須在事務(wù)提交或者放棄之后才能釋放。被稱為嚴格的二階段加鎖。
  • 鎖可以阻止其他事務(wù)讀寫對象。在事務(wù)提交時,為了保證恢復(fù)性,鎖必須在所有被更新的對象寫入持久存儲后才能釋放。
鎖的實現(xiàn)
  • 被鎖住對象的標識
  • 當(dāng)前擁有該鎖的事務(wù)的事務(wù)標識
  • 鎖的類型
  • 鎖方法都是同步方法
死鎖

兩個事務(wù)都在等待并且相互依賴對方,只有對方釋放鎖才能獲取鎖。

加鎖在對象的子項上更容易避免死鎖,縮小粒度。

所超時是解決死鎖的有效方式。

在加鎖的機制中增加并發(fā)度

加鎖規(guī)則建立在讀操作和寫操作之間的沖突之上,并且鎖應(yīng)用的粒度也更小。

增加并發(fā)度的空間方法

  • 雙版本鎖
    • 互斥鎖的設(shè)置推遲到事務(wù)提交時才進行
  • 層次鎖
    • 使用混合粒度的鎖

層次鎖和雙版本鎖都是樂觀鎖的實現(xiàn)方式。

層次鎖是一種基于時間戳的樂觀鎖實現(xiàn)方式。它為每個數(shù)據(jù)項維護一個版本號,每次讀取數(shù)據(jù)時都會檢查版本號是否發(fā)生變化,如果版本號發(fā)生變化,則表示數(shù)據(jù)已經(jīng)被修改,需要重新讀取數(shù)據(jù)。層次鎖還可以為不同的數(shù)據(jù)項設(shè)置不同的版本號,從而實現(xiàn)更細粒度的鎖控制。

雙版本鎖是一種基于CAS(Compare and Swap)操作的樂觀鎖實現(xiàn)方式。它為每個數(shù)據(jù)項維護兩個版本號,一個版本號用于讀操作,一個版本號用于寫操作。讀操作時使用讀版本號,寫操作時使用寫版本號。每次更新數(shù)據(jù)時,會先檢查讀版本號是否發(fā)生變化,如果沒有變化,則進行CAS操作,將寫版本號加1,并更新數(shù)據(jù)。如果讀版本號發(fā)生變化,則表示數(shù)據(jù)已經(jīng)被修改,需要重新讀取數(shù)據(jù)。

層次鎖和雙版本鎖都是樂觀鎖的實現(xiàn)方式,相比悲觀鎖,它們的性能更高,但也存在一些缺點。層次鎖需要維護版本號,增加了額外的開銷;雙版本鎖需要進行CAS操作,如果并發(fā)沖突較多,會導(dǎo)致CAS操作失敗率增加,從而影響性能。

樂觀并發(fā)控制
加鎖的缺點
  • 鎖維護帶來的開銷
  • 引起死鎖。
  • 降低潛在的并發(fā)度,避免引起連鎖放棄鎖只能在事務(wù)結(jié)束才釋放。
時間戳排序

基于時間戳的并發(fā)控制,事務(wù)的每一個操作執(zhí)行之前都要進行驗證。每個事務(wù)都有唯一的時間戳。

如果驗證不通過,立即放棄改事務(wù),然后客戶端可能重新發(fā)起新的事務(wù)。

時間戳定義了該事務(wù)在事務(wù)順序中的次序,不能解決分布式問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-465990.html

到了這里,關(guān)于分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包