1. 程式人生 > >shared-disk與shared-nothing區別

shared-disk與shared-nothing區別

shared-nothing:
資料以某種方式分割槽並分佈在一組機器上,這意味著每臺機器對其擁有的資料具有唯一的訪問許可權,也是有唯一的責任。因此資料時完全隔離的,每個節點對其特定子集具有完全許可權。

shared-disk:
與shared-nothing相比,shared-disk的所有資料都可以衝所有叢集節點訪問。任何機器都可以讀取或寫入希望的任何資料部分。
如圖:
在這裡插入圖片描述

理解writing的權衡

在shared-disk體系結構中保留資料時,可以對任何節點執行寫入操作。如果節點1和節點2都嘗試編寫元組,那麼為了確保與其他節點的一致性,管理系統必須使用基於磁碟的鎖,或傳達其意圖將元組與叢集中的其他節點鎖定。這兩種方法都提供可伸縮行問題。新增更多節點會增加鎖定的爭用,或者增加必須找到鎖定協議的節點數。

進一步解釋這一點,如下圖:
在這裡插入圖片描述

shared-disk叢集資料庫包含PK=1和data=foo的記錄。為了提高效率,兩個節點都在記憶體中快取了記錄1的本地副本。然後客戶端嘗試更新記錄1,以便foo變為bar。為了以一致的方式執行此操作,DBMS必須對可能具有快取記憶體記錄1的所有節點進行分散式鎖定。當增加叢集節點數量時,此類分散式鎖定會變得越來越慢,因此會阻礙其可擴充套件性writing過程。

另一種確定鎖定在磁碟上的機制很少在實踐中完成,因為快取對效能至關重要。

然而在shared-nothing不受到相同的分散式鎖問題,,假設客戶端被定向到正確的節點(也就是說客戶端寫入A,在圖1中指示在節點1處寫入),則shared-nothing都不會收到相同的分散式鎖定問題的影響可以直接流到磁碟,並在記憶體中指定任何鎖定中介。這是因為只有一臺機器擁有任何單一資料的所有權,因此根據定義,只需要一個鎖。

因此,在不增加鎖定資料項的開銷的情況下,無需共享就可以衝寫入角度進行線性擴充套件,因為每個節點對其擁有的資料負全部責任。

但是,對於跨多節點上的資料事務性寫入(即分散式兩階段提交),shared-nothing仍然必須執行分散式鎖定。這些在可伸縮性上並不像上面的shared-disk快取問題那麼大,因為他們只跨越事務中涉及的節點(與跨越所有節點的快取情況相對應),但他們同事增加了可伸縮性限制(與shared-disk相比,可能非常慢)。

因此,如果可以對資料進行分片並避免跨越不同分片的事務,那麼對於需要高吞吐量寫入的系統來說,無需共享即可,但是這樣做的訣竅時找到正確的分割槽策略。例如,可以為線上銀行系統分割槽資料,以便使用者賬戶的所有資訊都在同一臺機器上,如果可以以避免分散式事務的方式對資料集進行分割槽,那麼至少對於基於鍵的讀寫來說,線性可伸縮性就唾手可得了。

對於,shared-disk的計數器也可以使用分割槽。僅僅因為磁碟時共享的,並不意味著不能使用服務於不同分割槽的不同界定啊對資料進行邏輯分割槽。假設可以建立自己的體系結構,以便將寫請求路由到正確的機器上,因為這總策略將減少正在發生的鎖(或block)傳遞的數量(正式優化oracle rac等資料的方式)。

shared-disk可以實現子啊啊shared-nothing模式下配置。但區別僅在於資料的物理位置。shared-disk始終以某種方式連結到網路,而不是本地連線。因此雖然遠端磁碟可以提供相對較高的吞吐量和良好的隨機IO效能,通常成本較高。

shared-disk架構時寫限制,其中多個寫節點必須圍繞叢集協調他們的鎖。
shared-nothing機構時寫限制,其中寫入跨越多個分割槽,需要分散式兩階段提交。

資料檢索

shared-disk的缺陷:

1、資源匱乏,最明顯的時SAN/NAS驅動上的磁碟爭用。shared-disk意味著:所有計算機共享相同的磁碟陣列,並在某種程度上共享相同的互連。幸運的是,通過分割槽可以緩解大型shared-disk系統中的磁碟爭用。共享磁碟子系統中的資料通常按其使用模式進行劃分(通常將表移動到後備磁碟陣列的不同部分)。

2、快取效率低的問題。shared-disk系統中的每臺計算機都可能涉及整個資料集(因此需要快取)。這降低了快取記憶體的效率,因為快取記憶體未命中的可能行更大。而shared-nothing每個機器只需要快取它自己擁有的資料子集,因此快取更加有效。

shared-nothing的缺陷:

如果查詢是自給自足的,則SN工作得非常好 - 如果每個節點都可以完成處理的“部分”而不需要來自任何其他節點的資料。但是,不可避免地會出現這樣的用例,即來自多個節點的資料必須以某種方式組合在一起或以某種方式連線。其含義通常是,可能不包括在最終結果中的資料從一臺機器運送到另一臺機器。這種在機器之間傳輸資料以“加入”的需求會對整體查詢效能產生重大影響。

所以現實是需要資料傳輸的查詢數量將取決於用例和分割槽策略。因此,許多無共享解決方案建議使用快速10GE網路。

併發性
許多鍵值儲存使用分片和SN來提供非常高的併發。這是通過將使用者請求通過分片鍵路由到具有所需資料的單臺機器上來實現的。結果時儲存在大型併發使用者群中提供極高水兵的讀寫吞吐量。這種模式通過NOSQL在大型web應用程式中使用。

必須注意的是:此模式的可伸縮性僅適用於金鑰訪問。不適用於shared-nothing系統中的一般處理。任何未明確使用主鍵的請求都必須廣播到所有計算機或分割槽。對不考慮主鍵的問題的可伸縮性提出了限制。

因此,重要重申:對於基於金鑰的訪問,shared-nothing只能時線性可擴充套件的。二級索引的使用總是導致每個節點都被查閱。這限制了可伸縮性,當然舊可以服務的併發請求數而言。這是許多分散式鍵值儲存堅持非常簡單的KV儲存方式的原因之一。

shared-nothing減少了每臺機器儲存的資料量,因此總資料量可以更高,或者相反,隨著每個查詢的平均資料集減少,每個查詢將更快。這就是SN為大資料系統(HBase、Map Reduce、cassandra等)所青睞

隨著叢集的擴充套件,shared-disk體系結構中的讀取可能會遇到資源不足問題和效率較低的快取。shared-nothing架構更大規模的潛力,但是這可能會收到必須擊中所有機器的查詢障礙,如果必須跨機器傳送非結果資料集,會影響查詢速度。

出自:http://www.benstopford.com/2009/11/24/understanding-the-shared-nothing-architecture/