溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

區(qū)塊鏈快速入門(二)——分布式系統(tǒng)核心技術(shù)

發(fā)布時(shí)間:2020-07-29 00:06:24 來(lái)源:網(wǎng)絡(luò) 閱讀:1952 作者:天山老妖S 欄目:軟件技術(shù)

區(qū)塊鏈快速入門(二)——分布式系統(tǒng)核心技術(shù)

一、分布式系統(tǒng)的一致性問(wèn)題

1、分布式系統(tǒng)的一致性問(wèn)題

隨著摩爾定律碰到瓶頸,越來(lái)越多情況下要依靠可擴(kuò)展的分布式架構(gòu)來(lái)實(shí)現(xiàn)海量處理能力。單點(diǎn)結(jié)構(gòu)演變到分布式結(jié)構(gòu),首要解決的問(wèn)題就是數(shù)據(jù)的一致性。如果分布式集群中多個(gè)節(jié)點(diǎn)不能保證處理結(jié)果的一致性,建立在其上的業(yè)務(wù)系統(tǒng)將無(wú)法正常工作。區(qū)塊鏈系統(tǒng)是一個(gè)典型的分布式系統(tǒng),在設(shè)計(jì)上必然也要考慮一致性問(wèn)題。
在面向大規(guī)模復(fù)雜任務(wù)場(chǎng)景時(shí),單點(diǎn)的服務(wù)往往難以解決可擴(kuò)展(Scalability)和容錯(cuò)(Fault-tolerance)兩方面的需求,就需要多臺(tái)服務(wù)器來(lái)組成集群系統(tǒng),虛擬為更加強(qiáng)大和穩(wěn)定的“超級(jí)服務(wù)器”。
集群的規(guī)模越大,處理能力越強(qiáng),管理的復(fù)雜度也就越高。目前在運(yùn)行的大規(guī)模集群包括谷歌公司的搜索系統(tǒng),通過(guò)數(shù)十萬(wàn)臺(tái)服務(wù)器支持了對(duì)整個(gè)互聯(lián)網(wǎng)內(nèi)容的搜索服務(wù)。
通常情況下,集群系統(tǒng)中的不同節(jié)點(diǎn)可能處于不同的狀態(tài),隨時(shí)收到不同的請(qǐng)求,要時(shí)刻保持對(duì)外響應(yīng)的一致性。
一致性(Consistency)在分布式系統(tǒng)領(lǐng)域中是指對(duì)于多個(gè)服務(wù)節(jié)點(diǎn),給定一系列操作,在約定協(xié)議的保障下使得多個(gè)節(jié)點(diǎn)對(duì)處理結(jié)果達(dá)成某種程度的協(xié)同。
理想情況(不考慮節(jié)點(diǎn)故障)下,如果各個(gè)服務(wù)節(jié)點(diǎn)嚴(yán)格遵循相同的處理協(xié)議(即構(gòu)成相同的狀態(tài)機(jī)邏輯),則在給定相同的初始狀態(tài)和輸入序列時(shí),可以確保處理過(guò)程中的每個(gè)步驟的執(zhí)行結(jié)果都相同。因此,傳統(tǒng)分布式系統(tǒng)中討論一致性,通常是指在外部任意發(fā)起請(qǐng)求(如向多個(gè)節(jié)點(diǎn)發(fā)送不同請(qǐng)求)的情況下,確保系統(tǒng)內(nèi)大部分節(jié)點(diǎn)實(shí)際處理請(qǐng)求序列的一致,即對(duì)請(qǐng)求進(jìn)行全局排序。
一致性關(guān)注的是系統(tǒng)呈現(xiàn)的狀態(tài),并不關(guān)注結(jié)果是否正確;例如,所有節(jié)點(diǎn)都對(duì)某請(qǐng)求達(dá)成否定狀態(tài)也是一種一致性。

2、分布式系統(tǒng)的挑戰(zhàn)

