日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

阅读笔记一

發(fā)布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 阅读笔记一 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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


針對分布式架構(gòu)下的數(shù)據(jù)一致性,可能會有如下問題:跨系統(tǒng)間分布式事務(wù)如何解決?系統(tǒng)內(nèi)多個服務(wù)的分布式事務(wù)如何解決?一個服務(wù)內(nèi)多個數(shù)據(jù)源/數(shù)據(jù)庫的分布式事務(wù)如何解決?這些問題很容易理解,但是由于術(shù)語不準(zhǔn)確,所以解釋起來會有二義性,所以先要統(tǒng)一語言或者術(shù)語。下面定義域的概念:域是一個虛擬的分類,幾個系統(tǒng)屬于某一個域,例如網(wǎng)上銀行和手機(jī)銀行都屬于電子渠道領(lǐng)域;

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

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

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

有了這個原則,就可以分別分析這三種情況了:

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

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

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

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

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

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

?

轉(zhuǎn)載于:https://www.cnblogs.com/messi2017/p/11055063.html

總結(jié)

以上是生活随笔為你收集整理的阅读笔记一的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。