dht[一種分散式存儲方法]

dht[一種分散式存儲方法]
dht[一種分散式存儲方法]
更多義項 ▼ 收起列表 ▲

DHT(Distributed Hash Table,分散式哈希表)類似Tracker的根據種子特徵碼返回種子信息的網路。DHT全稱叫分散式哈希表(Distributed Hash Table),是一種分散式存儲方法。在不需要伺服器的情況下,每個客戶端負責一個小範圍的路由,並負責存儲一小部分數據,從而實現整個DHT網路的定址和存儲。新版BitComet允許同時連線DHT網路和Tracker,也就是說在完全不連上Tracker伺服器的情況下,也可以很好的下載,因為它可以在DHT網路中尋找下載同一檔案的其他用戶。

基本信息

基本信息

如何使用

在BitComet中,無須作任何設定即可自動連線並使用DHT網路,完全不需要用戶干預。BitComet使用和TCP連線埠號相同的UDP連線埠進行DHT網路連線。如果要完全禁用DHT網路,可以在選項-高級-網路連線中禁用DHT網路。對於種子製作者,可以參考:種子檔案製作

區域網路用

可以使用。當然,如果有可能打開路由器上所需連線埠的UDP轉發將更加有助於整個DHT網路的健壯性。

BitComet具體是怎樣連入DHT網路的

一般用戶是完全不需要理會這個具體過程的。這裡可以簡單的介紹一下:連入DHT網路的用戶叫做節點(node),節點之間互相有路由記錄,因此只要和任何一個已經在DHT網路中的節點連線上,客戶端就可以尋找到更多的節點,從而連入網路。

簡單地說:DHT技術就是可以使得網路中的任何一個機器都實現伺服器的部分功能,使得用戶的下載不再依靠於伺服器。用戶不需要干涉這個功能。對於普通用戶來說,不明白也沒有關係.

Kademlia

簡述

Kademlia(簡稱Kad)屬於一種典型的結構化P2P覆蓋網路(Structured P2P OverlayNetwork),以分散式的套用層全網方式來進行信息的存儲和檢索是其嘗試解決的主要問題。在Kademlia網路中,所有信息均以哈希表條目形式加以存儲,這些條目被分散地存儲在各個節點上,從而以全網方式構成一張巨大的分散式哈希表。我們可以形象地把這張哈希大表看成是一本字典:只要知道了信息索引的key,我們便可以通過Kademlia協定來查詢其所對應的value信息,而不管這個value信息究竟是存儲在哪一個節點之上。在eMule、BitTorrent等P2P檔案交換系統中,Kademlia主要充當了檔案信息檢索協定這一關鍵角色,但Kad網路的套用並不僅限於檔案交換。下文的描述將主要圍繞eMule中Kad網路的設計與實現展開。

eMule的Kda存儲信息

只要是能夠表述成為字典條目形式的信息Kad網路均能存儲,一個Kad網路能夠同時存儲多張分散式哈希表。以eMule為例,在任一時刻,其Kad網路均存儲並維護著兩張分散式哈希表,一張我們可以將其命名為關鍵字字典,而另一張則可以稱之為檔案索引字典。

a. 關鍵字字典:主要用於根據給出的關鍵字查詢其所對應的檔案名稱稱及相關檔案信息,其中key的值等於所給出的關鍵字字元串的160比特SHA1散列,而其對應的value則為一個列表,在這個列表當中,給出了所有的檔案名稱稱當中擁有對應關鍵字的檔案信息,這些信息我們可以簡單地用一個3元組條目表示:(檔案名稱,檔案長度,檔案的SHA1校驗值),舉個例子,假定存在著一個檔案“warcraft_frozen_throne.iso”,當我們分別以“warcraft”、“frozen”、“throne”這三個關鍵字來查詢Kad時,Kad將有可能分別返回三個不同的檔案列表,這三個列表的共同之處則在於它們均包含著一個檔案名稱為“warcraft_frozen_throne.iso”的信息條目,通過該條目,我們可以獲得對應iso檔案的名稱、長度及其160比特的SHA1校驗值。

b. 檔案索引字典:用於根據給出的檔案信息來查詢檔案的擁有者(即該檔案的下載服務提供者),其中key的值等於所需下載檔案的SHA1校驗值(這主要是因為,從統計學角度而言,160比特的SHA1檔案校驗值可以唯一地確定一份特定數據內容的檔案);而對應的value也是一個列表,它給出了當前所有擁有該檔案的節點的網路信息,其中的列表條目我們也可以用一個3元組表示:(擁有者IP,下載偵聽連線埠,擁有者節點ID),根據這些信息,eMule便知道該到哪裡去下載具備同一SHA1校驗值的同一份檔案了。