典型的分布式系統(tǒng)中存在如下挑戰(zhàn):
A、節(jié)點(diǎn)之間只能通過(guò)消息來(lái)交互和同步,而網(wǎng)絡(luò)通訊是不可靠的,可能出現(xiàn)任意消息延遲、亂序和錯(cuò)誤。
B、節(jié)點(diǎn)處理請(qǐng)求的時(shí)間無(wú)法保障,處理的結(jié)果可能是錯(cuò)誤的,甚至節(jié)點(diǎn)自身隨時(shí)可能發(fā)生故障。
C、為了避免沖突,采用同步調(diào)用可以簡(jiǎn)化設(shè)計(jì),但會(huì)嚴(yán)重降低系統(tǒng)的可擴(kuò)展性,甚至使其退化為單點(diǎn)系統(tǒng)。

3、分布式系統(tǒng)一致性的要求

分布式系統(tǒng)達(dá)成一致的過(guò)程應(yīng)該滿足如下要求:
A、可終止性(Termination)
一致的結(jié)果在有限時(shí)間內(nèi)能完成。
B、約同性(Agreement)
不同節(jié)點(diǎn)最終完成決策的結(jié)果是相同的。為了確保協(xié)同性,分布式系統(tǒng)通常會(huì)把不同時(shí)空發(fā)生的多個(gè)事件進(jìn)行全局唯一排序,并且順序必須是所有節(jié)點(diǎn)認(rèn)可的。
C、合法性(Validity)
決策的結(jié)果必須是某個(gè)節(jié)點(diǎn)提出的提案。

4、分布式系統(tǒng)帶約束的一致性

要實(shí)現(xiàn)絕對(duì)理想的嚴(yán)格一致性(Strict Consistency)代價(jià)很大。除非系統(tǒng)不發(fā)生任何故障,并且所有節(jié)點(diǎn)之間的通信無(wú)需任何時(shí)間,此時(shí)整個(gè)系統(tǒng)其實(shí)就等價(jià)于單點(diǎn)系統(tǒng)。實(shí)際上,越強(qiáng)的一致性要求往往意味著帶來(lái)越弱的處理性能,以及越差的可擴(kuò)展性。根據(jù)實(shí)際需求的不用,可以選擇不同強(qiáng)度的一致性,包括強(qiáng)一致性(Strong Consistency)和弱一致性(Weak Consistency)。
強(qiáng)一致性包括兩類:
A、順序一致性
順序一致性(Sequential Consistency):Leslie Lamport1979年經(jīng)典論文《How to Make a Multiprocessor Computer That Correctly Executes Multiprocess Programs》中提出,是一種比較強(qiáng)的約束,保證所有進(jìn)程看到的全局執(zhí)行順序(total order)一致,并且每個(gè)進(jìn)程看自身的執(zhí)行順序(local order)跟實(shí)際發(fā)生順序一致。例如,某進(jìn)程先執(zhí)行A,后執(zhí)行 B,則實(shí)際得到的全局結(jié)果中就應(yīng)該為A在B前面,而不能反過(guò)來(lái)。同時(shí)所有其它進(jìn)程在全局上也應(yīng)該看到這個(gè)順序。順序一致性實(shí)際上限制了各進(jìn)程內(nèi)指令的偏序關(guān)系,但不在進(jìn)程間按照物理時(shí)間進(jìn)行全局排序。
B、線性一致性
線性一致性(Linearizability Consistency):Maurice P. Herlihy與Jeannette M.Wing在1990年經(jīng)典論文《Linearizability: A Correctness Condition for Concurrent Objects》中共同提出,在順序一致性前提下加強(qiáng)了進(jìn)程間的操作排序,形成唯一的全局順序(系統(tǒng)等價(jià)于是順序執(zhí)行,所有進(jìn)程看到的所有操作的序列順序都一致,并且跟實(shí)際發(fā)生順序一致),是很強(qiáng)的原子性保證。但比較難實(shí)現(xiàn),目前基本上要么依賴于全局的時(shí)鐘或鎖,要么通過(guò)一些復(fù)雜算法實(shí)現(xiàn),性能通常不高。
實(shí)現(xiàn)強(qiáng)一致性往往需要準(zhǔn)確的計(jì)時(shí)設(shè)備。高精度的石英鐘的漂移率為10^-7,最準(zhǔn)確的原子震蕩時(shí)鐘的漂移率為10^-13。Google曾在其分布式數(shù)據(jù)庫(kù)Spanner 中采用基于原子時(shí)鐘和GPS的TrueTime方案,能夠?qū)⒉煌瑪?shù)據(jù)中心的時(shí)間偏差控制在10ms以內(nèi)。在不考慮成本的前提下,TrueTime方案簡(jiǎn)單、粗暴,但有效。
強(qiáng)一致的系統(tǒng)往往比較難實(shí)現(xiàn),而且很多場(chǎng)景下對(duì)一致性的需求并沒(méi)有那么強(qiáng)。因此,可以適當(dāng)放寬對(duì)一致性的要求,降低系統(tǒng)實(shí)現(xiàn)的難度。例如在一定約束下實(shí)現(xiàn)所謂最終一致性(Eventual Consistency),即總會(huì)存在一個(gè)時(shí)刻(而不是立刻),讓系統(tǒng)達(dá)到一致的狀態(tài)。
例如電商購(gòu)物時(shí)將某物品放入購(gòu)物車,但可能在最終付款時(shí)才提示物品已經(jīng)售罄。實(shí)際上,大部分的Web 系統(tǒng)為了保持服務(wù)的穩(wěn)定,實(shí)現(xiàn)的都是最終一致性。
弱一致性相對(duì)于強(qiáng)一致性,是在某些方面弱化的一致性,如最終一致性。

