分散式系統指南
分散式系統指南
Unitimes 2018-10-23 21:00 釋出在 306
對於剛進入區塊鏈領域的人來說,往往會對區塊鏈技術感到非常困惑。理解該技術實際上相當簡單的,但需要了解一些適當的背景知識。此外,大多數人其實並不需要真正瞭解區塊鏈的具體內部運作方式, 而只需瞭解一些背景知識和指南 。在這篇文章中,我將簡要介紹分散式系統(Distributed System),討論各種共識協議、網路模型的型別以及其他一些相關的想法。對於想要了解這個領域的行業術語的人來說,這篇文章也可以算是一個指南,但我不會談及太過晦澀難懂的細節內容。
01 時光倒流
如此一來,任何時候需要處理一筆新的客戶交易時(如從Bob賬戶中扣除$10),leader機器將發出指令要求所有followers機器去執行這筆交易。這聽起來很棒,可是我們會面臨一個新的問題。
首先,如果leader機器m0發出指令要求m3機器從Bob的賬戶中扣除$10,但這條訊息(message)傳送失敗了,並沒有傳遞給m3,這怎麼辦呢?這真是很糟糕!我們無法再依靠m3機器來儲存資料了, 因為現在m3機器上儲存了與其他機器上不一致的資料(inconsistent data) 。要知道:不一致資料的出現就意味著,系統中有些機器中儲存的資料與其他機器中儲存的資料不一樣,而它們本該是一樣的!
02 確認訊息
顧名思義, 兩階段提交協議由兩個階段組成 。在正常的執行下,這兩個階段的執行過程如下所述:
階段1:請求階段(commit-request phase,或稱表決階段,voting phase)
在請求階段,協調者將通知事務參與者準備提交或取消事務,然後進入表決過程。在表決過程中,參與者將告知協調者自己的決策:同意(事務參與者本地作業執行成功)或取消(事務參與者本地作業執行故障)。
階段2:提交階段(commit phase)
在該階段,協調者將基於第一個階段的投票結果進行決策:提交或取消。當且僅當所有的參與者同意提交事務時,協調者才通知所有的參與者提交事務,否則協調者將通知所有的參與者取消事務。參與者在接收到協調者發來的訊息後將執行響應的操作。
如下圖所示:
03 引入共識
其次,假設我們能夠解決上文提到的leaders機器之間的協調問題。 可是如果一些followers機器(節點)出現故障,那該咋辦呢? 要知道,這正是我們想要擺脫的問題。當有些節點出問題了,我們該怎麼做呢?
如果我們靜靜等待這些節點重新上線,那我們可能面臨一些效率問題,尤其是需要通過人為操作才能恢復某些伺服器的時候。而如果我們選擇忽視一些出故障的機器(節點),那我們應該忽視幾臺機器呢?更重要的是,假設某些機器恢復了,但它們的硬碟驅動器卻因此而遭到了破壞(資料遭到損壞),這又該如何是好呢?雖然這些機器依舊會執行協議,但它們無法成功地將資料寫入硬碟中。
預測種種這些問題都是很麻煩的,因此我們需要一個正在強勁的東西,能夠忽視所有這些問題,只要保證一定數量的機器能夠正常執行即可!就分散式系統而言,這真是太棒了。
上述這些問題(以及其他的問題)將我們帶入了 第一個共識協議 Paxos 。這也讓我們回到了最開始的那個問題:如何才能讓一組機器就某條訊息達成一致呢?由Leslie Lamport發明的Paxos是一種應對計算崩潰故障(crash fault)問題的共識協議。我不會深入講解Paxos的執行方式,因為其中的細節實在是讓人畏懼。
但是從更高的層面來看,Paxos其實是很好理解的: 只要大多數的機器(節點)接受某個提議(proposal),則這將保證系統中所有的機器都不會出現不一致的狀態。 這是很神奇的,你只需要知道這點就可以了。
04 拜占庭容錯
其實,這種應對機器故障的模型就是當前諸多資料中心(data centers)使用的模型。如果任何企業正在部署一個基於共識協議的分散式應用(distributed application),那該企業很有可能是在使用諸如Paxos這樣的共識協議來作為應對機器故障的問題。等等, 那如果機器遭到黑客攻擊了,該咋辦呢? 大多數企業都認為這不會發生,且平心而論,通過結合VPN(虛擬專用網路)、防火牆和其他的安全機制可能使黑客攻擊基本上不太可能發生。 但如果我們真的想要在遭受黑客攻擊時保護自己,那麼我們需要一個共識協議來應對系統中可能出現的(一臺或多臺)機器“說謊”的情況。 這就引入了拜占庭式容錯(BFT)。為何叫拜占庭式呢?因為這個問題是Lamport在一個思維實驗中提出的,一些拜占庭將軍們面臨的問題,他們被敵人的戰線分開來了,但是依舊需要進行相互溝通來制定進攻/撤退計劃。
05 一些行業術語
- 機器故障:當機器(節點)出現故障時,共識協議就用於解決機器可能出現的狀態不一致問題。
- 拜占庭容錯:機器不僅可能出現故障,還可能會“撒謊”。
- 同步(Synchronous):我們不僅需要考慮機器會出現的各種故障問題,也要考慮網路通訊的型別。在通訊同步模型中,我們假設的是所有執行正常的節點(機器)都將在特定的時間內傳送和接收訊息。比如,你可以假定每條訊息需要在5秒鐘/分鐘/小時內傳送出去。
- 非同步(Asynchronous):這是同步的對立面。即便對於執行正常的節點(correct nodes)來說,訊息通訊延遲問題依舊可能存在。這種情況帶來的結果是:你無法判定到底是節點出現故障了,還是節點沒有故障,只是需要長時間才能迴應。
- 部分同步(Partially Synchronous):這種模型介於同步和非同步之間。意思就是,存在一個上界(upper bound),但是這個上界並非被所有節點所知。我認為這種通訊模型與實際的廣域網通訊(即網際網路)非常相似。這只是我的個人觀點哈,如果不同意見,歡迎反饋!
我將只考慮一種型別的訊息模型:已驗證的通訊(authenticated communication),即各節點將對訊息進行簽名,任何人都可以驗證來自某個其他節點的訊息是真實可信的。
4. Guarantee models 保證模型:
這個命名有點奇怪,但我覺得這可以更好地描述該情況。
- 非概率性(Non-probabilistic):如果某個共識協議是非概率性的,就意味著該協議可以保證安全性(沒有概率分佈),只要一定數量的節點執行正常即可。
- 概率性(Probabilistic):如果某個共識協議是概率性的,那我們將自動引出一個概率分佈(probability distribution)。通常來說,這種模型只能在1-ϵ的概率之間保證安全性,其中ϵ是系統設計人員選擇的某個值。比如,一個概率性協議可能只保證99%的安全,即便一定數量的節點執行正常。記住這一點,這很重要!
06 區塊鏈...或者,我真的不在乎你是誰
然而, 假如我想公開地部署一個數據庫,使任何人都可以加入並向系統提出交易(propose transactions)。 此時會出現一個很大的問題: 如果我允許任何人都可以進入我的系統,我將無法區分誰是誰 。我不知道是誰正在參與進來。從根本來說,在過去,沒有身份資訊的共識是不可能實現的,但中本聰出現之後就不一樣了。
比特幣網路解決了這個問題。中本聰的絕妙觀點在於, 我們可以使用另一種機制來代替投票機制,即工作量證明機制(PoW) 。比特幣是首個實現不需要設想參與到網路中的到底是誰的共識協議。由於不需要確認身份,這使得可以很好地在一個無需許可的情況下部署比特幣網路。
在比特幣網路中,任何人都無需通過其他節點的允許便可加入該網路。在比特幣網路中,節點不需要投票,而是提交附有砝碼的值(propose values),該砝碼就是工作量證明(PoW),用於解決一個加密難題(cryptographic puzzle)。所有的proposals都是聯絡在一起的,由這些proposals組成的最重的鏈(而非最長的鏈)構成了一個“正確的”歷史記錄。這就是比特幣。
最後一點:比特幣適合上文中所提到的哪一種模型?比特幣使用的是拜占庭容錯模型,該網路的通訊是同步的,訊息由金鑰持有者進行驗證,且保證模型是概率性的,就是說這條鏈是可以隨時通過分叉進行復原的。換句話說,你可以接受“現在Bob的賬戶中只剩$10”,而你出錯的機率很小。
這就是分散式系統的基本內容。在此基礎上,你可以進入區塊鏈世界了。
【文章版權歸原作者所有,其內容與觀點不代表Unitimes立 場。編譯文章僅為傳播更有價值的資訊】
發文時比特幣價格: ¥44322.41 版權資訊
作者:Kevin Sekniqi
編譯:Hulin
原文連結:https://sekniqi.com/blog/a-distributed-systems-primer-for-non-experts.html
版權宣告: ofollow,noindex">
作者保留權利。文章為作者獨立觀點,不代表巴位元立場。
文章標籤: 分散式
下一篇: Visa整合Hyperledger Fabric開源區塊鏈程式碼,改善可擴充套件許可網路金融交易
推薦資訊
評論
登入 賬號發表你的看法,還沒有賬號?立即免費註冊