一、什么是一致性
二拦键、關(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)一致性和可用性不可兼得的問題檩禾,它通過犧牲強一致性獲得可用性挂签,通過達(dá)到最終一致性來盡量滿足業(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),最終達(dá)到一致狀態(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來保證一致性」菜#現(xiàn)實系統(tǒng)的底線是僅僅需要達(dá)到最終一致性虑灰,不需要專業(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