Kad搜尋下載流程

基於我們對eMule的Kad網路中兩本字典的理解,利用Kad網路搜尋並下載某一特定檔案的基本過程便很明白了,仍以“warcraft_frozen_throne.iso”為例,首先我們可以通過warcraft、frozen、throne等任一關鍵字查詢關鍵字字典,得到該iso的SHA1校驗值,然後再通過該校驗值查詢Kad檔案索引字典,從而獲得所有提供“warcraft_frozen_throne.iso”下載的網路節點,繼而以分段下載方式去這些節點下載整個iso檔案。

在上述過程中,Kad網路實際上所起的作用就相當於兩本字典,但值得再次指出的是,Kad並不是以集中的索引伺服器(如華語P2P源動力、Razorback 2、DonkeyServer等,騾友們應該很熟悉吧)方式來實現這兩本字典的存儲和搜尋的,因為這兩本字典的所有條目均分散式地存儲在參與Kad網路的各節點中,相關檔案信息、下載位置信息的存儲和交換均無需集中索引伺服器的參與,這不僅提高了查詢效率,而且還提高了整個P2P檔案交換系統的可靠性,同時具備相當的反拒絕服務攻擊能力;更有意思的是,它能幫助我們有效地抵制FBI的追捕,因為俗話說得好:法不治眾…看到這裡,相信大家都能理解“分散式信息檢索”所帶來的好處了吧。但是,這些條目究竟是怎樣存儲的呢?我們又該如何通過Kad網路來找到它們?不著急,慢慢來。

節點的ID和距離

Kad網路中的每一個節點均擁有一個專屬ID,該ID的具體形式與SHA1散列值類似,為一個長達160bit的整數,它是由節點自己隨機生成的,兩個節點擁有同一ID的可能性非常之小,因此可以認為這幾乎是不可能的。在Kad網路中,兩個節點之間距離並不是依靠物理距離、路由器跳數來衡量的,事實上,Kad網路將任意兩個節點之間的距離d定義為其二者ID值的逐比特二進制和數,即,假定兩個節點的ID分別為a與b,則有:d=a XORb。在Kad中,每一個節點都可以根據這一距離概念來判斷其他節點距離自己的“遠近”,當d值大時,節點間距離較遠,而當d值小時,則兩個節點相距很近。這裡的“遠近”和“距離”都只是一種邏輯上的度量描述而已;在Kad中,距離這一度量是無方向性的,也就是說a到b的距離恆等於b到a的距離,因為aXOR b==b XOR a

Kad條目存儲

從上文中我們可以發現節點ID與條目中key值的相似性:無論是關鍵字字典的key,還是檔案索引字典的key,都是160bit,而節點ID恰恰也是160bit。這顯然是有目的的。事實上,節點的ID值也就決定了哪些條目可以存儲在該節點之中,因為我們完全可以把某一個條目簡單地存放在節點ID值恰好等於條目中key值的那個節點處,我們可以將滿足(ID==key)這一條件的節點命名為目標節點N。這樣的話,一個查找條目的問題便被簡單地轉化成為了一個查找ID等於Key值的節點的問題。

由於在實際的Kad網路當中,並不能保證在任一時刻目標節點N均一定存在或者線上,因此Kad網路規定:任一條目,依據其key的具體取值,該條目將被複製並存放在節點ID距離key值最近(即當前距離目標節點N最近)的k個節點當中;之所以要將重複保存k份,這完全是考慮到整個Kad系統穩定性而引入的冗餘;這個k的取值也有講究,它是一個帶有啟發性質的估計值,挑選其取值的準則為:“在當前規模的Kad網路中任意選擇至少k個節點,令它們在任意時刻同時不線上的幾率幾乎為0”;k的典型取值為20,即,為保證在任何時刻我們均能找到至少一份某條目的拷貝,我們必須事先在Kad網路中將該條目複製至少20份。

由上述可知,對於某一條目,在Kad網路中ID越靠近key的節點區域,該條目保存的份數就越多,存儲得也越集中;事實上,為了實現較短的查詢回響延遲,在條目查詢的過程中,任一條目可被cache到任意節點之上;同時為了防止過度cache、保證信息足夠新鮮,必須考慮條目在節點上存儲的時效性:越接近目標結點N,該條目保存的時間將越長,反之,其逾時時間就越短;保存在目標節點之上的條目最多能夠被保留24小時,如果在此期間該條目被其發布源重新發布的話,其保存時間還可以進一步延長。

Kad節點維護

