分布式系統(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)一致性和可用性不可兼得的問題檩禾,它通過犧牲強一致性獲得可用性挂签,通過達(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末对湃,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子遗淳,更是在濱河造成了極大的恐慌拍柒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屈暗,死亡現(xiàn)場離奇詭異拆讯,居然都是意外死亡,警方通過查閱死者的電腦和手機养叛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門种呐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弃甥,你說我怎么就攤上這事爽室。” “怎么了淆攻?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵阔墩,是天一觀的道長掉缺。 經(jīng)常有香客問我,道長戈擒,這世上最難降的妖魔是什么眶明? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮筐高,結(jié)果婚禮上搜囱,老公的妹妹穿的比我還像新娘。我一直安慰自己柑土,他們只是感情好蜀肘,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著稽屏,像睡著了一般扮宠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狐榔,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天坛增,我揣著相機與錄音,去河邊找鬼薄腻。 笑死收捣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的庵楷。 我是一名探鬼主播罢艾,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼尽纽!你這毒婦竟也來了咐蚯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤弄贿,失蹤者是張志新(化名)和其女友劉穎春锋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挎春,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡看疙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了直奋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片能庆。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖脚线,靈堂內(nèi)的尸體忽然破棺而出搁胆,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布渠旁,位于F島的核電站攀例,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏顾腊。R本人自食惡果不足惜粤铭,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望杂靶。 院中可真熱鬧梆惯,春花似錦、人聲如沸吗垮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽烁登。三九已至怯屉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饵沧,已是汗流浹背锨络。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留捷泞,地道東北人足删。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像锁右,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子讶泰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容