二、分布式共識(shí)算法簡(jiǎn)介

1、分布式共識(shí)簡(jiǎn)介

共識(shí)(Consensus)通常會(huì)與一致性(Consistency)術(shù)語(yǔ)放在一起討論。嚴(yán)謹(jǐn)?shù)刂v,兩者的含義并不完全相同。
一致性的含義比共識(shí)寬泛,在不同場(chǎng)景(基于事務(wù)的數(shù)據(jù)庫(kù)、分布式系統(tǒng)等)下意義不同。具體到分布式系統(tǒng)場(chǎng)景下,一致性指的是多個(gè)副本對(duì)外呈現(xiàn)的狀態(tài)。如順序一致性、線性一致性,描述了多節(jié)點(diǎn)對(duì)數(shù)據(jù)狀態(tài)的共同維護(hù)能力。而共識(shí),則特指在分布式系統(tǒng)中多個(gè)節(jié)點(diǎn)之間對(duì)某個(gè)事情(例如多個(gè)事務(wù)請(qǐng)求的執(zhí)行順序)達(dá)成一致看法的過(guò)程。因此,達(dá)成某種共識(shí)并不意味著就保障了一致性。
實(shí)踐中,要保障系統(tǒng)滿足不同程度的一致性,往往需要通過(guò)共識(shí)算法來(lái)達(dá)成。
共識(shí)算法解決的是分布式系統(tǒng)中大部分節(jié)點(diǎn)對(duì)某個(gè)提案(Proposal)達(dá)成一致意見(jiàn)的過(guò)程。提案的含義在分布式系統(tǒng)中十分寬泛,如多個(gè)事件發(fā)生的順序、某個(gè)鍵對(duì)應(yīng)的值等等。任何可以達(dá)成一致的信息都是一個(gè)提案。對(duì)于分布式系統(tǒng),各個(gè)節(jié)點(diǎn)通常都是相同的確定性狀態(tài)機(jī)模型(又稱為狀態(tài)機(jī)復(fù)制問(wèn)題,State-Machine Replication),從相同初始狀態(tài)開(kāi)始接收相同順序的指令,則可以保證相同的結(jié)果狀態(tài)。因此,分布式系統(tǒng)中多個(gè)節(jié)點(diǎn)達(dá)成共識(shí)的關(guān)鍵是對(duì)多個(gè)事件的順序進(jìn)行共識(shí),即排序。

2、分布式共識(shí)的挑戰(zhàn)

