日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 

轉(zhuǎn)載本文需注明出處:微信公眾號(hào)EAWorld,違者必究。

針對(duì)分布式架構(gòu)下的數(shù)據(jù)一致性,大家也許會(huì)問(wèn)這樣的問(wèn)題:跨系統(tǒng)間分布式事務(wù)如何解決?系統(tǒng)內(nèi)多個(gè)服務(wù)的分布式事務(wù)如何解決?一個(gè)服務(wù)內(nèi)多個(gè)數(shù)據(jù)源/數(shù)據(jù)庫(kù)的分布式事務(wù)如何解決?……這些問(wèn)題大家是很容易理解的,但是由于術(shù)語(yǔ)不準(zhǔn)確,所以解釋起來(lái)會(huì)有二義性,所以先要統(tǒng)一語(yǔ)言或者術(shù)語(yǔ),也就是統(tǒng)一概念:

分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 

域是一個(gè)虛擬的分類,幾個(gè)系統(tǒng)屬于某一個(gè)域,例如網(wǎng)上銀行和手機(jī)銀行都屬于電子渠道領(lǐng)域;

傳統(tǒng)的單體應(yīng)用,指的就是系統(tǒng),在微服務(wù)架構(gòu)下,單體應(yīng)用采用前后端分離模式,前端一般使用 Nginx,Ngnix 進(jìn)程間采用主備模式,系統(tǒng)的后端可以分為多個(gè)應(yīng)用,每個(gè)應(yīng)用有一組對(duì)等的應(yīng)用進(jìn)程(也稱為應(yīng)用實(shí)例)提供服務(wù),每個(gè)應(yīng)用對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),實(shí)際上在分庫(kù)的情況下,有可能一個(gè)應(yīng)用對(duì)應(yīng)多個(gè)數(shù)據(jù)庫(kù)。復(fù)雜一點(diǎn)的是網(wǎng)關(guān),網(wǎng)關(guān)由一組對(duì)等的網(wǎng)關(guān)實(shí)例組成,如果多個(gè)系統(tǒng)共享一個(gè)網(wǎng)關(guān),網(wǎng)關(guān)和系統(tǒng)就是1對(duì)多的關(guān)系,也可以一個(gè)系統(tǒng)獨(dú)享一個(gè)網(wǎng)關(guān),就是一對(duì)一情況,下圖是一個(gè)概念的示例,使用的是系統(tǒng)獨(dú)享網(wǎng)關(guān)模式。

分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 

這里,我們看看經(jīng)常問(wèn)的一些問(wèn)題:跨系統(tǒng)間分布式事務(wù)、系統(tǒng)內(nèi)多個(gè)服務(wù)的分布式事務(wù)、一個(gè)服務(wù)內(nèi)多個(gè)數(shù)據(jù)源/數(shù)據(jù)庫(kù)的分布式事務(wù),這些問(wèn)題完全是從技術(shù)的角度做歸納,用上述概念應(yīng)該改為:系統(tǒng)間的數(shù)據(jù)一致性、系統(tǒng)內(nèi)應(yīng)用間的數(shù)據(jù)一致性、應(yīng)用內(nèi)部對(duì)應(yīng)多數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性,另外可以增加一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)多個(gè)應(yīng)用的數(shù)據(jù)一致性(技術(shù)上存在可能,但從上述概念上看應(yīng)該是在架構(gòu)上避免的)。

這四個(gè)情況如何處理呢?需要我們總結(jié)歸納,我在做總結(jié)歸納的時(shí)候,往往希望首先確定原則,這里的原則是從業(yè)務(wù)的角度進(jìn)行分析,而不是考慮技術(shù)的可能性,因?yàn)榧夹g(shù)的可能性無(wú)窮無(wú)盡,是一個(gè)無(wú)限組合,理論上任何情況都能發(fā)生,考慮所有情況就是胡扯了,必須根據(jù)業(yè)務(wù)的特征進(jìn)行歸納。這里,我不叫分布式事務(wù)而是數(shù)據(jù)一致性就是這個(gè)道理,從業(yè)務(wù)角度目標(biāo)是解決分布式情況下的數(shù)據(jù)一致性,而不是技術(shù)角度看的分布式事務(wù)。

有了這個(gè)原則,就可以分別分析這四種情況了:

1、系統(tǒng)間的數(shù)據(jù)一致性

需要服務(wù)實(shí)現(xiàn) TCC或者業(yè)務(wù)補(bǔ)償模式,由框架(業(yè)務(wù)協(xié)調(diào)器)自動(dòng)調(diào)用,減少人工參與,或者實(shí)現(xiàn)冪等服務(wù),反復(fù)投遞。這兩種方式都沒法做到數(shù)據(jù)的 100% 一致,在失敗的時(shí)候都需要有重試的機(jī)制,例如補(bǔ)償失敗要重試(這就是框架的好處),多次重試還是失敗,記錄失敗歷史,業(yè)務(wù)上人工處理。不要害怕人工處理,只要減少人工處理的機(jī)會(huì)就好了,在工行時(shí)就是提出人工干預(yù)比例降低若干個(gè)百分點(diǎn)作為目標(biāo)。

2、系統(tǒng)內(nèi)應(yīng)用間的數(shù)據(jù)一致性

