分布式系統(tǒng)的一致性

一、什么是一致性

二、關(guān)于一致性的案例

三、如何解決一致性問題

3.1? 酸堿平衡理論

3.2? 分布式一致性協(xié)議

3.3? 保持最終一致性的六種模式

四、超時處理模式

4.1? 同步調(diào)用模式

4.2 同步調(diào)用模式下的超時問題解決方案

4.3? 接口異步調(diào)用模式

4.4 接口異步調(diào)用模式下的超時問題解決方案

4.5? 消息隊列異步處理模式

4.6? 消息隊列異步處理模式下的超時問題解決方案

五、同步異步的抉擇

六、超時補償?shù)脑瓌t


一、什么是一致性

微服務(wù)是對單體系統(tǒng)進行拆分后得到,通過拆分可以有效的實現(xiàn)敏捷開發(fā)和自動化部屬;同時也會遇到數(shù)據(jù)模型和服務(wù)之間不一致的問題。在微服務(wù)架構(gòu)下,不同的服務(wù)之間通過網(wǎng)絡(luò)進行通信;如何讓服務(wù)之間高效的通信和協(xié)作?如何解決服務(wù)之間狀態(tài)的不一致?

一致性是指分布式服務(wù)化系統(tǒng)之間的弱一致性,分為應(yīng)用系統(tǒng)的一致性和數(shù)據(jù)的一致性。

分布式微服務(wù)系統(tǒng)中一般會有很多單一功能的模塊,或者同一個功能池中的多個節(jié)點,如何保證他們的信息,工作進度,狀態(tài)的一致性并且有條不紊地完成工作?

二、關(guān)于一致性的案例

2.1? 實際問題一

電商系統(tǒng)中如何保證下訂單和扣庫存一致?先下訂單,扣庫存失敗,會導(dǎo)致超賣;下訂單不成功,扣庫存成功,導(dǎo)致少賣。

2.2 實際問題二

同步調(diào)用超時問題,系統(tǒng)A調(diào)用系統(tǒng)B超時,系統(tǒng)A可以明確得到超時反饋,但是無法確認(rèn)系統(tǒng)B是否已經(jīng)完成了預(yù)設(shè)功能,于是系統(tǒng)A不知道應(yīng)該繼續(xù)做什么,應(yīng)該如何反饋給使用方。

2.3 實際問題三

異步回調(diào)超時問題,系統(tǒng)A同步調(diào)用系統(tǒng)B發(fā)起指令,系統(tǒng)B采用受理模式,受理后則返回成功信息;然后系統(tǒng)B處理后異步通知系統(tǒng)A處理結(jié)果。在這個過程中,如果系統(tǒng)A由于某種原因遲遲沒有收到回調(diào)結(jié)果,兩個系統(tǒng)間的狀態(tài)就不一致。

2.4 實際問題四

緩存和數(shù)據(jù)庫不一致,系統(tǒng)的數(shù)據(jù)庫難以抗住大規(guī)模的讀流量,一般在數(shù)據(jù)庫前邊加一層緩沖,那么緩沖和數(shù)據(jù)庫之間的數(shù)據(jù)如何保持一致性?

2.5? 實際問題五

本地緩沖節(jié)點之間不一致,一個服務(wù)池上的多個節(jié)點為了滿足較高的性能需求,需要使用本地緩沖,這樣每個節(jié)點都會有一份緩沖數(shù)據(jù)的復(fù)制。各個節(jié)點的數(shù)據(jù)更新是有先后順序的,在更新的瞬間,在某個時間窗內(nèi)各個節(jié)點的數(shù)據(jù)是不一致的。

2.6? 緩沖數(shù)據(jù)結(jié)構(gòu)不一致

系統(tǒng)在緩沖中暫存了某種類型的數(shù)據(jù),該數(shù)據(jù)由多個數(shù)據(jù)元素組成,如果一部分?jǐn)?shù)據(jù)元素獲取成功,一部分過去失??;這個不完全的數(shù)據(jù)類型就會存入緩沖。

三、如何解決一致性問題

3.1? 酸堿平衡理論

關(guān)系型數(shù)據(jù)庫滿足原子性(Atomicity),一致性(Consistency),隔離性(Isolation),持久性(Durability)? ACID英文意思酸