分布式系統(tǒng)達(dá)成共識(shí)都要解決兩個(gè)基本的問(wèn)題:
A、如何提出一個(gè)待共識(shí)的提案,如通過(guò)令牌傳遞、隨機(jī)選取、權(quán)重比較、求解難題等。
B、如何讓多個(gè)節(jié)點(diǎn)對(duì)提案達(dá)成共識(shí)(同意或拒絕),如投票、規(guī)則驗(yàn)證等。
在實(shí)際應(yīng)用的分布式系統(tǒng)中,不同節(jié)點(diǎn)之間通信存在延遲(光速物理限制、通信處理延遲),并且任意環(huán)節(jié)都可能存在故障(系統(tǒng)規(guī)模越大,發(fā)生故障可能性越高)。如通信網(wǎng)絡(luò)會(huì)發(fā)生中斷、節(jié)點(diǎn)會(huì)發(fā)生故障、甚至存在被***的節(jié)點(diǎn)故意偽造消息,破壞正常的共識(shí)過(guò)程。
通常,把出現(xiàn)故障(Crash或Fail-stop,即不響應(yīng))但不會(huì)偽造信息的情況稱為“非拜占庭錯(cuò)誤(Non-Byzantine Fault)”或“故障錯(cuò)誤(Crash Fault)”;偽造信息惡意響應(yīng)的情況稱為“拜占庭錯(cuò)誤”(Byzantine Fault),對(duì)應(yīng)節(jié)點(diǎn)為拜占庭節(jié)點(diǎn)。拜占庭錯(cuò)誤場(chǎng)景中因?yàn)榇嬖趽v亂者更難達(dá)成共識(shí)。

3、常見(jiàn)分布式共識(shí)算法

根據(jù)解決的場(chǎng)景是否允許拜占庭錯(cuò)誤情況,共識(shí)算法可以分為CFT(CrashFault Tolerance)和BFT(Byzantine Fault Tolerance)兩類。
對(duì)于非拜占庭錯(cuò)誤的情況,經(jīng)典的共識(shí)算法包括Paxos(1990年)、Raft(2014年)及其變種等。CFT類容錯(cuò)算法通常性能比較好,處理較快,容忍不超過(guò)一半的故障節(jié)點(diǎn)。
對(duì)于要能容忍拜占庭錯(cuò)誤的情況,包括PBFT(Practical Byzantine Fault Tolerance,1999年)為代表的確定性系列算法、PoW(1997年)為代表的概率算法等。確定性算法一旦達(dá)成共識(shí)就不可逆轉(zhuǎn),即共識(shí)是最終結(jié)果;而概率類算法的共識(shí)結(jié)果則是臨時(shí)的,隨著時(shí)間推移或某種強(qiáng)化,共識(shí)結(jié)果被推翻的概率越來(lái)越小,最終成為事實(shí)上結(jié)果。拜占庭類容錯(cuò)算法通常性能較差,容忍不超過(guò)1/3的故障節(jié)點(diǎn)。
此外,XFT(Cross Fault Tolerance,2015年)等最近提出的改進(jìn)算法可以提供類似CFT的處理響應(yīng)速度,并能在大多數(shù)節(jié)點(diǎn)正常工作時(shí)提供BFT保障。
Algorand算法(2017年)基于PBFT進(jìn)行改進(jìn),通過(guò)引入可驗(yàn)證隨機(jī)函數(shù)解決了提案選擇的問(wèn)題,理論上可以在容忍拜占庭錯(cuò)誤的前提下實(shí)現(xiàn)更好的性能(1000+TPS)。
實(shí)踐中,通常客戶端要拿到共識(shí)結(jié)果需要自行驗(yàn)證,典型地,可以訪問(wèn)足夠多個(gè)服務(wù)節(jié)點(diǎn)來(lái)比對(duì)結(jié)果,確保獲取結(jié)果的準(zhǔn)確性。

三、FLP不可能原理

1、FLP原理簡(jiǎn)介

