分布式架構(gòu)的數(shù)據(jù)一致性

最近在使用springboot搭建微服務(wù)架構(gòu),遇到數(shù)據(jù)一致性問題,今天就對(duì)它進(jìn)行一個(gè)小結(jié)。

數(shù)據(jù)一致性是分布式系統(tǒng)中的一個(gè)關(guān)鍵需要解決的問題,雖然分布式系統(tǒng)帶來了擴(kuò)展的彈性,但是帶來了數(shù)據(jù)不一致性的風(fēng)險(xiǎn),尤其是在不同網(wǎng)絡(luò)隔離,實(shí)現(xiàn)細(xì)節(jié)透明的業(yè)務(wù)子系統(tǒng)之間的數(shù)據(jù)不一致風(fēng)險(xiǎn)會(huì)成倍遞增。如今衡量一個(gè)企業(yè)的軟件架構(gòu)是不是有潛力的,那必須得看架構(gòu)是不是分布式的,也就是說既然分布式架構(gòu)如此流行,那么數(shù)據(jù)一致性就提到了一個(gè)更高的標(biāo)準(zhǔn)了。

說道分布式架構(gòu)的數(shù)據(jù)一致性困難,我們需要充CAP原理講起。

CAP原理,它就好比分布式領(lǐng)域的牛頓定律。C-Consistent一致性,指前后數(shù)據(jù)不一致,userA訪問數(shù)據(jù)value1但user2訪問同樣數(shù)據(jù)卻是value2,數(shù)據(jù)就不一致了。A-Availability可用性,指用戶請(qǐng)求就要給出回應(yīng)。P-Partition

tolerance分區(qū)容錯(cuò)性,指大多數(shù)分布式系統(tǒng)都分布在多個(gè)子系統(tǒng),區(qū)間通信可能失敗,比如兩臺(tái)服務(wù)器發(fā)生了網(wǎng)絡(luò)分區(qū),拿著兩臺(tái)服務(wù)器無法通信。這三個(gè)變量相互制約,對(duì)于系統(tǒng)設(shè)計(jì)的場景分別采取不同的偏重策略。

舉個(gè)例子吧,分布式系統(tǒng)中系統(tǒng)S1和S2,當(dāng)S1系統(tǒng)發(fā)生寫操作,要保證S2的一致性,只有鎖定S2的讀操作和寫操作,鎖定期間S2是沒有可用性的。這三個(gè)變量相互制約為了提高C就會(huì)導(dǎo)致A、P降低或不滿足,反之亦然。

當(dāng)然CAP理論已經(jīng)指明系統(tǒng)要實(shí)現(xiàn)完全的一致性和可用性是不可能的,當(dāng)然在CAP理論基礎(chǔ)上又發(fā)展了BASE模型和ACID模型等。這兩個(gè)模型各有優(yōu)勢。

但是在目前比較成熟集中保證數(shù)據(jù)一致性方法,包括了強(qiáng)一致性、弱一致性和最終一致性。

強(qiáng)一致性,是當(dāng)一個(gè)系統(tǒng)完成了數(shù)據(jù)更新操作之后,后續(xù)關(guān)聯(lián)的子系統(tǒng)也一并完成更新操作。這種決策用戶最友好,用戶寫了什么,就會(huì)讀到什么。但是根據(jù)CAP理論,這種實(shí)現(xiàn)犧牲了可用性。成型的技術(shù)方案比如springboot的jat+atomikos方案,他通過兩階段提交(XA協(xié)議規(guī)定)完成數(shù)據(jù)更新,客戶端必須保證按照XA協(xié)議完成編寫,并且數(shù)據(jù)庫必須是支持XA協(xié)議的數(shù)據(jù)庫,通常客戶端會(huì)將事務(wù)處理和業(yè)務(wù)處理是現(xiàn)在一起。這就帶了另一個(gè)不足就是帶來了事務(wù)處理和業(yè)務(wù)耦合性強(qiáng)增加了復(fù)雜度。

弱一致性,是系統(tǒng)不保證后續(xù)進(jìn)程或者線程會(huì)訪問最新的值。成型的技術(shù)方案比如利用消息隊(duì)列完成數(shù)據(jù)一致性,S1系統(tǒng)完成數(shù)據(jù)更新,將更新操作發(fā)送到消息隊(duì)列,S2系統(tǒng)從消息隊(duì)列中獲取事件完成更新操作。這個(gè)方案在大廠被廣泛的使用,也是比較流行的一種方式。

最終一致性,它是弱一致性的特定形式。如,DNS是一個(gè)典型的最終一致性系統(tǒng)。

今天對(duì)分布式系統(tǒng)數(shù)據(jù)一致性做了小結(jié),架構(gòu)師們?cè)谠O(shè)計(jì)的時(shí)候做到有的放矢,如何實(shí)現(xiàn)在成本利潤的最大化。

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

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

  • 來一碗孟婆湯
    大白的魚閱讀 126評(píng)論 0 0
  • 九四爻位相當(dāng)于一個(gè)在君王之側(cè)的高官達(dá)貴的人物,俗話說伴君如伴虎,一方面要韜光養(yǎng)晦,以防功高蓋主招來殺身之禍,一方面...
    RZ丫閱讀 3,431評(píng)論 0 1
  • 今天下午邊畫畫,邊關(guān)注草根投資的消息。 真希望草根能平安度過, 讓爸媽的辛苦錢能拿回來。
    sasa五小桃閱讀 458評(píng)論 5 4
  • 時(shí)間很快,雖然預(yù)售是20號(hào)報(bào)道,不過我比較迫不及待8月2日就到了上海,又參加了大半個(gè)月的籌備,這次我給自己的...
    2018林玉閱讀 375評(píng)論 0 0

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