具有酸特性的數(shù)據(jù)庫支持強一致性,強一致性代表數(shù)據(jù)庫本身不會出現(xiàn)不一致,每個事務(wù)都是原子的,或者成功后或者失敗,事物之間是隔離的,互相完全不收影響而且最終狀態(tài)是持久的。

所謂強一致性就是數(shù)據(jù)庫會從一個明確的狀態(tài)過渡到另外一個明確的狀態(tài),中間臨時狀態(tài)是不會出現(xiàn)的,出現(xiàn)也會計時自動修復(fù)。


由? 強一致性? ? 到? 最終一致性:

使用關(guān)系型數(shù)據(jù)庫的強一致性數(shù)據(jù)量較小的需求,在微服務(wù)系統(tǒng)中,我們無法將相關(guān)數(shù)據(jù)分到同一個數(shù)據(jù)庫分片,這時就需要實現(xiàn)最終一致性。

衡量分布式系統(tǒng)一般會用一致性(Consistency),可用性(Availability),分區(qū)容忍性(Partition tolerance)。

一致性要求所有數(shù)據(jù)備份同一時刻具有同樣的值,可用性要求在任何故障模型下有限時間內(nèi)處理完成并進行響應(yīng),分區(qū)容忍性要求網(wǎng)絡(luò)上有部分消息丟失,到系統(tǒng)任然可以繼續(xù)工作。

關(guān)系型數(shù)據(jù)庫可以滿足一致性和可用性,不具有分區(qū)容忍性;分布式系統(tǒng)滿足分區(qū)容忍性,但必須在一致性和可用性之間進行權(quán)衡。

例如有消息丟失,復(fù)制操作可能被延后,如果我們選擇復(fù)制完再返回,有限時間內(nèi)無法返回,失去了可用性;如果不等待復(fù)制完成,直接返回,具有了可用性,失去了一致性。

具有BA(basically Available)基本可用,S(Soft State)軟狀態(tài),E(Eventually Consistent)最終一致思想的成為(BASE)堿思想。解決了分布式系統(tǒng)一致性和可用性不可兼得的問題,它通過犧牲強一致性獲得可用性,通過達到最終一致性來盡量滿足業(yè)務(wù)的絕大多數(shù)請求。

軟狀態(tài)是實現(xiàn)堿思想的方法,基本可用和最終一致是目標(biāo)。應(yīng)用堿思想的系統(tǒng),由于不保證強一致性,系統(tǒng)在處理請求的過程中可以存在短暫的不一致,在短暫不一致的時間窗口內(nèi),請求處于臨時狀態(tài)中,系統(tǒng)在進行每步操作時,通過記錄每個臨時狀態(tài),在系統(tǒng)出現(xiàn)故障時可以從這些中間狀態(tài)繼續(xù)處理未完成的請求或者回退到原始狀態(tài),最終達到一致狀態(tài)。

酸堿中和是指,系統(tǒng)中相關(guān)數(shù)據(jù)不能分到同一分片上,無法保證強一致性,酸特性;就需要實現(xiàn)最終一致性,堿特性;通過軟狀態(tài)來實現(xiàn)基本可用和最終一致。

3.2? 分布式一致性協(xié)議

分布式事務(wù)處理模型(distributed? transaction service)DTS規(guī)定了分布式一致性協(xié)議,包括兩階段提交和三階段提交的保證強一致性的協(xié)議,阿里也提出了TCC協(xié)議,try? confirm? cancel來保證一致性?,F(xiàn)實系統(tǒng)的底線是僅僅需要達到最終一致性,不需要專業(yè)復(fù)雜的一致性協(xié)議。人們在實踐中提出了保持最終一致性的六種模式。

3.3? 保持最終一致性的六種模式


四、超時處理模式


4.1? 同步調(diào)用模式


4.2 同步調(diào)用模式下的超時問題解決方案


4.3? 接口異步調(diào)用模式


4.4 接口異步調(diào)用模式下的超時問題解決方案


4.5? 消息隊列異步處理模式


4.6? 消息隊列異步處理模式下的超時問題解決方案


五、同步異步的抉擇


六、超時補償?shù)脑瓌t

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容