FLP不可能原理:在網(wǎng)絡(luò)可靠,但允許節(jié)點(diǎn)失效(即便只有一個(gè))的最小化異步模型系統(tǒng)中,不存在一個(gè)可以解決一致性問(wèn)題的確定性共識(shí)算法。
FLP不可能原理在1985年由Fischer,Lynch和Patterson三位科學(xué)家在《Impossibility of Distributed Consensus with One Faulty Process》論文中提出并證明。
FLP不可能原理表明,不要浪費(fèi)時(shí)間,去試圖為異步分布式系統(tǒng)設(shè)計(jì)面向任意場(chǎng)景的共識(shí)算法。

2、分布式系統(tǒng)的同步與異步

分布式系統(tǒng)中同步和異步的定義如下:
同步是指系統(tǒng)中的各個(gè)節(jié)點(diǎn)的時(shí)鐘誤差存在上限,并且消息傳遞必須在一定時(shí)間內(nèi)完成,否則認(rèn)為失?。煌瑫r(shí)各個(gè)節(jié)點(diǎn)完成處理消息的時(shí)間是一定的。因此同步系統(tǒng)中可以很容易地判斷消息是否丟失。
異步是指系統(tǒng)中各個(gè)節(jié)點(diǎn)可能存在較大的時(shí)鐘差異,同時(shí)消息傳輸時(shí)間是任意長(zhǎng)的;各節(jié)點(diǎn)對(duì)消息進(jìn)行處理的時(shí)間也可能是任意長(zhǎng)的。因此,無(wú)法判斷某個(gè)消息遲遲沒(méi)有被響應(yīng)的原因(節(jié)點(diǎn)故障或傳輸故障)。
現(xiàn)實(shí)生活中的分布式系統(tǒng)通常都是異步系統(tǒng)。

3、FLP原理的意義

FLP不可能原理實(shí)際上說(shuō)明對(duì)于允許節(jié)點(diǎn)失效情況下,純粹異步系統(tǒng)無(wú)法確保共識(shí)在有限時(shí)間內(nèi)完成。即便對(duì)于非拜占庭錯(cuò)誤的前提下,包括Paxos、Raft等算法也都存在無(wú)法達(dá)成共識(shí)的極端情況,只是在工程實(shí)踐中出現(xiàn)的概率很小。
FLP不可能原理并不意味著研究共識(shí)算法沒(méi)有意義。學(xué)術(shù)研究通常考慮地是數(shù)學(xué)和物理意義上理想化的情形,很多時(shí)候現(xiàn)實(shí)世界要穩(wěn)定得多;工程實(shí)現(xiàn)上某次共識(shí)失敗,再嘗試幾次,很大可能就成功。

四、CAP原理

1、CAP原理簡(jiǎn)介