在Kad網路中,每一個節點均維護了160個list,其中的每個list均被稱之為一個k-桶(k-bucket),如下圖所示。在第i個list中,記錄了當前節點已知的與自身距離為2^i~2^(i+1)的一些其他對端節點的網路信息(NodeID,IP位址,UDP連線埠),每一個list(k-桶)中最多存放k個對端節點信息,注意,此處的k與上文所提到的複製係數k含義是一致的;每一個list中的對端節點信息均按訪問時間排序,最早訪問的在list頭部,而最新訪問的則放在list的尾部。

k-桶中節點信息的更新基本遵循Least-recently SeenEviction原則:當list容量未滿(k-桶中節點個數未滿k個),且最新訪問的對端節點信息不在當前list中時,其信息將直接添入list隊尾,如果其信息已經在當前list中,則其將被移動至隊尾;在k-桶容量已滿的情況下,添加新節點的情況有點特殊,它將首先檢查最早訪問的隊首節點是否仍有回響,如果有,則隊首節點被移至隊尾,新訪問節點信息被拋棄,如果沒有,這才拋棄隊首節點,將最新訪問的節點信息插入隊尾。可以看出,儘可能重用已有節點信息、並且按時間排序是k-桶節點更新方式的主要特點。從啟發性的角度而言,這種方式具有一定的依據:線上時間長一點的節點更值得我們信任,因為它已經線上了若干小時,因此,它在下一個小時以內保持線上的可能性將比我們最新訪問的節點更大,或者更直觀點,我這裡再給出一個更加人性化的解釋:MP3檔案交換本身是一種觸犯著作權法律的行為,某一個節點反正已經犯了若干個小時的法了,因此,它將比其他新加入的節點更不在乎再多犯一個小時的罪……-_-b

由上可見,設計採用這種多k-bucket數據結構的初衷主要有二:a. 維護最新到的節點信息更新;b.實現快速的節點信息篩選操作,也就是說,只要知道某個需要查找的特定目標節點N的ID,我們便可以從當前節點的k-buckets結構中迅速地查出距離N最近的若干已知節點。

Kad尋找節點

已知某節點ID,查找獲得當前Kad網路中與之距離最短的k個節點所對應的網路信息(NodeID,IP位址,UDP連線埠)的過程,即為Kad網路中的一次節點查詢過程(NodeLookup)。注意,Kad之所以沒有把節點查詢過程嚴格地定義成為僅僅只查詢單個目標節點的過程,這主要是因為Kad網路並沒有對節點的上線時間作出任何前提假設,因此在多數情況下我們並不能肯定需要查找的目標節點一定線上或存在。

整個節點查詢過程非常直接,其方式類似於DNS的疊代查詢:

a. 由查詢發起者從自己的k-桶中篩選出若干距離目標ID最近的節點,並向這些節點同時傳送異步查詢請求;

b .被查詢節點收到請求之後,將從自己的k-桶中找出自己所知道的距離查詢目標ID最近的若干個節點,並返回給發起者;

c. 發起者在收到這些返回信息之後,再次從自己所有已知的距離目標較近的節點中挑選出若干沒有請求過的,並重複步驟1;

d. 上述步驟不斷重複,直至無法獲得比查詢者當前已知的k個節點更接近目標的活動節點為止。

e. 在查詢過程中,沒有及時回響的節點將立即被排除;查詢者必須保證最終獲得的k個最節點都是活動的。

簡單總結一下上述過程,實際上它跟我們日常生活中去找某一個人打聽某件事是非常相似的,比方說你是個AgentSmith,想找小李(key)問問他的手機號碼(value),但你事先並不認識他,你首先肯定會去找你所認識的和小李在同一個公司工作的人,比方說小趙,然後小趙又會告訴你去找與和小李在同一部門的小劉,然後小劉又會進一步告訴你去找和小李在同一個項目組的小張,最後,你找到了小張,喲,正好小李出差去了(節點下線了),但小張恰好知道小李的號碼(cache),這樣你總算找到了所需的信息。在節點查找的過程中,“節點距離的遠近”實際上與上面例子中“人際關係的密切程度”所代表的含義是一樣的。

最後說說上述查詢過程的局限性:Kad網路並不適合套用於模糊搜尋,如通配符支持、部分查找等場合,但對於檔案共享場合來說,基於關鍵字的精確查找功能已經基本足夠了(值得注意的是,實際上我們只要對上述查找過程稍加改進,並可以令其支持基於關鍵字匹配的布爾條件查詢,但仍不夠最佳化)。這個問題反映到eMule的套用層面來,它直接說明了檔案共享時其命名的重要性所在,即,檔案名稱中的關鍵字定義得越明顯,則該檔案越容易被找到,從而越有利於其在P2P網路中的傳播;而另一方面,在eMule中,每一個已分享檔案均可以擁有自己的相關注釋,而Comment的重要性還沒有被大家認識到:實際上,這個檔案注釋中的關鍵字也可以直接被利用來替代檔案名稱關鍵字,從而指導和方便用戶搜尋,尤其是當檔案名稱本身並沒有體現出關鍵字的時候。

