去中心一致性演算法
① 剛剛了解,誰能告訴我區塊鏈是什麼通俗解釋一下區塊鏈技術的方法
大家共同記賬的方式,也被稱為「分布式」或「去中心化」,因為人人都記賬,且賬本的准確性由程式演算法決定,而非某個權威機構。
這就是區塊鏈,核心講完了,區塊鏈就這么簡單,一個共同記賬的賬本
區塊鏈技術六大核心演算法:
區塊鏈核心演算法一:拜占庭協定
拜占庭的故事大概是這么說的:拜占庭帝國擁有巨大的財富,周圍10個鄰邦垂誕已久,但拜占庭高牆聳立,固若金湯,沒有一個單獨的鄰邦能夠成功入侵。任何單個鄰邦入侵的都會失敗,同時也有可能自身被其他9個鄰邦入侵。拜占庭帝國防禦能力如此之強,至少要有十個鄰邦中的一半以上同時進攻,才有可能攻破。然而,如果其中的一個或者幾個鄰邦本身答應好一起進攻,但實際過程出現背叛,那麼入侵者可能都會被殲滅。於是每一方都小心行事,不敢輕易相信鄰國。這就是拜占庭將軍問題。
區塊鏈核心演算法二:非對稱加密技術
在上述拜占庭協定中,如果10個將軍中的幾個同時發起消息,勢必會造成系統的混亂,造成各說各的攻擊時間方案,行動難以一致。誰都可以發起進攻的信息,但由誰來發出呢?其實這只要加入一個成本就可以了,即:一段時間內只有一個節點可以傳播信息。當某個節點發出統一進攻的消息後,各個節點收到發起者的消息必須簽名蓋章,確認各自的身份。
區塊鏈核心演算法三:容錯問題
我們假設在此網路中,消息可能會丟失、損壞、延遲、重復發送,並且接受的順序與發送的順序不一致。此外,節點的行為可以是任意的:可以隨時加入、退出網路,可以丟棄消息、偽造消息、停止工作等,還可能發生各種人為或非人為的故障。我們的演算法對由共識節點組成的共識系統,提供的容錯能力,這種容錯能力同時包含安全性和可用性,並適用於任何網路環境。
區塊鏈核心演算法四:Paxos 演算法(一致性演算法)
Paxos演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。一個典型的場景是,在一個分布式資料庫系統中,如果各節點的初始狀態一致,每個節點都執行相同的操作序列,那麼他們最後能得到一個一致的狀態。為保證每個節點執行相同的命令序列,需要在每一條指令上執行一個「一致性演算法」以保證每個節點看到的指令一致。一個通用的一致性演算法可以應用在許多場景中,是分布式計算中的重要問題。 節點通信存在兩種模型:共享內存和消息傳遞。Paxos演算法就是一種基於消息傳遞模型的一致性演算法。
區塊鏈核心演算法五:共識機制
區塊鏈共識演算法主要是工作量證明和權益證明。拿比特幣來說,其實從技術角度來看可以把PoW看成重復使用的Hashcash,生成工作量證明在概率上來說是一個隨機的過程。開采新的機密貨幣,生成區塊時,必須得到所有參與者的同意,那礦工必須得到區塊中所有數據的PoW工作證明。與此同時礦工還要時時觀察調整這項工作的難度,因為對網路要求是平均每10分鍾生成一個區塊。
區塊鏈核心演算法六:分布式存儲是一種數據存儲技術,通過網路使用每台機器上的磁碟空間,並將這些分散的存儲資源構成一個虛擬的存儲設備,數據分散的存儲在網路中的各個角落。所以,分布式存儲技術並不是每台電腦都存放完整的數據,而是把數據切割後存放在不同的電腦里。就像存放100個雞蛋,不是放在同一個籃子里,而是分開放在不同的地方,加起來的總和是100個。想了解更多可以多利用網路搜索,網路搜索結果-小知識
② 資料庫一致性模型和隔離級別
資料庫下一步發展的基礎:分布式SQL,分布式SQL是部署在單個數據中心中的多個物理節點或多個數據中心(如果需要)中的單個邏輯資料庫。所有這些都使其能夠提供彈性的氧化皮和防彈的彈性。今天我們就來聊聊資料庫一致性模型和隔離級別。
③ 為什麼去中心化了還能升級
什麼是「去中心化」?
「去中心化」翻譯自英語單詞Decentralization,是由前綴de-、詞干central、後綴-ization組成。其中,詞干central意為「中心」,後綴-ization意為「……化」,而前綴de-則有離開、除去、取消、相反等含義。因此,將其翻譯為去中心化是非常准確的。
那麼,去中心化具體而言是什麼含義呢?
以太坊創始人Vitalik Buterin於2017年2月發表的《The meaning of decentralization》一文中,詳細闡述了去中心化的含義。他認為應該從三個角度來區分計算機軟體的中心化和去中心化:架構、治理和邏輯。
架構中心化是指系統能容忍多少節點的崩潰而可以繼續運行;治理中心化是指需要多少的個人和組織能最終控制這個系統;邏輯中心化是指系統呈現的介面和數據是否像是一個單一的整體。
區塊鏈是全網統一的賬本,因此從邏輯上看是中心化的,這一點無可置疑。從架構上看,區塊鏈是基於對等網路的,因此是架構去中心化的。從治理上看,區塊鏈通過共識演算法使得少數人很難控制整個系統,因此是治理去中心化的。架構和治理上的去中心化為區塊鏈帶來三個好處:容錯性、抗攻擊力和防合謀。
區塊鏈與傳統分布式系統的5點區別
作為一種全新種類的分布式系統,區塊鏈往往被錯誤地當作是一個分布式的資料庫或日誌系統,實際上區塊鏈與傳統的分布式系統之間有著本質的區別——去中心化。現在我們來審視一下區塊鏈與傳統分布式系統的主要區別:
(1)一致性演算法:區塊鏈需要解決的是拜占庭將軍問題,即網路中存在一個或多個欺詐節點,可能會故意違反協議或傳輸錯誤的數據,因此區塊鏈往往採用拜占庭容錯的一致性演算法(通常稱為共識演算法),如BFT、PoW、PoS等;而傳統分布式系統只需考慮節點失效和通訊錯誤的情況,往往採用paxos、raft之類的一致性演算法,這類演算法不能對抗欺詐節點。
(2)中央控制方:在區塊鏈網路中是不存在中央控制方的,沒有一個節點可以控制或協調賬本數據的生成,各節點通過共識演算法進行協調,生成一致的賬本。而傳統發布式系統則往往是由一個機構進行控制,統一調度各節點參與運算。
(3)規則制定:區塊鏈的規則就是共識協議,又稱共識機制,共識演算法是其中的一部分。共識機制一般是由一個人或一個團隊設計制定,並開發出相應的程序,提供給社區使用。這一點似乎與傳統的分布式系統一樣,但區塊鏈的共識機制的改變、升級是需要社區對此有一致的共識,如果不能達成共識,則任何人都可以實施硬分叉,另建一個社區、一條鏈。這就是共識機制的去中心化過程。
④ 分布式共識包含哪三種方法
PoW 、PoS 、DPOW都是什麼意思?
說到區塊鏈,我們必然會談及它的共識機制。不了解區塊鏈的共識機制,就無法理解區塊鏈的真正意義。那麼,今日份的區塊鏈的共識機制了解一下?
共識機制是什麼?
什麼是共識?直取它的字面意思,就是"共同的認識".
人與人是不同的,這種不同不僅體現在身材、長相、能力,更體現在文化、觀點、想法、利益訴求等等方面。
共識,簡而言之,就是一個群體的成員在某一方面達成的一致意見。
我們了解到,信任是社會運轉中的一大痛點,銀行有自己的信用體系,過去的金融體系服務於只服務於極少的企業家,因為建立信用體系耗資巨大。後來支付寶有了芝麻信用,信用已經關繫到生活的很多方面,信用卡額度、花唄額度,芝麻信用高出國還可以免簽。我們正享受著信用給我們帶來的便捷。
區塊鏈本質是去中心化,去中心化的核心是共識機制,區塊鏈上的共識機制主要解決由誰來構造區塊,以及如何維護區塊鏈統一的問題。
區塊鏈共識機制的目標是使所有的誠實節點保存一致的區塊鏈視圖,同時滿足兩個性質:
1)一致性:所有誠實節點保存的區塊鏈的前綴部分完全相同。
2)有效性:由某誠實節點發布的信息終將被其他所有誠實節點記錄在自己的區塊鏈中。
區塊鏈的自信任主要體現於分布於區塊鏈中的用戶無須信任交易的另一方,也無須信任一個中心化的機構,只需要信任區塊鏈協議下的軟體系統即可實現交易。
共識機制是什麼?PoW 、PoS 、DPOW都是什麼意思?
共識機制的必要性?
分布式系統中,多個主機通過非同步通信方式組成網路集群。在這樣的一個非同步系統中,需要主機之間進行狀態復制,以保證每個主機達成一致的狀態共識。錯誤信息可能出現在非同步系統內並不斷傳播,因此需要在默認不可靠的非同步網路中定義容錯協議,以確保各主機達成安全可靠的狀態共識,這就是共識機制誕生的必要性。
這種自信任的前提是區塊鏈的共識機制(consensus),即在一個互不信任的市場中,要想使各節點達成一致的充分必要條件是每個節點出於對自身利益最大化的考慮,都會自發、誠實地遵守協議中預先設定的規則,判斷每一筆記錄的真實性,最終將判斷為真的記錄記入區塊鏈之中。attachments-2018-08-9yY7VRHa5b738e3d96021.jpg
換句話說,如果各節點具有各自獨立的利益並互相競爭,則這些節點幾乎不可能合謀欺騙你,而當節點們在網路中擁有公共信譽時,這一點體現得尤為明顯。區塊鏈技術正是運用一套基於共識的數學演算法,在機器之間建立"信任"網路,從而通過技術背書而非中心化信用機構來進行全新的信用創造。
當今區塊鏈的幾種共識機制介紹
區塊鏈上的共識機制有多種,但任何一種都不是完美無缺,或者說適用於所有應用場景的。
PoW 工作量證明
整個系統中每個節點為整個系統提供計算能力(簡稱算力),通過一個競爭機制,讓計算工作完成最出色的節點獲得系統的獎勵,即完成新生成貨幣的分配,簡單理解就是多勞多得,bitcoin、LTC等貨幣型區塊鏈就應用POW機制。
優點
完全去中心化節點自由進出,演算法簡單,容易實現破壞系統花費的成本巨大,只要網路破壞者的算力不超過網路總算力的50%,網路的交易狀態就能達成一致
缺點
浪費能源,這是最大的缺點區塊的確認時間難以縮短,如bitcoin每秒只能做7筆交易,不適合商業應用新的區塊鏈必須找到一種不同的散列演算法,否則就會面臨bitcoin的算力攻擊對節點的性能網路環境要求高容易產生分叉,需要等待多個確認無法達成最終一致性
PoS 權益證明
也稱股權證明,類似於你把財產存在銀行,這種模式會根據你持有加密貨幣的數量和時間,分配給你相應的利息。
優點
對節點性能要求低,達成共識時間短
缺點
沒有最終一致性,需要檢查點機制來彌補最終性
DPOW 委託股權證明
DPOW是 PoS 的進化方案,在常規 PoW和 PoS 中,任何一個新加入的區塊,都需要被整個網路所有節點做確認,非常影響效率。
DPoS則類似於現代董事會的投票機制,通過選舉代表來進行投票和決策。被選舉出的n個記賬節點來做新區塊的創建、驗證、簽名和相互監督,這樣就極大地減少了區塊創建和確認所需要消耗的時間和算力成本。
優點
大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證
缺點
犧牲了去中心化的概念,不適合公有鏈
PBFT 實用拜占庭容錯
實用拜占庭容錯機制是一種採用"許可投票、少數服從多數"來選舉領導者並進行記賬的共識機制,該共識機制允許拜占庭容錯,允許強監督節點參與,具備許可權分級能力,性能更高,耗能更低,而且每輪記賬都會由全網節點共同選舉領導者,允許33%的節點作惡,容錯率為33%.實用拜占庭容錯特別適合聯盟鏈的應用場景。
優點
會背離中心化,加密貨幣的存在及獎勵機制會產生馬太效應,讓社區中的窮者更窮,富者更富共識效率高,可實現高頻交易
缺點
當系統只剩下33%的節點運行時,系統會停止運行
dBFT 授權拜占庭容錯
這種機制是用權益來選出記賬人,然後記賬人之間通過拜占庭容錯演算法達成共識。授權拜占庭容錯機制最核心的一點,就是最大限度地確保系統的最終性,使區塊鏈能夠適用於真正的金融應用場景。
優點
專業化的記賬人可以容忍任何類型的錯誤記賬由多人協同完成,每一個區塊都有最終性,不會分叉演算法的可靠性有嚴格的數學證明
缺點
當三分之一或以上記賬人停止工作後,系統將無法提供服務當三分之一或以上記賬人聯合作惡,可能會使系統出現分叉
Pool 驗證池
基於傳統的分布式一致性技術,加上數據驗證機制。
優點
不需要加密貨幣也可以工作,在成熟的分布式一致性演算法(Pasox、Raft)基礎上,實現秒級共識驗證。
缺點
去中心化程度不如bitcoin,更適合多方參與的多中心商業模式。
Paxos
這是一種傳統的分布式一致性演算法,是一種基於選舉領導者的共識機制。領導者節點擁有絕對許可權,並允許強監督節點參與,其性能高,資源消耗低。所有節點一般有線下准入機制,但選舉過程中不允許有作惡節點,不具備容錯性。
Paxos演算法中將節點分為三種類型:
proposer:提出一個提案,等待大家批准為結案。往往是客戶端擔任該角色
acceptor:負責對提案進行投票。往往是服務端擔任該角色
learner:被告知結案結果,並與之統一,不參與投票過程。可能為客戶端或服務端
Paxos 能保證在超過50%的正常節點存在時,系統能達成共識。
瑞波共識機制
瑞波共識演算法使一組節點能夠基於特殊節點列表形成共識,初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由該俱樂部51%的會員投票通過。共識遵循這些核心成員的"51%權利",外部人員則沒有影響力。由於該俱樂部由中心化開始,它將一直是中心化的,而如果它開始腐化,股東們什麼也做不了。與bitcoin及Peercoin一樣,瑞波系統將股東們與其投票權隔開,因此,它比其他系統更中心化。
Peercoin
Peercoin(點點幣,PPC),混合了POW工作量證明及POS權益證明方式,其中POW主要用於發行貨幣,未來預計隨著挖礦難度上升,產量降低,系統安全主要由POS維護。
在區塊鏈網路中,由於應用場景的不同,所設計的目標各異,不同的區塊鏈系統採用了不同的共識演算法。每種共識演算法都不是完美的,都有其優點和局限性。
區塊鏈解決了在不可信信道上傳輸可信信息、價值轉移的問題,而共識機制解決了區塊鏈如何分布式場景下達成一致性的問題。
雖然區塊鏈目前還處於發展的早期,行業發展還面臨著一些阻礙,但社會已經足夠多地認識到區塊鏈的價值,區塊鏈發展的腳步絕不會停滯不前,行業發展也定會找到突破阻礙的方法。
⑤ elasticsearch的自動發現節點機制是怎麼實現的,原理是怎樣
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
作者:ben well
鏈接:http://www.hu.com/question/29360024/answer/55368070
來源:知乎
早期 es 版本有 split brain 問題,俗稱腦裂。ES 採用的是一種 P2P 的 gossip 選舉方式,Gossip 演算法因為 Cassandra 而名聲大噪。
背景:
Gossip 演算法, 靈感來自辦公室八卦, 只要一個人八卦一下, 在有限的時間內所有人都會知道該八卦的信息,
這種方式也與病毒傳播類似, 因為 Gossip 有眾多的別名"閑話演算法"、"疫情傳播演算法"、"病毒感染演算法"、"謠言傳播(Rumor-Mongering)演算法".
但 Gossip 並不是一個新東西, 之前的泛洪查找、路由演算法都歸屬於這個范疇, 不同的是 Gossip 給這類演算法提供了明確的語義、具體實施方法及收斂性證明.
特點:
Gossip 演算法又被稱為反熵(Anti-Entropy), 熵是物理學上的一個概念, 代表雜亂無章, 而反熵就是在雜亂無章中尋求一致,
這充分說明了 Gossip 的特點:在一個有界網路中, 每個節點都隨機地與其他節點通信, 經過一番雜亂無章的通信,
最終所有節點的狀態都會達成一致. 每個節點可能知道所有其他節點, 也可能僅知道幾個鄰居節點,
只要這些節可以通過網路連通, 最終他們的狀態都是一致的, 當然這也是疫情傳播的特點.
要注意到的一點是, 即使有的節點因宕機而重啟, 有新節點加入, 但經過一段時間後,
這些節點的狀態也會與其他節點達成一致, 也就是說, Gossip 天然具有分布式容錯的優點.
本質:
Gossip 是一個帶冗餘的容錯演算法, 更進一步, Gossip 是一個最終一致性演算法。
雖然無法保證在某個時刻所有節點狀態一致, 但可以保證在」最終「所有節點一致, 」最終「是一個現實中存在, 但理論上無法證明的時間點。
因為 Gossip 不要求節點知道所有其他節點, 因此又具有去中心化的特點, 節點之間完全對等, 不需要任何的中心節點。
實際上 Gossip 可以用於眾多能接受「最終一致性」的領域:失敗檢測、路由同步、Pub/Sub、動態負載均衡。
但 Gossip 的缺點也很明顯, 冗餘通信會對網路帶寬、CPU 資源造成很大的負載, 而這些負載又受限於通信頻率, 該頻率又影響著演算法收斂的速度。
總結:
Gossip 是一種去中心化、容錯而又最終一致性的絕妙演算法, 其收斂性不但得到證明還具有指數級的收斂速度。
使用 Gossip 的系統可以很容易的把 Server 擴展到更多的節點, 滿足彈性擴展輕而易舉。
唯一的缺點是收斂是最終一致性, 不適應那些強一致性的場景, 比如 2PC。
⑥ 求理想點法及層次分析法,演算法原理及步驟什麼的
信息熵
熵權法是一種客觀賦權方法。按照資訊理論基本原理的解釋,信息是系統有序程度的一個度量,熵是系統無序程度的一個度量;如果指標的信息熵越小,該指標提供的信息量越大,在綜合評價中所起作用理當越大,權重就應該越高。
單位質量物質的熵稱為比熵,記為s。熵最初是根據熱力學第二定律引出的一個反映自發過程不可逆性的物質狀態參量。熱力學第二定律是根據大量觀察結果總結出來的規律,有下述表述方式:
理想點的原理
理想點法是C.L.Hwang 和 K.Yoon 兩人於1981年首次提出,理想點法根據有限個評價對象與理想化目標的接近程度進行排序的方法,是在現有的對象中進行相對優劣的評價理想點法是多目標決策分析中一種常用的有效方法,又稱為優劣解距離法。
其基本原理,是通過檢測評價對象與最優解、最劣解的距離來進行排序,若評價對象最靠近最優解同時又最遠離最劣解,則為最好;否則為最差。其中最優解的各指標值都達到各評價指標的最優值。最劣解的各指標值都達到各評價指標的最差值。
層次分析法的原理
人們在進行社會的、經濟的以及科學管理領域問題的系統分析中,面臨的常常是一個由相互關聯、相互制約的眾多因素構成的復雜而往往缺少定量數據的系統。層次分析法為這類問題的決策和排序提供了一種新的、簡潔而實用的建模方法。
變數的不確定性越大,熵也就越大,把它搞清楚所需要的信息量也就越大。 信息熵是資訊理論中用於度量信息量的一個概念。一個系統越是有序,信息熵就越低; 反之,一個系統越是混亂,信息熵就越高。所以,信息熵也可以說是系統有序化程度的一個度量。
⑦ 區塊鏈目前用到哪些共識機制它們各自的優缺點和適用范圍是什麼
目前主要有四大類共識機制:Pow、Pos、DPos、Pool
1、Pow工作量證明,就是大家熟悉的挖礦,通過與或運算,計算出一個滿足規則的隨機數,即獲得本次記賬權,發出本輪需要記錄的數據,全網其它節點驗證後一起存儲;
優點:完全去中心化,節點自由進出;
缺點:目前bitcoin已經吸引全球大部分的算力,其它再用Pow共識機制的區塊鏈應用很難獲得相同的算力來保障自身的安全;挖礦造成大量的資源浪費;共識達成的周期較長,不適合商業應用
2、Pos權益證明,Pow的一種升級共識機制;根據每個節點所佔代幣的比例和時間;等比例的降低挖礦難度,從而加快找隨機數的速度。
優點:在一定程度上縮短了共識達成的時間
缺點:還是需要挖礦,本質上沒有解決商業應用的痛點
3、DPos股份授權證明機制,類似於董事會投票,持幣者投出一定數量的節點,代理他們進行驗證和記賬。
優點:大幅縮小參與驗證和記賬節點的數量,可以達到秒級的共識驗證
缺點:整個共識機制還是依賴於代幣,很多商業應用是不需要代幣存在的
4、Pool驗證池,基於傳統的分布式一致性技術,加上數據驗證機制;是目前行業鏈大范圍在使用的共識機制
優點:不需要代幣也可以工作,在成熟的分布式一致性演算法(Pasox、Raft)基礎上,實現秒級共識驗證;
缺點:去中心化程度不如bictoin;更適合多方參與的多中心商業模式
在使用共識機制,保證數據一致性時的巨大優勢(共識機制則是Ripple首先提出的,數據正確性優先的網路交易同步機制,在共識網路中,無論軟體代碼怎麼變動,無法取得共識就無法進入網路,更不要提分叉了)。
——————————————————
PS:稍微自黑下,雖然共識機制絕對能確保任何時候都不會產生硬分叉。但是,這種機制的缺點也比較明顯,那就是要取得與其他節點的共識,明顯要比當前Bitcoin網路漫長的多。極端情況下,在Ripple共識機制網路中掉線的後果也是很恐怖的。
有可能你家停電一天,第二天整個系統就再也無法與其它Rippled節點取得共識了(共識機制事實上需要超過80%的節點承認了你的數據,你的提交才會被其它節點接受,否則就會被排它的拒絕連接),甚至只能清空自己全部500多GB數據重新同步才能連上其它Ripple節點。
所以目前來說,現有的Rippled端並不適合民用(商用的話影響就比較小,比如RL自己的Rippled節點託管在亞馬遜雲數據中心,長時間無響應是可以高額索賠的,而且那種地方除了大型災害幾乎不會斷),這也是RL一直想改進的方面之一。
⑧ 分布式系統常用的一致性演算法有哪些
在做伺服器負載均衡時候可供選擇的負載均衡的演算法有很多,包括: 輪循演算法(Round Robin)、哈希演算法(HASH)、最少連接演算法(Least Connection)、響應速度演算法(Response Time)、加權法(Weighted )等。其中哈希演算法是最為常用的演算法. 典型的應用場景是: 有N台伺服器提供緩存服務,需要對伺服器進行負載均衡,將請求平均分發到每台伺服器上,每台機器負責1/N的服務。 常用的演算法是對hash結果取余數 (hash() mod N):對機器編號從0到N-1,按照自定義的hash()演算法,對每個請求的hash()值按N取模,得到余數i,然後將請求分發到編號為i的機器。但這樣的演算法方法存在致命問題,如果某一台機器宕機,那麼應該落在該機器的請求就無法得到正確的處理,這時需要將當掉的伺服器從演算法從去除,此時候會有(N-1)/N的伺服器的緩存數據需要重新進行計算;如果新增一台機器,會有N /(N+1)的伺服器的緩存數據需要進行重新計算。對於系統而言,這通常是不可接受的顛簸(因為這意味著大量緩存的失效或者數據需要轉移)。那麼,如何設計一個負載均衡策略,使得受到影響的請求盡可能的少呢? 在Memcached、Key-Value Store、Bittorrent DHT、LVS中都採用了Consistent Hashing演算法,可以說Consistent Hashing 是分布式系統負載均衡的首選演算法。 1、Consistent Hashing演算法描述 下面以Memcached中的Consisten Hashing演算法為例說明。 由於hash演算法結果一般為unsigned int型,因此對於hash函數的結果應該均勻分布在[0,232-1]間,如果我們把一個圓環用232 個點來進行均勻切割,首先按照hash(key)函數算出伺服器(節點)的哈希值, 並將其分布到0~232的圓上。 用同樣的hash(key)函數求出需要存儲數據的鍵的哈希值,並映射到圓上。然後從數據映射到的位置開始順時針查找,將數據保存到找到的第一個伺服器(節點)上。 Consistent Hashing原理示意圖 新增一個節點的時候,只有在圓環上新增節點逆時針方向的第一個節點的數據會受到影響。刪除一個節點的時候,只有在圓環上原來刪除節點順時針方向的第一個節點的數據會受到影響,因此通過Consistent Hashing很好地解決了負載均衡中由於新增節點、刪除節點引起的hash值顛簸問題。 Consistent Hashing添加伺服器示意圖 虛擬節點(virtual nodes):之所以要引進虛擬節點是因為在伺服器(節點)數較少的情況下(例如只有3台伺服器),通過hash(key)算出節點的哈希值在圓環上並不是均勻分布的(稀疏的),仍然會出現各節點負載不均衡的問題。虛擬節點可以認為是實際節點的復製品(replicas),本質上與實際節點實際上是一樣的(key並不相同)。引入虛擬節點後,通過將每個實際的伺服器(節點)數按照一定的比例(例如200倍)擴大後並計算其hash(key)值以均勻分布到圓環上。在進行負載均衡時候,落到虛擬節點的哈希值實際就落到了實際的節點上。由於所有的實際節點是按照相同的比例復製成虛擬節點的,因此解決了節點數較少的情況下哈希值在圓環上均勻分布的問題。 虛擬節點對Consistent Hashing結果的影響 從上圖可以看出,在節點數為10個的情況下,每個實際節點的虛擬節點數為實際節點的100-200倍的時候,結果還是很均衡的。 第3段中有這些文字:「但這樣的演算法方法存在致命問題,如果某一台機器宕機,那麼應該落在該機器的請求就無法得到正確的處理,這時需要將當掉的伺服器從演算法從去除,此時候會有(N-1)/N的伺服器的緩存數據需要重新進行計算;」 為何是 (N-1)/N 呢?解釋如下: 比如有 3 台機器,hash值 1-6 在這3台上的分布就是: host 1: 1 4 host 2: 2 5 host 3: 3 6 如果掛掉一台,只剩兩台,模數取 2 ,那麼分布情況就變成: host 1: 1 3 5 host 2: 2 4 6 可以看到,還在數據位置不變的只有2個: 1,2,位置發生改變的有4個,占共6個數據的比率是 4/6 = 2/3這樣的話,受影響的數據太多了,勢必太多的數據需要重新從 DB 載入到 cache 中,嚴重影響性能 【consistent hashing 的辦法】 上面提到的 hash 取模,模數取的比較小,一般是負載的數量,而 consistent hashing 的本質是將模數取的比較大,為 2的32次方減1,即一個最大的 32 位整數。然後,就可以從容的安排數據導向了,那個圖還是挺直觀的。 以下部分為一致性哈希演算法的一種PHP實現。點擊下載
⑨ 分布式系統常用的一致性演算法有哪些
有一些系統設計基礎的話,給你推薦幾本書吧: 《面向模式的軟體架構 卷4:分布式計算的模式語言》出版社:人民郵電出版社 主要講分布式計算系統軟體的設計和實現。 偏軟體方向,相對較專業。 《分布式計算(第二版)》出版社:電子工業出版社 主要介紹分布式計算的數學基礎和理論,揭示設計分布式系統的底層問題(通信、協調、同步及不確定)和基本的演算法概念及下界技術。 容易理解,適合自學。 《分布式系統原理與范型》出版社:清華大學出版社 全書的第一部分討論了分布式系統的原理、概念和技術,其中包括通信、進程、命名、同步、一致性和復制、容錯以及安全。第二部分給出了一些實際的分布式系統:基於對象的分布式系統、分布式文件系統、基於文檔的分布式系統以及基於協作的分布式系統,介紹了一些實際系統的設計思想和實現技術。 容易理解,適合自學。
⑩ 一致性hash演算法,採用哪種演算法實現比較好,比如MD5,CRC32,或者其它
環割法(一致性 hash)環割法的原理如下:
1. 初始化的時候生成分片數量 X × 環割數量 N 的固定方式編號的字元串,例如 SHARD-1-NODE-1,並計算所有 X×N 個字元串的所有 hash 值。
2. 將所有計算出來的 hash 值放到一個排序的 Map 中,並將其中的所有元素進行排序。
3. 輸入字元串的時候計算輸入字元串的 hash 值,查看 hash 值介於哪兩個元素之間,取小於 hash 值的那個元素對應的分片為數據的分片。
數據比較
下面將通過測試對環割法和跳躍法的性能及均衡性進行對比,說明 DBLE 為何使用跳躍法代替了環割法。
數據源:現場數據 350595 條
測試經過:
1. 通過各自的測試方法執行對於測試數據的分片任務。
2. 測試方法:記錄分片結果的方差;記錄從開始分片至分片結束的時間;記錄分片結果與平均數的最大差值。
3. 由於在求模法 PartitionByString 的方法中要求分片的數量是 1024 的因數,所以測試過程只能使用 2 的指數形式進行測試,並在 PartitionByString 方法進行測試的時候不對於 MAC 地址進行截斷,取全量長度進行測試。