CAP原理最早出現(xiàn)在2000年,由加州大學(xué)伯克利分校的Eric Brewer教授在ACM組織的Principles of Distributed Computing(PODC)研討會(huì)上提出猜想,后來(lái)麻省理工學(xué)院的Nancy Lynch等學(xué)者進(jìn)行了理論證明。
CAP原理被認(rèn)為是分布式系統(tǒng)領(lǐng)域的重要原理之一,深刻影響了分布式計(jì)算與系統(tǒng)設(shè)計(jì)的發(fā)展。
CAP原理:分布式系統(tǒng)無(wú)法同時(shí)確保一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(Partition),設(shè)計(jì)中往往需要弱化對(duì)某個(gè)特性的需求。
一致性(Consistency):任何事務(wù)應(yīng)該都是原子的,所有副本上的狀態(tài)都是事務(wù)成功提交后的結(jié)果,并保持強(qiáng)一致。
可用性(Availability):系統(tǒng)(非失敗節(jié)點(diǎn))能在有限時(shí)間內(nèi)完成對(duì)操作請(qǐng)求的應(yīng)答。
分區(qū)容忍性(Partition):系統(tǒng)中的網(wǎng)絡(luò)可能發(fā)生分區(qū)故障(成為多個(gè)子網(wǎng),甚至出現(xiàn)節(jié)點(diǎn)上線和下線),即節(jié)點(diǎn)之間的通信無(wú)法保障。而網(wǎng)絡(luò)故障不應(yīng)該影響到系統(tǒng)正常服務(wù)。
CAP原理認(rèn)為,分布式系統(tǒng)最多只能保證三項(xiàng)特性中的兩項(xiàng)特性。當(dāng)網(wǎng)絡(luò)可能出現(xiàn)分區(qū)時(shí),系統(tǒng)是無(wú)法同時(shí)保證一致性和可用性的。要么,節(jié)點(diǎn)收到請(qǐng)求后因?yàn)闆](méi)有得到其它節(jié)點(diǎn)的確認(rèn)而不應(yīng)答(犧牲可用性),要么節(jié)點(diǎn)只能應(yīng)答非一致的結(jié)果(犧牲一致性)。
由于大部分時(shí)候網(wǎng)絡(luò)被認(rèn)為是可靠的,因此系統(tǒng)可以提供一致可靠的服務(wù);當(dāng)網(wǎng)絡(luò)不可靠時(shí),系統(tǒng)要么犧牲掉一致性(多數(shù)場(chǎng)景下),要么犧牲掉可用性。
網(wǎng)絡(luò)分區(qū)是可能存在的,出現(xiàn)分區(qū)情況后很可能會(huì)導(dǎo)致發(fā)生腦裂,多個(gè)新出現(xiàn)的主節(jié)點(diǎn)可能會(huì)嘗試關(guān)閉其它主節(jié)點(diǎn)。

2、CAP原理應(yīng)用場(chǎng)景

CAP三種特性不可同時(shí)得到保障,因此設(shè)計(jì)系統(tǒng)時(shí)候必然要弱化對(duì)某個(gè)特性的支持。根據(jù)CAP原理可以定義三種應(yīng)用場(chǎng)景:
A、弱化一致性
對(duì)結(jié)果一致性不敏感的應(yīng)用,可以允許在新版本上線后過(guò)一段時(shí)間才最終更新成功,期間不保證一致性。例如網(wǎng)站靜態(tài)頁(yè)面內(nèi)容、實(shí)時(shí)性較弱的查詢類數(shù)據(jù)庫(kù)等,簡(jiǎn)單分布式同步協(xié)議如Gossip,以及CouchDB、Cassandra數(shù)據(jù)庫(kù)等都弱化了一致性。
B、弱化可用性
對(duì)結(jié)果一致性很敏感的應(yīng)用,例如銀行取款機(jī),當(dāng)系統(tǒng)故障時(shí)候會(huì)拒絕服務(wù)。MongoDB、Redis、MapReduce等都弱化了可用性。
Paxos、Raft等共識(shí)算法主要處理對(duì)于一致性敏感的情況。在Paxos類算法中,可能存在著無(wú)法提供可用結(jié)果的情形,同時(shí)允許少數(shù)節(jié)點(diǎn)離線。
C、弱化分區(qū)容忍性
現(xiàn)實(shí)中,網(wǎng)絡(luò)分區(qū)出現(xiàn)概率較小,但很難完全避免。
兩階段的提交算法,某些關(guān)系型數(shù)據(jù)庫(kù)以及ZooKeeper 主要考慮了這種設(shè)計(jì)。
實(shí)踐中,網(wǎng)絡(luò)可以通過(guò)雙通道等機(jī)制增強(qiáng)可靠性,實(shí)現(xiàn)高穩(wěn)定的網(wǎng)絡(luò)通信。

五、ACID原則與多階段提交

1、ACID原則簡(jiǎn)介