Kad存儲和搜尋條目

從本質上而言,存儲、搜尋某特定條目的問題實際上就是節點查找的問題。當需要在Kad網路中存儲一個條目時,可以首先通過節點查找算法找到距離key最近的k個節點,然後再通知它們保存條目即可。而搜尋條目的過程則與節點查詢過程也是基本類似,由搜尋發起方以疊代方式不斷查詢距離key較近的節點,一旦查詢路徑中的任一節點返回了所需查找的value,整個搜尋的過程就結束。為提高效率,當搜尋成功之後,發起方可以選擇將搜尋到的條目存儲到查詢路徑的多個節點中,作為方便後繼查詢的cache;條目cache的逾時時間與節點-key之間的距離呈指數反比關係。

新節點加入Kad

當一個新節點首次試圖加入Kad網路時,它必須做三件事,其一,不管通過何種途徑,獲知一個已經加入Kad網路的節點信息(我們可以稱之為節點I),並將其加入自己的k-buckets;其二,向該節點發起一次針對自己ID的節點查詢請求,從而通過節點I獲取一系列與自己距離鄰近的其他節點的信息;最後,刷新所有的k-bucket,保證自己所獲得的節點信息全部都是新鮮的。

雙氫睪酮

雙氫睪酮,血液循環中的一種雄激素,其他的包括脫氫表雄酮硫酸鹽(DHEAS)、脫氫表雄酮(DHEA)、雄烯二酮 (Δ4A)

男性型脫髮的病因基本明了,公認為發病因素是遺傳因素和雄激素二氫睪酮(DHT)綜合所致,抑制DHT的藥物非那雄胺可以很明顯地保持頭髮不被掉落。科學證明:當頭皮中含有大量DHT時,便會出現頭髮毛囊萎縮,頭髮的生長期縮短和頭髮變稀疏。

本病有明顯家族發病傾向,可以形成遺傳。根據科學分析,脫髮遺傳不僅要看父母,還要看雙方的家族,如叔、伯、舅舅等。如禿髮發生在女方,症狀比男性輕,所以有時病發生在母親一方症狀可能不太明顯,而在舅舅會更明顯些。但禿髮女性比禿髮男性攜帶更多的易感基因。

此外患者頭皮中雙氫睪酮的水平比正常人要高,而雙氫睪酮是睪酮在5α還原酶(DHT)的催化下形成的。5α還原酶中的第二型主要分布於毛囊,在這種酶作用下,大量睪酮轉變為雙氫睪酮,後者作用於毛囊,導致毛囊的萎縮。

對於男性型脫髮,過去還沒有確實有效療法,一種二型5α還原酶抑制劑保法止用於該病的治療取得了顯著的療效,這種藥物可抑制雙氫睪酮的形成,從而使得毛囊能夠維持正常的生長周期,減少由終毛向毳毛的變化,從而就抑制了脫髮,據國內外研究,患者每天服用1mg保法止可顯著抑制脫髮,並可使頭髮密度加深,能夠達到很理想的美容效果。但是應當早期用藥和堅持用藥,否則會影響療效。

樂隊組合

D.H.T樂隊來自比利時,成員包括歌手Edmee Daenen和DJ Da Rick以及許多製作人。他們的音樂節奏輕快,集眾多舞曲風格之長。早在2001年,年僅15歲的Edmee Daenen就開始為D.H.T演唱。如今,20多歲的她已經歷盡風雨,無論是在舞台表演還是在錄音棚演唱,她都得心應手。D.H.T的新專輯正在籌備之中。

《Listen To Your Heart》,意為“傾聽你的心聲”,是一首旋律優美的英文歌曲,原唱為來自國際流行音樂重鎮瑞典的音樂團體——Roxette。2005年,一支來自比利時、名不見經傳的D.H.T樂隊,憑藉翻唱這首歌成功打入美國音樂界。此外,來自德國的男女4人組合——Befour也演唱過同名歌曲。

D.H.T的原意是Dance.House.Trance,在他們進軍美國時,美方代理曾開玩笑說DHT的意思是Don't Hate This。

相關詞條

相關搜尋

熱門詞條

聯絡我們