「區塊鏈其實是一種分布式系統」
分布式系統的問題
一致性問題
在分布式系統中,一致性(consistency,早期也叫 agreement)是指對於系統中的多個服務節點,給定一系列操作,在協議(往往通過某種共識演算法)保障下,試圖使得它們對處理結果達成某種程度的一致。如果分布式系統能實現「一致」,對外就可以呈現為乙個功能正常的,且效能和穩定性都要好很多的「虛處理節點」。舉個例子,某影視公司旗下有西單和中關村的兩個電影院,都**某電影票,票一共就一萬張。那麼,顧客到達某個電影院買票的時候,售票員該怎麼決策是否該賣這張票,才能避免超售呢?當電影院個數更多的時候呢?這個問題在人類世界中,看起來似乎沒那麼難,你看,英國人不是剛靠 投票 達成了「某種一致」嗎?
注意:一致性並不代表結果正確與否,而是系統對外呈現的狀態一致與否,例如,所有節點都達成失敗狀態也是一種一致。
共識問題
為了簡化理解,仍然以兩個電影院一起賣票的例子。可能有如下的解決思路:每次要賣一張票前打**給另外一家電影院,確認下當前票數並沒超售;兩家電影院提前約好,奇數小時內一家可以賣票,偶數小時內另外一家可以賣;成立乙個第三方的存票機構,票都放到他那裡,每次賣票找他詢問;更多……這些思路大致都是可行的。實際上,這些方法背後的思想,將可能引發不一致的並行操作進行序列化,就是現在計算機系統裡處理分布式一致性問題的基礎思路和唯一秘訣。只是因為計算機系統比較傻,需要考慮得更全面一些;而人們又希望計算機系統能工作的更快更穩定,所以演算法需要設計得再精巧一些。共識演算法解決的是對某個提案(proposal),大家達成一致意見的過程。提案的含義在分布式系統中十分寬泛,如多個事件發生的順序、某個鍵對應的值、誰是領導……等等,可以認為任何需要達成一致的資訊都是乙個提案。
flp不可能原理
三個人在三個不**間裡面投票 , abc, c經常睡著。先別這麼悲觀,學術界做研究,考慮的是數學和物理意義上最極端的情形,很多時候現實生活要美好的多。例如,上面例子中描述的最壞情形,總會發生的概率並沒有那麼大。工程實現上多試幾次,很大可能就成功了。
科學告訴你什麼是不可能的;工程則告訴你,付出一些代價,可以把它變成可能。
這就是工程的魅力。那麼,退一步講,在付出一些代價的情況下,我們能做到多少?另外還有個博弈學上的概念, 科學上告訴你去賭場賭博從概率上總會是輸錢的;工程則告訴你,如果你願意接受最終輸錢的結果,中間說不定偶爾能小贏幾筆呢!?例如,科學上告訴我們,飛機絕對是有危險的。這是絕對的事情,不管我們做得多麼安全,總是含有危險。而工程學則把它變為可能,不是不製造飛機,而是在細節防護上多做功夫。
常見分布式共識演算法
1990 年由 leslie lamport 提出的 paxos 共識演算法,在工程角度實現了一種最大化保障分布式系統一致性(存在極小的概率無法實現一致)的機制。paxos 被廣泛應用在 chubby、zookeeper 這樣的系統中,leslie lamport 因此獲得了 2013 年度圖靈獎。故事背景是古希臘 paxon 島上的多個法官在乙個大廳內對乙個議案進行表決,如何達成統一的結果。他們之間通過服務人員來傳遞紙條,但法官可能離開或進入大廳,服務人員可能偷懶去睡覺。演算法中將節點分為三種型別:proposer:提出乙個提案,等待大家批准為結案。往往是客戶端擔任該角色;acceptor:負責對提案進行投票。往往是服務端擔任該角色;learner:被告知結案結果,並與之統一,不參與投票過程。可能為客戶端或服務端。raft是paxos的乙個簡單實現
可靠性指標
一般來說,單點伺服器系統至少能滿足兩個九。
分布式系統的核心問題
分布式系統的核心問題 主要內容 一致性問題 共識問題 一致性 分布式集群中多個服務節點,對給定的操作,根據給定的協議,對處理結果對外保持一致.不在乎結果是否正確,而是保證對外呈現的狀態一致.所有節點失敗也是一種一致.引起不一致的因素 節點間網路通訊的不可靠,訊息延遲,訊息亂序,內容錯誤.節點處理時間...
分布式架構的核心問題
1.這麼多服務,客戶端該如何訪問?2.這麼多服務,服務之間如何進行通訊?3.這麼多服務,如何治理?4.服務掛了怎麼辦?springcloud生態用來解決以上分布式架構問題,最早的代表是spring cloud netfilx 但2018年底,netfilx無限期停止維護sprincloud生態了 a...
區塊鏈技術介紹 分布式總帳
區塊鏈 blockchain 是位元幣的底層技術,像乙個資料庫賬本,記載所有的交易記錄。這項技術也因其安全 便捷的特性逐漸得到了銀行與金融業的關注。區塊鏈 blockchain 是位元幣的乙個重要概念,區塊鏈是一串使用密碼學方法相關聯產生的資料塊,每乙個 資料塊中包含了過去十分鐘內所有位元幣網路交易...