ACID,即Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、
Durability(持久性)四種特性的縮寫。
ACID 是一種比較出名的描述一致性的原則,通常出現(xiàn)在分布式數(shù)據(jù)庫(kù)等基于事務(wù)過(guò)程的系統(tǒng)中。
ACID 原則描述了分布式數(shù)據(jù)庫(kù)需要滿足的一致性需,同時(shí)允許付出可用性的代價(jià)。
Atomicity:每次事務(wù)是原子的,事務(wù)包含的所有操作要么全部成功,要么全部不執(zhí)行。一旦有操作失敗,則需要回退狀態(tài)到執(zhí)行事務(wù)前。
Consistency:數(shù)據(jù)庫(kù)的狀態(tài)在事務(wù)執(zhí)行前后的狀態(tài)是一致的和完整的,無(wú)中間狀態(tài)。即只能處于成功事務(wù)提交后的狀態(tài)。
Isolation:各種事務(wù)可以并發(fā)執(zhí)行,但彼此之間互相不影響。按照標(biāo)準(zhǔn)SQL規(guī)范,從弱到強(qiáng)可以分為未授權(quán)讀取、授權(quán)讀取、可重復(fù)讀取和串行化四種隔離等級(jí)。
Durability:狀態(tài)的改變是持久的,不會(huì)失效。一旦某個(gè)事務(wù)提交,則它造成的狀態(tài)變更就是永久性的。
與ACID 相對(duì)的一個(gè)原則是eBay技術(shù)專家Dan Pritchett 提出的BASE(Basic Availability,Soft-state,Eventual Consistency)原則。BASE原則面向大型高可用分布式系統(tǒng),主張犧牲掉對(duì)強(qiáng)一致性的追求,而實(shí)現(xiàn)最終一致性,來(lái)?yè)Q取一定的可用性。
ACID和BASE兩種原則實(shí)際是對(duì) CAP原理三種特性的不同取舍。
對(duì)于分布式事務(wù)一致性的研究成果包括著名的兩階段提交算法(Two-phaseCommit,2PC)和三階段提交算法(Three-phase Commit,3PC)。

2、兩階段提交算法

兩階段提交算法最早由Jim Gray于1979年在論文《Notes on Database Operating Systems》中提出。其基本思想十分簡(jiǎn)單,既然在分布式場(chǎng)景下,直接提交事務(wù)可能出現(xiàn)各種故障和沖突,那么可將其分解為預(yù)提交和正式提交兩個(gè)階段,規(guī)避沖突的風(fēng)險(xiǎn)。
預(yù)提交:協(xié)調(diào)者(Coordinator)發(fā)起提交某個(gè)事務(wù)的申請(qǐng),各參與執(zhí)行者
(Participant)需要嘗試進(jìn)行提交并反饋是否能完成。
正式提交:協(xié)調(diào)者如果得到所有執(zhí)行者的成功答復(fù),則發(fā)出正式提交請(qǐng)求。如果成功完成,則算法執(zhí)行成功。
在此過(guò)程中任何步驟出現(xiàn)問(wèn)題(例如預(yù)提交階段有執(zhí)行者回復(fù)預(yù)計(jì)無(wú)法完成提交),則需要回退。
兩階段提交算法因?yàn)楹?jiǎn)單容易實(shí)現(xiàn)的優(yōu)點(diǎn),在關(guān)系型數(shù)據(jù)庫(kù)等系統(tǒng)中被廣泛應(yīng)用。兩階段提交算法的缺點(diǎn)是整個(gè)過(guò)程需要同步阻塞導(dǎo)致性能通常較差;同時(shí)存在單點(diǎn)問(wèn)題,較壞情況下可能一直無(wú)法完成提交;可能產(chǎn)生數(shù)據(jù)不一致的情況(例如協(xié)調(diào)者和執(zhí)行者在第二個(gè)階段出現(xiàn)故障)。

3、三階段提交算法