這個(gè)可以使用華為 SAGA 的模式,也就是建立一個(gè)共享的事務(wù)協(xié)調(diào)器模式(雖然我對(duì)這個(gè)共享方式不喜歡,不是分布式嗎,為啥還搞出一堆集中式的東西,既然如此,為啥應(yīng)用間調(diào)用不能走網(wǎng)關(guān),要直連,說(shuō)共享不好,到這里就是共享好了),好了,括號(hào)里是吐槽,簡(jiǎn)單的方式是用共享的事務(wù)協(xié)調(diào)器模式,記錄服務(wù)調(diào)用的事件,在合適的時(shí)機(jī)調(diào)用TCC和補(bǔ)償服務(wù)。

3、應(yīng)用內(nèi)部對(duì)應(yīng)多數(shù)據(jù)庫(kù)的數(shù)據(jù)一致性,是個(gè)反模式,不要做通用方案

一般來(lái)說(shuō),一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)數(shù)據(jù)庫(kù),不允許一個(gè)應(yīng)用對(duì)應(yīng)多個(gè)數(shù)據(jù)庫(kù),多個(gè)數(shù)據(jù)庫(kù)的情況應(yīng)該分成多個(gè)應(yīng)用,通過(guò)服務(wù)調(diào)用方式解決,這是一個(gè)基本原則,否則就是一個(gè)反模式設(shè)計(jì)。但是,就是有很多人較真,一定問(wèn)有這個(gè)情況你怎么解決,我的回答是架構(gòu)設(shè)計(jì)解決這個(gè)問(wèn)題,在技術(shù)上不支持這種方式,讓設(shè)計(jì)者必須在架構(gòu)解決,而不是利用技術(shù)手段解決不合理的架構(gòu)設(shè)計(jì),否則后患無(wú)窮(這一點(diǎn)還是需要勇氣和堅(jiān)持的)。空口無(wú)憑,實(shí)例為證,一般我會(huì)舉搶紅包的例子。大家知道,搶紅包的并發(fā)非常高,又有數(shù)據(jù)一致性的要求,無(wú)論哪個(gè)互聯(lián)網(wǎng)公司,都是根據(jù)紅包 ID,把數(shù)據(jù)路由到一個(gè)數(shù)據(jù)庫(kù)中,用數(shù)據(jù)庫(kù)事務(wù)保證數(shù)據(jù)一致性,在銀行互聯(lián)網(wǎng)賬務(wù)系統(tǒng)(2類 3類戶)的情況,也是把同一賬務(wù)的數(shù)據(jù)路由到不同的數(shù)據(jù)庫(kù)中(見下圖)。還會(huì)提到一種情況,在分庫(kù)分表的時(shí)候,如果恰好數(shù)據(jù)分到了不同庫(kù)中,恰好要做一個(gè)批量的調(diào)整,恰好在一個(gè)事務(wù)中,如何解決。我認(rèn)為這種情況的發(fā)生,恰恰說(shuō)明設(shè)計(jì)有問(wèn)題,分庫(kù)的原則也是按業(yè)務(wù)拆分,不是用技術(shù)手段隨機(jī)分解,既然按業(yè)務(wù)拆分,批量處理的時(shí)候就應(yīng)該不是一個(gè)業(yè)務(wù)上的事務(wù),在技術(shù)上不提供這樣的實(shí)現(xiàn),才可以在架構(gòu)設(shè)計(jì)考慮問(wèn)題。不排除在某個(gè)系統(tǒng)中可以做一些框架,解決上述問(wèn)題,但是,這一定不是個(gè)通用的方案。

分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 

根據(jù)上圖,我們的概念模型是由調(diào)整的,要多一個(gè)應(yīng)用分區(qū)的情況:

分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 


分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 

4、一個(gè)數(shù)據(jù)庫(kù)對(duì)應(yīng)多個(gè)應(yīng)用的數(shù)據(jù)一致性

這種情況經(jīng)常也是一個(gè)反模式,既然是共享一個(gè)數(shù)據(jù)庫(kù),把應(yīng)用放在一起就好了。如果真的有需要(例如一個(gè)模塊部署過(guò)于頻繁,單獨(dú)拆出來(lái)做一個(gè)應(yīng)用),那也應(yīng)該和多應(yīng)用多數(shù)據(jù)庫(kù)一樣處理。

以上,即是我分析的分布式架構(gòu)下幾種不同情況的數(shù)據(jù)一致性控制方式。

分布式架構(gòu)中數(shù)據(jù)一致性常見的幾個(gè)問(wèn)題

 

關(guān)于作者:焦烈焱,普元信息CTO,致力于技術(shù)創(chuàng)新和金融創(chuàng)新解決方案研究。專注于企業(yè)技術(shù)架構(gòu)領(lǐng)域,對(duì)分布式環(huán)境的企業(yè)計(jì)算、 企業(yè)信息架構(gòu)的規(guī)劃與實(shí)踐有著豐厚經(jīng)驗(yàn),帶領(lǐng)普元技術(shù)團(tuán)隊(duì)相繼在云計(jì)算、大數(shù)據(jù)及移動(dòng)開發(fā)領(lǐng)域取得多項(xiàng)突破,并主持中國(guó)工商銀行、中國(guó)建設(shè)銀行等多家大型企業(yè)技術(shù)平臺(tái)的規(guī)劃與研發(fā)。

關(guān)于EAWorld:微服務(wù),DevOps,數(shù)據(jù)治理,移動(dòng)架構(gòu)原創(chuàng)技術(shù)分享。

分享到:
標(biāo)簽:分布式 架構(gòu)
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定