在分布式環境下,由於通訊延遲的不確定性、地域的分布性以及資源和資料的高度共享性等影響因素的存在,使得死鎖預防和檢測變得極為困難。在分布式計算系統中,有兩個以上的程序在併發執行,每個程序都在等待被其它的程序所占用的系統資源而不能繼續執行,即導致系統中任何乙個程序都無法執行下去(死迴圈),這就產生了死鎖。
當且僅當以下四個條件同時成立時,死鎖才會發生:
在圖中,事務t1
在站點a
對資料x
持有乙個鎖,又要對站點b
的資料y
請求封鎖,而事務t2
在站點b
對資料y
持有乙個鎖,又要對站點a
的資料x
請求封鎖。這樣就形成了相互等待,兩個事務誰也不能繼續執行。由於這兩個事務不在同一站點,引起全域性死鎖。
a
站點t1
拿著x
鎖想要y
鎖,b
站點t2
拿著y
鎖想要x
鎖,相互等待引起全域性死鎖.
分布式資料庫中的資料冗餘也會增加更新資料時引起死鎖的機會。因為更新時需要對全部副本加拒絕鎖,含有副本的每個站點上都有可能等待另乙個事務釋放鎖,但每乙個事務只有在它全部完成後才能釋放,因此造成全域性死鎖.
站點a:儲存x和y的副本, 發出事務t1:read(x),write(y)
站點b:儲存y和z的副本, 發出事務t2:read(y),write(z)
站點c:儲存z的副本, 發出事務t3:read(z),write(x)
寫操作必須要鎖來保證
a站點:拿著x鎖想要y鎖
b站點:拿著y鎖想要z鎖
a站點:拿著z鎖想要x鎖
什麼是鎖?有哪兩種鎖?答:
鎖是最常用的併發控制機構,是防止其他事務訪問指定資源,實現併發控制的一種手段。
排他鎖(x寫鎖
):當資料被加上寫鎖,其他事務不能對該資料進行讀和寫;
共享鎖(s讀鎖
):當資料被加上讀鎖,允許其他事務對該資料進行讀,不允許寫。
等待圖分類
全域性等待圖(gwfg
)
t1等待t2釋放對y的共享鎖(s)
t2等待t3釋放對z的共享鎖(s)
t3等待t1釋放對x的共享鎖(s)
換而言之
一到6.3 假設四個事務t1、t2、t3、t4
之間的等待關係如下;
t1->t2->t3->t4
如果t1與t2執行於站點1,t3與t4執行於站點2,則這兩個站點的區域性等待圖如圖所示。注意:僅通過檢查這兩個區域性等待圖來找出死鎖是不全面的,因為這個死鎖是全域性的。然而,通過檢查全域性等待圖可以輕鬆地找出死鎖,為區別它們,可把全域性等待圖中站點之間的等待用點線表示,如圖所示。
有三種處理死鎖的策略:
預防死鎖
。限制請求,保證前文提到的四個死鎖條件中至少有乙個不能發生, 從而預防死鎖;
避免死鎖
。如果結果狀態是安全的, 就將資源動態地分給程序。如果至少有乙個執行串行使所有的程序都能完成執行, 那麼這個狀態就是安全的;
檢測死鎖和從死鎖中恢復, 允許死鎖發生, 然後發現並解除死鎖。
死鎖預防和避免採用一種悲觀方法,即認為死鎖會經常發生並試圖阻止或避免它。雖然死鎖避免策略在集中式系統中廣為應用,並且有許多演算法,但是在分布式系統中很少使用。
這是因為在分布式系統中沒有全域性時鐘,檢查安全性狀態會涉及到大量程序和資源的計算,從而引起昂貴的開銷。死鎖檢測和恢復使用樂觀方法,然而這種方法對於死鎖發生頻繁的應用程式可能並不有效。
等待-死亡模式(非佔先權)
受傷-等待模式(佔先權)
總結
非佔先權:年老的事務允許等待年輕的事務,如果年輕事務需要年老事務的鎖,則直接終止重啟.某種意義上事務變老就失去了優先權.
由於年老事務持鎖時間,年輕事務可能會被重啟多次.
佔先權:年老的事務需要年輕事務的鎖時,年輕事務就必須無條件服從終止重啟,將自己的鎖釋放,成就年老的事務.某種意義上事務變老就增加了優先權.
由於年輕事務遇到年老事務就會主動讓位,釋放所有的鎖重啟,所以只會被重啟一次.
集中式死鎖檢測層次式死鎖檢測
基於資源訪問型別,各個站點被劃分到不同的群組中,並將這些群組以層次方式組織.每個群組中.乙個指定的群組負責用集中式演算法檢測本群組內的死鎖.
層次式死鎖檢測的步驟
層次式死鎖檢測方法示意圖分布式檢測
分布式死鎖的檢測更加困難,因為每個站點只有整個系統的乙個部分視角,因此,當檢測涉及乙個以上站點的死鎖時,就需要站點之間的協作。在分布式死鎖檢測演算法中,所有的站點共同協作來檢測和處理死鎖。不像集中式死鎖檢測演算法,分布式死鎖檢測演算法不受單個站點故障的影響,並月沒有站點會被死鎖檢測活動淹沒
區域性死鎖檢測器關注兩件事: 優化
分布式死鎖檢測演算法需要對每個站點的鎖管理器進行統一悠改。這種統一性使得它們更易於實現。然而,這種演算法存在大量的資訊傳輸例如,在例圖中,站點1向站點2傳送潛在的死鎖資訊,而站點2也向站點1傳送它的潛在死鎖資訊。這種情況下,兩個站點上的死鎖檢測器都將檢測到死鎖。除了會導致不必要的資訊傳輸外,還會有乙個問題,即每個站點有可能會選擇不同的犧牲者事務進行撤銷。
為了解決這個問題,使用如下規則:令某個站點上的
lwfg
中可能引起分布式死鎖的路徑為ti->...->tj
,僅當ts(ti)< ts(tj)
時,區域性死鎖檢測器向前傳輸迴路資訊(正向傳輸)。這種方法將傳輸量減少了一半,則在例圖中,站點1有一條傳輸路徑t1->t2->t3
,而站點2的傳輸路徑為t3->t4->t1
.這樣,假定每個事務的下標表示其時標,則僅有站點1會向站點2傳送資訊。分布式資料庫系統
隨著傳統的資料庫 計算機網路和數字通訊技術的飛速發展,以資料分布儲存和分布處理為主要特徵的分布式資料庫系統的研究和開發越來越受到人們的關注。但由於其開發較為複雜,在一定程度上制約了它的發展。基於此,本文提出了在.net環境下使用一種新的開發語言c 結合ado.net資料訪問模型來開發分布式資料庫系統...
分布式資料庫系統
分布式資料庫系統定義 兩個重點 1.保證邏輯統一 2.保證資料分布到不同地域上 兩個要點 1.每個地域節點是擁有集中式資料庫的計算機系統 2.每個節點都是由通訊網路連線起來的節點集合 分布式系統優點 1.靈活性更高 2.成本優勢 3.可靠性,可用性高 4.區域性相應速度快 5.可擴充套件性好 缺點 ...
分布式資料庫系統的優缺點
分布式資料庫系統的優點 分布式資料庫系統是在冀中是資料庫系統的基礎上發展來的,比較分布式資料庫系統與集中式資料庫系統,可以發現分布是資料庫系統具有下列優點 1 更適合分布式的管理與控制。分布式資料庫系統的結構更適合具有地理分布特性的組織或機構使用,允許分布在不同區域 不同級別的各個部門對其自身的資料...