一致性雜湊演算法(百度百科)

2021-06-22 00:32:31 字數 2442 閱讀 4433

一致性

雜湊演算法

在2023年由

麻省理工學院

提出(參見擴充套件閱讀[1]),設計目標是為了解決網際網路中的熱點(hot spot)問題,初衷和

carp

十分類似。一致性雜湊修正了

carp

使用的簡單

雜湊演算法

帶來的問題,使得dht可以在p2p環境中真正得到應用。

一致性雜湊提出了在動態變化的cache環境中,

雜湊演算法應該滿足的4個適應條件:

平衡性是指雜湊的結果能夠盡可能分布到所有的緩衝中去,這樣可以使得所有的緩衝空間都得到利用。很多

雜湊演算法都能夠滿足這一條件。

單調性是指如果已經有一些內容通過雜湊分派到了相應的緩衝中,又有新的

緩衝區加入到系統中,那麼雜湊的結果應能夠保證原有已分配的內容可以被對映到新的緩衝區中去,而不會被對映到舊的緩衝集合中的其他

緩衝區。(這段翻譯資訊有負面價值的,當

緩衝區大小變化時consistent hashing盡量保護已分配的內容不會被重新對映到新緩衝區。)

簡單的 雜湊演算法往往不能滿足單調性的要求,如最簡單的線性雜湊:

在上式中,p表示全部緩衝的大小。不難看出,當緩衝大小發生變化時(從p1到p2),原來所有的雜湊結果均會發生變化,從而不滿足單調性的要求。

雜湊結果的變化意味著當緩衝空間發生變化時,所有的對映關係需要在系統內全部更新。而在p2p系統內,緩衝的變化等價於peer加入或退出系統,這一情況在p2p系統中會頻繁發生,因此會帶來極大計算和傳輸負荷。單調性就是要求

雜湊演算法能夠應對這種情況。

在分布式環境中,終端有可能看不到所有的緩衝,而是只能看到其中的一部分。當終端希望通過雜湊過程將內容對映到緩衝上時,由於不同終端所見的緩衝範圍有可能不同,從而導致雜湊的結果不一致,最終的結果是相同的內容被不同的終端對映到不同的

緩衝區中。這種情況顯然是應該避免的,因為它導致相同內容被

儲存到不同緩衝中去,降低了系統儲存的效率。分散性的定義就是上述情況發生的嚴重程度。好的

雜湊演算法應能夠盡量避免不一致的情況發生,也就是盡量降低分散性。

負載問題實際上是從另乙個角度看待分散性問題。既然不同的終端可能將相同的內容對映到不同的

緩衝區中,那麼對於乙個特定的緩衝區而言,也可能被不同的使用者對映為不同的內容。與分散性一樣,這種情況也是應當避免的,因此好的

雜湊演算法應能夠盡量降低緩衝的負荷。

從表面上看,一致性雜湊針對的是分布式緩衝的問題,但是如果將緩衝看作p2p系統中的peer,將對映的內容看作各種共享的資源(資料,檔案,**流等),就會發現兩者實際上是在描述同一問題。

路由演算法

在一致性

雜湊演算法中,每個節點(對應p2p系統中的peer)都有隨機分配的id。在將內容對映到

節點時,使用內容的

關鍵字和節點的id進行一致性雜湊運算並獲得鍵值。一致性雜湊要求鍵值和節點id處於同一值域。最簡單的鍵值和id可以是一維的,比如從0000到9999的整數集合。

根據鍵值

儲存內容時,內容將被儲存到具有與其鍵值最接近的id的節點上。例如鍵值為1001的內容,系統中有id為1000,1010,1100的節點,該內容將被對映到1000節點。

為了構建查詢所需的路由,一致性雜湊要求每個節點儲存其上行節點(id值大於自身的節點中最小的)和下行節點(id值小於自身的節點中最大的)的位置資訊(ip位址)。當節點需要查詢內容時,就可以根據內容的鍵值決定向上行或下行節點發起查詢請求。收到查詢請求的節點如果發現自己擁有被請求的目標,可以直接向發起查詢請求的節點返回確認;如果發現不屬於自身的範圍,可以**請求到自己的上行/下行節點。

為了維護上述路由資訊,在

節點加入/退出系統時,相鄰的節點必須及時更新路由資訊。這就要求節點不僅儲存直接相連的下行節點位置資訊,還要知道一定深度(n跳)的間接下行節點資訊,並且動態地維護節點列表。當節點退出系統時,它的上行節點將嘗試直接連線到最近的下行節點,連線成功後,從新的下行節點獲得下行節點列表並更新自身的節點列表。同樣的,當新的節點加入到系統中時,首先根據自身的id找到下行節點並獲得下行節點列表,然後要求上行節點修改其下行節點列表,這樣就恢復了路由關係。

一致性雜湊基本解決了在p2p環境中最為關鍵的問題——如何在動態的網路拓撲中分布儲存和路由。每個

節點僅需維護少量相鄰節點的資訊,並且在節點加入/退出系統時,僅有相關的少量節點參與到拓撲的維護中。所有這一切使得一致性雜湊成為第乙個實用的dht演算法。

但是一致性雜湊的

路由演算法尚有不足之處。在查詢過程中,查詢訊息要經過o(n)步(o(n)表示與n成正比關係,n代表系統內的節點總數)才能到達被查詢的節點。不難想象,當系統規模非常大時,節點數量可能超過百萬,這樣的查詢效率顯然難以滿足使用的需要。換個角度來看,即使使用者能夠忍受漫長的時延,查詢過程中產生的大量訊息也會給網路帶來不必要的負荷。

英文解釋

AnimateWindow 百度百科

animatewindow 開放分類 程式設計 計算機 api 函式功能 該函式能在顯示與隱藏視窗時能產生特殊的效果。有兩種型別的動畫效果 滾動動畫和滑動動畫。函式原型 bool animatewindow hwnd hwnd,dword dwtime,dword dwflags 引數 hwnd 指...

WCF百度百科

根據微軟官方的解釋,wcf 之前的版本名為 indigo 是使用託管 建立和執行面向服務 service oriented 應用程式的統一框架。它使得開發者能夠建立乙個跨平台的安全 可信賴 事務性的解決方案,且能與已有系統相容協作。wcf是微軟分布式應用程式開發的集大成者,它整合了.net平台下所有...

Mashup 百度百科

mashup是糅合,是當今網路上新出現的一種網路現象,將兩種以上使用公共或者私有資料庫的web應用,加在一起,形成乙個整合應用。一般使用源應用的api介面,或者是一些rss輸出 含atom 作為內容源,合併的web應用用什麼技術,則沒有什麼限制。mashup在geek群體和網際網路玩家之中獲得了極大...