官术网_书友最值得收藏!

1.4 分布式系統

在講區塊鏈之前,我們先看一下區塊鏈的產生背景。在計算機領域,有一類非常經典的問題是關于多臺計算機如何同時運行同一個任務。我們通常把解決這類問題的系統稱為“分布式系統”。分布式系統如今已經越來越重要,根本原因是我們要處理的問題越來越復雜,如果單純只靠一臺計算機,哪怕這臺計算機有最頂尖的配置通常也不夠。另外一個原因就是我們要處理的問題所覆蓋的地域越來越廣,現在服務全世界已經不是什么特別遠大的理想,而是比較常見的一個需求。而不同的地域有不同的網絡環境,如果只把服務放在單一某個地方,那么在某些地區就很容易遇到服務質量下降的問題,這時我們就需要把服務放在不同的地域來滿足需求。

在這些情況下,最終都是多臺計算機同時做一個任務的問題。而如何很好地同步多臺計算機之間的狀態是一個非常棘手的問題。

CAP理論

分布式系統的狀態同步是一個很有難度的問題,其中誕生了非常重要的CAP理論。CAP理論指出,在分布式存儲系統中,有三個主要的指標,而這三個指標在某一時刻不可能同時滿足,它們分別是一致性、可用性和分區容忍性。

(1)一致性(Consistency):當你向系統發出讀取數據的請求時,你一定只會讀取到最后寫入的結果。

(2)可用性(Availability):當你向系統發出讀寫請求時,你一定能得到結果。(注意這個結果不一定需要滿足一致性,也就是你發起讀請求的時候,可能會讀到過期的數據。)

(3)分區容忍性(Partition tolerance):分布式系統中的多臺計算機通過網絡相連,如果某些計算機之間丟失消息或者消息的發送發生延遲,整個系統需要能夠繼續正常運行。

考慮到我們解決的是分布式系統問題,所以分區容忍性是一個需要滿足的特性,那么當分布式系統中的消息傳遞出現問題的時候,我們有兩個選擇:

(1)暫停接下來的操作,等待各計算機節點間的數據同步完成。這樣就削弱了可用性,保證了一致性。

(2)繼續正常提供服務,這時候訪問不同的節點就可能得到不同的數據。這樣就削弱了一致性,但保持了可用性。

接下來,我們用大家常用的自動提款機來舉一個例子。每臺自動提款機可以看成分布式系統中的一個節點。我們假設,某一時刻,某臺自動提款機和銀行總部的網絡連接斷開,這就是發生了分區錯誤。對于自動提款機的設計者來說,有兩種選擇:一種選擇是讓自動提款機繼續工作,因為畢竟自動提款機中是有現金的,所以理論上能夠繼續取錢。這時候就是滿足了可用性,代價就是用戶的賬戶無法及時同步,可能會出現超額取錢的情況,也就是犧牲了一致性。另一種選擇就是讓自動提款機暫停工作,直到網絡恢復。這就是犧牲了可用性,而保證了一致性。

日常生活中,我們通常都會認為第二種方案更加可取,但其實第一種方案在某些國家也是存在的。不過為了預防太惡劣的情況,實際的設計是如果自動提款機掉線,那么取款就只能是小額取款。這種設計方案就是滿足部分可用性,同時也犧牲一致性。

值得提出的是,CAP理論容易會被誤讀為一致性、可用性、分區容忍性只能是單純的滿足和不滿足兩種狀態,實際上應該是指滿足的程度如何。就好比自動提款機的例子,我們可以把它設計成同時犧牲一部分可用性以及一部分一致性。

另外需要注意的是,我們說不滿足一致性,并不是說永遠不一致。當出現故障的節點恢復之后,仍然可以繼續同步到最新的數據。所以最終所有節點還是能保持一致,這就是最終一致性。

區塊鏈從技術的角度看其實就是一種分布式系統的解決方案。通常的設計都是以滿足分區容忍性為前提,然后滿足極高的可用性,犧牲數據的一致性。

主站蜘蛛池模板: 栾川县| 厦门市| 霞浦县| 乐业县| 江华| 常熟市| 临武县| 普洱| 永昌县| 清流县| 定襄县| 女性| 绵竹市| 岑巩县| 南雄市| 临沧市| 西华县| 淳安县| 北海市| 辉县市| 浙江省| 大悟县| 博湖县| 岚皋县| 翁牛特旗| 宕昌县| 瑞安市| 蒙阴县| 商水县| 临高县| 平遥县| 广汉市| 科技| 佛坪县| 日土县| 威宁| 南安市| 商河县| 吕梁市| 内乡县| 黑龙江省|