三階段提交針對(duì)兩階段提交算法第一階段中可能阻塞部分執(zhí)行者的情況進(jìn)行了優(yōu)化,即將預(yù)提交階段進(jìn)一步拆成兩個(gè)步驟:嘗試預(yù)提交和預(yù)提交。
完整過(guò)程如下:
嘗試預(yù)提交:協(xié)調(diào)者詢問(wèn)執(zhí)行者是否能進(jìn)行某個(gè)事務(wù)的提交。執(zhí)行者需要返回答復(fù),但無(wú)需執(zhí)行提交,可以避免出現(xiàn)部分執(zhí)行者被無(wú)效阻塞住的情況。
預(yù)提交:協(xié)調(diào)者檢查收集到的答復(fù),如果全部為,,則發(fā)起提交事務(wù)請(qǐng)求。各參與執(zhí)行者(Participant)需要嘗試進(jìn)行提交并反饋是否能完成。
正式提交:協(xié)調(diào)者如果得到所有執(zhí)行者的成功答復(fù),則發(fā)出正式提交請(qǐng)求。如果成功完成,則算法執(zhí)行成功。
無(wú)論兩階段提交還是三階段提交,都只是一定程度上緩解了提交沖突的問(wèn)題,并無(wú)法一定保證系統(tǒng)的一致性。多階段提交首個(gè)有效算法是Paxos算法。

六、可靠性指標(biāo)

1、可靠性指標(biāo)簡(jiǎn)介

可靠性(Availability,可用性)是描述系統(tǒng)可以提供服務(wù)能力的重要指標(biāo)。高可靠的分布式系統(tǒng)通常需要各種復(fù)雜的機(jī)制來(lái)進(jìn)行保障。
通常情況下,服務(wù)的可用性可以用服務(wù)承諾(Service Level Agreement,SLA)、服務(wù)指標(biāo)(Service Level Indicator,SLI)、服務(wù)目標(biāo)(Service Level Objective,SLO)等方面進(jìn)行衡量。每年允許服務(wù)出現(xiàn)不可用時(shí)間的可靠性指標(biāo)參考值如下:

通常,單點(diǎn)的服務(wù)器系統(tǒng)至少應(yīng)能滿足兩個(gè)9;普通企業(yè)信息系統(tǒng)三個(gè)9就足夠;系統(tǒng)能達(dá)到四個(gè)9已經(jīng)是領(lǐng)先水平(參考AWS等云計(jì)算平臺(tái));電信級(jí)的應(yīng)用一般需要能達(dá)到五個(gè)9,一年里面最多允許出現(xiàn)五分鐘左右的服務(wù)不可用;六個(gè)9以及以上的系統(tǒng)較為少見(jiàn),要實(shí)現(xiàn)往往意味著極高的代價(jià)。

2、兩個(gè)核心時(shí)間

一般地,描述系統(tǒng)出現(xiàn)故障的可能性和故障出現(xiàn)后的恢復(fù)能力,有兩個(gè)基礎(chǔ)的指標(biāo):MTBF和 MTTR。
MTBF(Mean Time Between Failures),即平均故障間隔時(shí)間,是系統(tǒng)可以無(wú)故障運(yùn)行的預(yù)期時(shí)間。
MTTR(Mean Time To Repair),即平均修復(fù)時(shí)間,是發(fā)生故障后系統(tǒng)可以恢復(fù)到正常運(yùn)行的預(yù)期時(shí)間。
MTBF衡量了系統(tǒng)發(fā)生故障的頻率,如果一個(gè)系統(tǒng)的MTBF很短,則意味著系統(tǒng)可用性低;而MTTR則反映了系統(tǒng)碰到故障后服務(wù)的恢復(fù)能力,如果系統(tǒng)的 MTTR 過(guò)長(zhǎng),則說(shuō)明系統(tǒng)一旦發(fā)生故障需要較長(zhǎng)時(shí)間才能恢復(fù)服務(wù)。
一個(gè)高可用的系統(tǒng)應(yīng)該是具有盡量長(zhǎng)的MTBF和盡量短的MTTR。

3、提高可靠性

由兩種方法可以提高可靠性:一是讓系統(tǒng)中的單個(gè)組件都變得更可靠;二是消滅單點(diǎn)。
依靠單點(diǎn)實(shí)現(xiàn)的可靠性畢竟有限,要想進(jìn)一步的提升系統(tǒng)的可靠性,就只好消滅單點(diǎn),通過(guò)主從、多活等模式讓多個(gè)節(jié)點(diǎn)集體完成原先單點(diǎn)的工作(分布式),可以從概率意義上改善服務(wù)對(duì)外整體的可靠性。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI