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

公告:魔扣目錄網(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

為正確的案例選擇正確的模式

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

前言

困惑的特德懇求說(shuō):"很難相信這是不可能的。""這是2020年;當(dāng)然,必須有另一種方式"。

這是Acme Widgets的教學(xué)時(shí)刻。他們技術(shù)堆棧中的數(shù)據(jù)庫(kù)發(fā)生故障,并導(dǎo)致許多服務(wù)中斷。首席技術(shù)官泰德(Ted)召集了高級(jí)技術(shù)領(lǐng)導(dǎo)人緊急會(huì)議,以制定戰(zhàn)術(shù)和長(zhǎng)期解決方案的行動(dòng)方案。他想到的解決方案之一是將所有數(shù)據(jù)庫(kù)轉(zhuǎn)換為主動(dòng)-主動(dòng)模式,其中沒有共享資產(chǎn),并且在地理上分散以降低風(fēng)險(xiǎn)。但沒有更改應(yīng)用程序。所有人都把目光投向了新任命的首席建筑師簡(jiǎn)(Jane)的觀點(diǎn)。令所有人大吃一驚的是,Jane平靜地宣布,如果不進(jìn)行應(yīng)用程序重構(gòu),并非所有數(shù)據(jù)庫(kù)都可以是Active-Active Shared-Nothing(AASN)。而且,她還解釋說(shuō),對(duì)于某些人來(lái)說(shuō),這是不可能的,甚至對(duì)于某些人來(lái)說(shuō),甚至是不需要的。

對(duì)于簡(jiǎn)來(lái)說(shuō),這不是新情況。在加入Acme之前,作為許多組織的數(shù)據(jù)負(fù)責(zé)人,她不得不教育其他許多技術(shù)領(lǐng)導(dǎo)者關(guān)于數(shù)據(jù)彈性的細(xì)微差別,這與應(yīng)用程序彈性不同。

她從過(guò)去的經(jīng)驗(yàn)中知道,用清晰的例子說(shuō)明可以做什么可以是證明對(duì)Acme最好的觀點(diǎn)的最佳方法。

入門基礎(chǔ)

Jane宣布,首先要做的就是正確定義AASN。這意味著兩個(gè)不同地理存儲(chǔ)中的數(shù)據(jù)庫(kù)的兩個(gè)副本,具有相同的數(shù)據(jù),都為在該數(shù)據(jù)中心中運(yùn)行的應(yīng)用程序的副本提供服務(wù),如下圖所示。

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

應(yīng)用程序A1和A2只是在兩個(gè)不同區(qū)域(R1和R2)中運(yùn)行的同一應(yīng)用程序的副本。數(shù)據(jù)庫(kù)D1和D2是在不同區(qū)域中運(yùn)行的同一數(shù)據(jù)庫(kù)的副本。數(shù)據(jù)庫(kù)是雙向復(fù)制的,因此對(duì)一個(gè)數(shù)據(jù)庫(kù)的更改會(huì)在另一個(gè)數(shù)據(jù)庫(kù)中保留。A1連接到D1,而A2僅連接到D2。數(shù)據(jù)庫(kù)D1和D2的副本彼此之間不共享任何內(nèi)容。

Jane提醒他們,它們之間沒有共享,因此諸如Oracle Real Application Clusters(https://www.oracle.com/database/technologies/rac.html)之類的系統(tǒng)共享存儲(chǔ)或嚴(yán)重依賴于同步共享存儲(chǔ)系統(tǒng)-不符合條件。從可用性的角度來(lái)看,它們可以彼此完全獨(dú)立,因此帶來(lái)了彈性。但是,簡(jiǎn)強(qiáng)調(diào)說(shuō),這并非總是可能的,而且在許多情況下甚至不是必需的。

"不需要?"困惑的Ted問(wèn)道:"等等,我們必須要有數(shù)據(jù)庫(kù)的高可用性,不是嗎?"

"是的,我們?cè)敢狻?quot;簡(jiǎn)回答。 " AASN數(shù)據(jù)庫(kù)架構(gòu)通常與高可用性混為一談;但它們是不同的概念。"可能在不同地理區(qū)域中的"熱"備用數(shù)據(jù)庫(kù)在數(shù)據(jù)層中實(shí)現(xiàn)高可用性。當(dāng)當(dāng)前主數(shù)據(jù)庫(kù)發(fā)生故障時(shí),備用數(shù)據(jù)庫(kù)將接管,從最后一個(gè)事務(wù)開始。使用適當(dāng)?shù)募夹g(shù)和良好的體系結(jié)構(gòu),可以將恢復(fù)點(diǎn)目標(biāo)降低為0,即在主要故障期間不會(huì)丟失任何數(shù)據(jù)。不幸的是,經(jīng)常會(huì)出現(xiàn)電力不足的可能性,即非常小的但可察覺的時(shí)間段,在此期間沒有數(shù)據(jù)庫(kù)可用于正常服務(wù)。使用適當(dāng)?shù)捏w系結(jié)構(gòu),可以將系統(tǒng)中斷或掉電時(shí)間減少到接近零。但是,她警告說(shuō)這是關(guān)鍵,除非在非常特殊的情況下,否則通常不可能將熱備用數(shù)據(jù)庫(kù)指定為也可用的活動(dòng)數(shù)據(jù)庫(kù)。因此,該系統(tǒng)具有很高的可用性。但不能稱為有效/有效。

"我明白你的意思了," Ted同意。"我們可以提供高可用性,但不一定是主動(dòng)/主動(dòng),沒有共享資產(chǎn)。"

那么,在聽眾沉思的情況下,我們?nèi)绾尾拍荛_發(fā)出一個(gè)真正的主動(dòng)/主動(dòng)架構(gòu),在數(shù)據(jù)庫(kù)層中沒有共享資產(chǎn)?只要我們謹(jǐn)慎處理這個(gè)問(wèn)題,Jane就會(huì)回答,并且不要指望一種尺寸能滿足所有說(shuō)明性的解決方案,在許多情況下這可能是可能的。在本文中,您將學(xué)習(xí)Jane解釋的各種AASN數(shù)據(jù)庫(kù)系統(tǒng)模式,以及它們必須伴隨的體系結(jié)構(gòu)考慮。

申請(qǐng)狀態(tài)

"您提到AASN在許多應(yīng)用中都是不可能的," Ted詢問(wèn)。"你能解釋這些情況嗎?"

Jane解釋說(shuō),關(guān)鍵是仔細(xì)的應(yīng)用程序設(shè)計(jì),尤其是應(yīng)用程序是無(wú)狀態(tài)的,不需要交叉到數(shù)據(jù)庫(kù)的另一個(gè)副本進(jìn)行驗(yàn)證。在需要維護(hù)應(yīng)用程序狀態(tài)的地方,例如在電子商務(wù)訂單更新的情況下,數(shù)據(jù)庫(kù)中的AASN體系結(jié)構(gòu)會(huì)帶來(lái)巨大的數(shù)據(jù)完整性風(fēng)險(xiǎn)。實(shí)施AASN數(shù)據(jù)庫(kù)層的理想方案是在只讀數(shù)據(jù)庫(kù)的情況下,其中應(yīng)用程序的狀態(tài)不會(huì)更改或更改,但是最終一致的狀態(tài)是可以接受的。Jane警告,在后一種情況下,應(yīng)用程序需要了解并且應(yīng)該能夠處理在數(shù)據(jù)庫(kù)副本上進(jìn)行相沖突的更改的可能性。

觀眾敦促她擴(kuò)大應(yīng)用程序需要做的事情。Jane繼續(xù):應(yīng)用程序需要了解AASN數(shù)據(jù)庫(kù)層的三個(gè)約束:

· 最終,不是立即,一致的數(shù)據(jù)存儲(chǔ)。

· 由于兩個(gè)副本中同一記錄中發(fā)生更改,因此可能存在沖突。

· 由于一個(gè)更新在另一副本的更新發(fā)生沖突之后延遲更新,因此可能導(dǎo)致數(shù)據(jù)損壞。

傳統(tǒng)方法

簡(jiǎn)繼續(xù)講述這些方法。首先,她談到了主動(dòng)/被動(dòng)無(wú)共享(APSN)架構(gòu),并強(qiáng)調(diào)了"被動(dòng)"一詞。這是數(shù)據(jù)庫(kù)層中傳統(tǒng)上公認(rèn)的APSN架構(gòu)視圖:

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

在此圖中,A1和A2是分別在區(qū)域R1和R2中運(yùn)行的同一應(yīng)用程序的兩個(gè)實(shí)例,并連接到數(shù)據(jù)庫(kù)D1(主數(shù)據(jù)庫(kù))和D2(備用數(shù)據(jù)庫(kù))。數(shù)據(jù)庫(kù)D2是D1的熱備用數(shù)據(jù)庫(kù),它通過(guò)某種類型的數(shù)據(jù)庫(kù)復(fù)制技術(shù)不斷更新。當(dāng)區(qū)域R1發(fā)生故障時(shí),結(jié)果數(shù)據(jù)庫(kù)D1發(fā)生故障。數(shù)據(jù)庫(kù)D2僅承擔(dān)主要數(shù)據(jù)存儲(chǔ)區(qū)的責(zé)任。區(qū)域R1發(fā)生故障后,D2成為主要區(qū)域,應(yīng)用程序負(fù)載平衡器將流量發(fā)送到該區(qū)域。在任何時(shí)間點(diǎn),主數(shù)據(jù)只有一個(gè)副本。

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

掉電期

但是,在負(fù)載平衡器可以將流量發(fā)送到應(yīng)用程序A2之前,它必須確保備用數(shù)據(jù)庫(kù)已完全適應(yīng)對(duì)數(shù)據(jù)庫(kù)D1所做的更改。無(wú)論多么小,該時(shí)間段仍可被應(yīng)用程序感知到,稱為欠壓期。簡(jiǎn)解釋說(shuō),電力不足的持續(xù)時(shí)間完全取決于對(duì)數(shù)據(jù)庫(kù)D1所做的更改,在無(wú)活動(dòng)或活動(dòng)較少的時(shí)間段內(nèi)可能為零。

但是,觀眾想知道,是否可以消除掉電期?

簡(jiǎn)明確指出,可以消除數(shù)據(jù)庫(kù)層的限電期。但是為了確保同步不落后,復(fù)制必須是同步的。雖然這聽起來(lái)不錯(cuò),但實(shí)際上它有兩項(xiàng)懲罰,我們必須考慮:

· 由于必須使用非常低延遲的介質(zhì)來(lái)傳輸數(shù)據(jù),因此它通常非常昂貴,尤其是跨區(qū)域時(shí)。

· 這會(huì)增加應(yīng)用程序的性能開銷,因?yàn)樵趯⑻峤豁憫?yīng)發(fā)送到應(yīng)用程序之前,數(shù)據(jù)庫(kù)必須從D1和D2都獲得確認(rèn)。

因此,數(shù)據(jù)庫(kù)復(fù)制通常是異步的,因此某種程度的掉電是不可避免的。

熱備

這使期望快速回答的聽眾的情緒受到抑制。簡(jiǎn)繼續(xù)敘述。區(qū)域R1恢復(fù)后,將開始反向復(fù)制。

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

Jane提請(qǐng)觀眾注意以下事實(shí):在這種體系結(jié)構(gòu)中,只有一個(gè)"主"數(shù)據(jù)副本。另一個(gè)副本始終只是備用副本。這消除了數(shù)據(jù)存儲(chǔ)之間發(fā)生沖突的任何可能性。另一方面,Active-Active Shared-Nothing數(shù)據(jù)存儲(chǔ)區(qū)假定兩個(gè)數(shù)據(jù)存儲(chǔ)區(qū)始終都是主存儲(chǔ)區(qū),并且復(fù)制雙向進(jìn)行,而應(yīng)用程序負(fù)載平衡器向這兩個(gè)方向發(fā)送流量。這樣,當(dāng)區(qū)域R1出現(xiàn)故障時(shí),負(fù)載均衡器僅停止向該負(fù)載均衡器發(fā)送流量,而D1中的所有更改都已在D2中可用,因此沒有掉電期。

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

"太棒了!"宣布激動(dòng)的特德。"為什么我們不能僅將數(shù)據(jù)存儲(chǔ)從主動(dòng)-被動(dòng)共享-無(wú)轉(zhuǎn)換為主動(dòng)-主動(dòng)共享-無(wú)?為什么我們需要更改應(yīng)用程序?"

簡(jiǎn)解釋道,這就是問(wèn)題所在。根據(jù)應(yīng)用程序打算執(zhí)行的操作,它可能根本無(wú)法運(yùn)行,或者可能在無(wú)提示數(shù)據(jù)損壞的情況下運(yùn)行。這就是我們要提防的問(wèn)題。

這兩個(gè)詞像空中的劍一樣懸在空中,"可能無(wú)法運(yùn)行"和"無(wú)聲的數(shù)據(jù)損壞"。

"請(qǐng)解釋,"特德對(duì)此很感興趣。

但是在進(jìn)一步解釋之前,Jane希望讀者了解數(shù)據(jù)管理的一些基礎(chǔ)知識(shí)。

CAP定理

Jane提出了一個(gè)供聽眾思考的問(wèn)題:"當(dāng)我們將相同數(shù)據(jù)的多個(gè)副本存儲(chǔ)在兩個(gè)數(shù)據(jù)存儲(chǔ)中以解決單個(gè)副本的故障時(shí),當(dāng)一個(gè)副本發(fā)生故障時(shí)會(huì)發(fā)生什么?"其他副本是否處于可以立即承擔(dān)故障操作的狀態(tài)?它們可能會(huì),也可能不會(huì),取決于架構(gòu)。這就是CAP定理的規(guī)則-一致性,可用性和分區(qū)容限(https://en.wikipedia.org/wiki/CAP_theorem)—出現(xiàn)的地方。

一致性:如果不同數(shù)據(jù)存儲(chǔ)中有多個(gè)數(shù)據(jù)副本,那么它們是否在任何時(shí)間點(diǎn)都彼此100%同步?如果這樣,他們需要一個(gè)高速,低延遲的網(wǎng)絡(luò)。但是由于現(xiàn)在從所有數(shù)據(jù)存儲(chǔ)中獲取提交確認(rèn)的時(shí)間越來(lái)越長(zhǎng),因此會(huì)對(duì)應(yīng)用程序的性能產(chǎn)生負(fù)面影響。

可用性:如果一個(gè)數(shù)據(jù)存儲(chǔ)不可用,則其他副本可以接管該應(yīng)用程序以使其獲得非錯(cuò)誤響應(yīng)的方式。請(qǐng)記住,這僅僅是數(shù)據(jù)存儲(chǔ)區(qū)對(duì)應(yīng)用程序的響應(yīng)。那里可能沒有最新的更新。

分區(qū)容限:當(dāng)刪除數(shù)據(jù)存儲(chǔ)副本之間的消息時(shí),應(yīng)用程序仍可以運(yùn)行嗎?這不能保證尚存的副本都已同步。

簡(jiǎn)解釋說(shuō),CAP定理指出,在任何設(shè)計(jì)中,我們只能擁有這三個(gè)屬性中的兩個(gè)。不是全部三個(gè)。

她解釋說(shuō),解決這個(gè)問(wèn)題的另一種方法是通過(guò)下面顯示的維恩圖。請(qǐng)注意,在某些地方,三個(gè)屬性中的兩個(gè)重疊了。但是這三個(gè)空間都沒有匯合的空間。簡(jiǎn)強(qiáng)調(diào)說(shuō),非常重要的一點(diǎn)是要理解這三者不可能完全融合。例如,如果我們追求一致性,就無(wú)法設(shè)計(jì)可用性。但是當(dāng)副本丟失時(shí)會(huì)發(fā)生什么呢?恢復(fù)副本后,我們必須暫停數(shù)據(jù)存儲(chǔ)上的操作,直到我們可以將新恢復(fù)的副本與尚存的副本同步。否則,新啟動(dòng)的分區(qū)將不一致,從而違反了CAP中的" C"。

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

最終一致的狀態(tài)

因此,觀眾問(wèn),如果副本不一致,維護(hù)副本的意義何在?

維護(hù)副本只是意味著數(shù)據(jù)存儲(chǔ)異步同步。因此它們最終將保持同步。但是在給定的時(shí)間點(diǎn),系統(tǒng)無(wú)法保證數(shù)據(jù)存儲(chǔ)100%同步。這稱為最終一致性,而不是立即一致性。欣賞差異至關(guān)重要。

為了說(shuō)明這一點(diǎn),Jane向他們展示了一個(gè)數(shù)據(jù)系統(tǒng)的示例體系結(jié)構(gòu),該體系結(jié)構(gòu)具有三個(gè)數(shù)據(jù)存儲(chǔ),這些數(shù)據(jù)存儲(chǔ)滿足CAP定理中的A和P,從而使C排除在外,即最終保持一致。

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

她解釋了這種情況:假設(shè)數(shù)據(jù)元素的值為1,最初在所有三個(gè)數(shù)據(jù)存儲(chǔ)區(qū)中都相同?,F(xiàn)在,應(yīng)用程序A2將值更新為2。由于該體系結(jié)構(gòu)優(yōu)先考慮可用性和分區(qū)容忍度而不是一致性,因此其他兩個(gè)數(shù)據(jù)存儲(chǔ)區(qū)可能尚未更新。此時(shí),如果應(yīng)用程序A3讀取數(shù)據(jù)元素,則它可能會(huì)獲得值1,而不是2,這是最近的值。在許多情況下,最新的價(jià)值不僅是理想的,而且是絕對(duì)必要的,這可能是不可接受的。例如在電子商務(wù)訂單中。數(shù)據(jù)存儲(chǔ)區(qū)D3最終將獲得更新后的值3;但不是立即。

解決沖突

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

簡(jiǎn)解釋了第二個(gè)問(wèn)題。她考慮另一種情況,如下圖所示。我們像以前一樣從原始值1開始,應(yīng)用程序A2在數(shù)據(jù)存儲(chǔ)區(qū)D2中將其更新為2。但是在將其傳播到所有其他數(shù)據(jù)存儲(chǔ)區(qū)之前,連接到數(shù)據(jù)存儲(chǔ)區(qū)D3的應(yīng)用程序A3會(huì)將值更新為3。數(shù)據(jù)存儲(chǔ)區(qū)D1中的值將是什么?

她警告說(shuō),由于數(shù)據(jù)復(fù)制是異步的,因此無(wú)法預(yù)測(cè)哪個(gè)更新將首先到達(dá)。如果從D2更新首先到達(dá)它,它將是2,否則將是3。在許多情況下,這種不可預(yù)測(cè)性可能是不可接受的。

對(duì)于D2,出現(xiàn)類似的問(wèn)題。它應(yīng)該忽略自己的更新并將元素更新為3嗎?同樣的問(wèn)題也適用于D3。

解決沖突的技術(shù)

Ted和聽眾現(xiàn)在對(duì)Active-Active Shared-Nothing體系結(jié)構(gòu)的潛在問(wèn)題有了清晰的了解。但他們大聲懷疑,是否有任何技術(shù)可以避免這些問(wèn)題,尤其是解決沖突?

Jane回答說(shuō),有解決沖突的方法,但是沒有一種對(duì)應(yīng)用程序的功能和數(shù)據(jù)準(zhǔn)確性透明。以下是一些技術(shù),按照從最小到最復(fù)雜的順序?qū)嵤?/p>

· Last Man Standing:無(wú)論來(lái)源如何,都會(huì)應(yīng)用最新更新。在上述情況下,假設(shè)消息以該順序發(fā)生,則值3將同時(shí)應(yīng)用于數(shù)據(jù)存儲(chǔ)D1和D2。但是,可能存在競(jìng)爭(zhēng)情況,其中更新將被級(jí)聯(lián)多次。數(shù)據(jù)庫(kù)系統(tǒng)通常具有內(nèi)置的終止開關(guān),以避免這些競(jìng)爭(zhēng)情況。

· 時(shí)間戳權(quán)重:與最后一個(gè)站立的解決方案非常相似,但有一個(gè)警告。它不依賴于更新的順序,而是檢查更新的時(shí)間戳并僅沿時(shí)間戳比較更新。這要求將所有三個(gè)數(shù)據(jù)存儲(chǔ)都與單個(gè)時(shí)間服務(wù)器同步(這在某種程度上侵蝕了"無(wú)共享"部分);但它可能更公平,并且避免了比賽條件。

· 位置權(quán)重:為每個(gè)數(shù)據(jù)存儲(chǔ)分配一個(gè)權(quán)重。權(quán)重最高的存儲(chǔ)的更新將獲勝,并將應(yīng)用于所有其他數(shù)據(jù)存儲(chǔ)。在前面的示例中,如果D1,D2和D3的權(quán)重分別為300、200和100,則該值最終將為2,因?yàn)檫@是D2在權(quán)重為200時(shí)與D3在權(quán)重為100時(shí)的更新。因此,該值將在D3中更新為2,覆蓋其自身的更改3。類似地,D1將重新更新為2。

· 應(yīng)用程序權(quán)重:每個(gè)更新都用應(yīng)用程序ID標(biāo)記,并且每個(gè)應(yīng)用程序也被加權(quán)。最終,權(quán)重最高的應(yīng)用程序更改將被保存。

簡(jiǎn)在這里停下來(lái)指示觀眾思考這些技巧的影響。她說(shuō):"我們正在談?wù)摲艞墧?shù)據(jù)存儲(chǔ)中的更改,然后將其替換為另一個(gè)。"無(wú)論選擇哪種技術(shù),對(duì)數(shù)據(jù)準(zhǔn)確性的影響都非常大。我們必須從應(yīng)用程序的設(shè)計(jì)中考慮到它;而不是數(shù)據(jù)存儲(chǔ)架構(gòu)。"

觀眾一直同意Jane一直以來(lái)的觀點(diǎn),但現(xiàn)在對(duì)可以做出哪種架構(gòu)決定來(lái)利用ASN感到好奇。

架構(gòu)決策

Jane解釋說(shuō),通常,數(shù)據(jù)存儲(chǔ)根據(jù)其用途分為多種類型。

· 記錄系統(tǒng):數(shù)據(jù)存儲(chǔ)區(qū)用作應(yīng)用程序的記錄系統(tǒng)。它必須是一致的,沒有關(guān)于數(shù)據(jù)準(zhǔn)確性的任何歧義或疑問(wèn)。

· 參考系統(tǒng):數(shù)據(jù)存儲(chǔ)區(qū)用作數(shù)據(jù)的輔助系統(tǒng),用于參考。分析存儲(chǔ)屬于此類別。機(jī)器學(xué)習(xí),歷史數(shù)據(jù)分析是在此數(shù)據(jù)存儲(chǔ)上完成的。

· 只讀:數(shù)據(jù)存儲(chǔ)區(qū)用于只讀活動(dòng),并且從未發(fā)生任何更新。

· 靜態(tài)內(nèi)容:數(shù)據(jù)存儲(chǔ)區(qū)用于托管靜態(tài)內(nèi)容。示例包括用于網(wǎng)絡(luò)媒體資源的托管圖像和不經(jīng)常更改的營(yíng)銷抵押品。

· 緩存:數(shù)據(jù)存儲(chǔ)區(qū)用于在多個(gè)應(yīng)用程序之間緩存數(shù)據(jù),以加快訪問(wèn)速度,并且對(duì)延遲極為敏感。

· 會(huì)話狀態(tài):數(shù)據(jù)對(duì)于應(yīng)用程序的特定會(huì)話而言是本地的,與該會(huì)話外部無(wú)關(guān)。例如,將用于用戶交互的行為數(shù)據(jù)放入應(yīng)用程序,購(gòu)物車,Cookie等。

Jane繼續(xù)說(shuō),數(shù)據(jù)庫(kù)層中的主動(dòng)-主動(dòng)考慮可接受的體系結(jié)構(gòu)模式取決于數(shù)據(jù)存儲(chǔ)的使用情況。在頻譜的最末端,會(huì)話狀態(tài)數(shù)據(jù)存儲(chǔ)區(qū)保存的數(shù)據(jù)僅與該會(huì)話相關(guān),而在外部不可見。在其他位置創(chuàng)建數(shù)據(jù)存儲(chǔ)的副本對(duì)應(yīng)用程序無(wú)用,因?yàn)樗鼰o(wú)法從那里讀取狀態(tài)。因此,活動(dòng)數(shù)據(jù)架構(gòu)實(shí)際上不會(huì)增加任何價(jià)值,并且不相關(guān)。

讀者同意甚至不需要數(shù)據(jù)庫(kù)副本,更不用說(shuō)主動(dòng)-主動(dòng)了,而是想知道它們可能與其他地方有關(guān)。Jane解釋說(shuō),在其他一些情況下,例如在購(gòu)物車數(shù)據(jù)存儲(chǔ)區(qū)中,我們可能希望在數(shù)據(jù)存儲(chǔ)區(qū)發(fā)生故障后繼續(xù)保留數(shù)據(jù)。在這種情況下,輔助副本很有用,但不需要主動(dòng)-主動(dòng)架構(gòu)。主動(dòng)-被動(dòng)數(shù)據(jù)庫(kù)配置會(huì)有所幫助,因?yàn)樵搼?yīng)用程序的新實(shí)例僅在其他位置停止使用該應(yīng)用程序的舊實(shí)例(現(xiàn)在已失效)。

另一方面,"記錄系統(tǒng)"數(shù)據(jù)存儲(chǔ)區(qū)需要一致,明確且毫無(wú)疑問(wèn)的準(zhǔn)確數(shù)據(jù),因此不太適合主動(dòng)/主動(dòng)數(shù)據(jù)存儲(chǔ)。Jane解釋說(shuō),如果使用AASN數(shù)據(jù)體系結(jié)構(gòu),則必須將應(yīng)用程序設(shè)計(jì)為處理這種配置中不可避免的沖突。這些不是要解決的瑣碎問(wèn)題。"根據(jù)我的經(jīng)驗(yàn)," Jane認(rèn)為,"幾乎所有SoR數(shù)據(jù)庫(kù)都不適合AASN體系結(jié)構(gòu),而大多數(shù)都不適合。即使是那些可能的應(yīng)用程序,也都需要非常激烈的應(yīng)用程序重構(gòu),而且成本往往超過(guò)收益。"

現(xiàn)在,聽眾,尤其是特德,已經(jīng)了解了簡(jiǎn)在這個(gè)問(wèn)題上的原始沉默的本質(zhì)。他表示:"很顯然,諸如電子商務(wù)訂單更新之類的SoR數(shù)據(jù)庫(kù)不是AASN的理想選擇。""另一方面,會(huì)話狀態(tài)數(shù)據(jù)存儲(chǔ)是完美的;但甚至不需要數(shù)據(jù)庫(kù)的副本。但是在這兩個(gè)極端之間的所有用例呢?要為所有這些人充分利用ASN,需要做什么?"

Jane解釋說(shuō),介于這兩種極端之間的其他模式可以受益于AASN數(shù)據(jù)存儲(chǔ),但必須能夠解決以下兩個(gè)問(wèn)題:

· 解決沖突的策略是什么-上個(gè)男人站立,時(shí)間權(quán)重,地區(qū)權(quán)重或應(yīng)用程序權(quán)重?

· 由于沖突解決,應(yīng)用程序?qū)⑷绾螒?yīng)對(duì)數(shù)據(jù)的邏輯變化?

Acme應(yīng)用程序開發(fā)負(fù)責(zé)人Debbie要求Jane在此方面做更多擴(kuò)展。

Jane考慮了應(yīng)用程序緩存的情況。如果兩個(gè)數(shù)據(jù)存儲(chǔ)區(qū)的更新方式不同,則在某些情況下緩存將具有不同的值。在大多數(shù)可以接受的緩存中,因?yàn)榭梢詮挠涗浵到y(tǒng)確定地得出最終值。參考系統(tǒng)也遵循相同的模式。機(jī)器學(xué)習(xí)培訓(xùn)應(yīng)用程序可能不受數(shù)據(jù)的微小更改的影響。大多數(shù)數(shù)據(jù)分析人員執(zhí)行的匯總不會(huì)隨數(shù)據(jù)的微小變化而發(fā)生重大變化。因此,在最終一致的狀態(tài)下,他們可能會(huì)沒事。

進(jìn)一步擴(kuò)展一下,Jane給出了另一個(gè)自助服務(wù)查找系統(tǒng)示例,以顯示客戶的訂單歷史記錄。由于使用的是其他數(shù)據(jù)庫(kù),而不是記錄系統(tǒng)的數(shù)據(jù)庫(kù),因此無(wú)論如何也無(wú)法保證數(shù)據(jù)的一致性。因此在多個(gè)副本之間發(fā)生數(shù)據(jù)漂移的可能性不會(huì)增加任何其他風(fēng)險(xiǎn)。但是,并非所有參考系統(tǒng)都以這種方式使用。如果該系統(tǒng)是記錄系統(tǒng)的準(zhǔn)確副本,則此條件失敗。

"根據(jù)我的經(jīng)驗(yàn),"簡(jiǎn)認(rèn)為,"除非有時(shí)間點(diǎn)數(shù)據(jù)可供參考,否則現(xiàn)實(shí)生活中不存在這樣的系統(tǒng)。例如,想象一下在帳戶查詢系統(tǒng)的情況下,每天凌晨12:00(而不是現(xiàn)在)的帳戶余額可用。AASN數(shù)據(jù)基礎(chǔ)架構(gòu)可以很好地處理它。"

她重申,這不僅僅是數(shù)據(jù)層的更改,AASN可能需要更改應(yīng)用程序設(shè)計(jì),甚至需要更改應(yīng)用程序的業(yè)務(wù)意圖。

應(yīng)用設(shè)計(jì)模式

既然Debbie理解了AASN數(shù)據(jù)層的細(xì)微差別,她想學(xué)習(xí)一些應(yīng)用程序模式以利用它。

無(wú)狀態(tài)與有狀態(tài)應(yīng)用

Jane解釋說(shuō),設(shè)計(jì)的關(guān)鍵是一個(gè)問(wèn)題:應(yīng)用程序是無(wú)狀態(tài)的還是有狀態(tài)的?

通常,應(yīng)用程序在單個(gè)執(zhí)行線程中與數(shù)據(jù)存儲(chǔ)進(jìn)行多次交互。它需要數(shù)據(jù)庫(kù)來(lái)維護(hù)應(yīng)用程序的狀態(tài),還是應(yīng)用程序需要對(duì)其進(jìn)行跟蹤?或者,應(yīng)用程序是否假定每個(gè)數(shù)據(jù)庫(kù)調(diào)用都獨(dú)立于另一個(gè)?如果是后者,則稱為無(wú)狀態(tài)應(yīng)用程序。使用Active-Active Shared-Nothing數(shù)據(jù)層更容易實(shí)現(xiàn)無(wú)狀態(tài)應(yīng)用程序。

簡(jiǎn)解釋了這些模式:

模式1:許多主節(jié)點(diǎn),但只有一個(gè)活躍

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

數(shù)據(jù)存儲(chǔ)區(qū)都是主數(shù)據(jù)庫(kù),即復(fù)制在它們之間雙向進(jìn)行。但是,Jane警告說(shuō),只有一個(gè)數(shù)據(jù)存儲(chǔ)被標(biāo)記為"活動(dòng)"。如果失敗,則可以使另一個(gè)主機(jī)處于活動(dòng)狀態(tài);但在給定的時(shí)間點(diǎn)上只有一個(gè)處于活動(dòng)狀態(tài)。通過(guò)確保所有人都是主節(jié)點(diǎn),我們可以改善掉電時(shí)間。通過(guò)讓一位主節(jié)點(diǎn)成為主動(dòng),我們消除了沖突的可能性和相關(guān)的風(fēng)險(xiǎn)。

"您說(shuō)過(guò),我們改善了掉電時(shí)間,"黛比說(shuō),"并沒有消除它們。為什么?"

簡(jiǎn)解釋說(shuō):"那是因?yàn)閺?fù)制是異步的,從而使另一個(gè)主復(fù)制可能滯后,甚至少或甚至為零。"

模式2:一位主節(jié)點(diǎn)和許多待命者(讀者)

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

我們僅創(chuàng)建一個(gè)主節(jié)點(diǎn),但創(chuàng)建多個(gè)副本以用于只讀訪問(wèn)(因此不會(huì)在其中進(jìn)行任何更新)。有些應(yīng)用程序是純只讀的,可能會(huì)與任何讀者相抵觸。災(zāi)難發(fā)生后,我們可以將其中一位讀者轉(zhuǎn)變?yōu)橐晃蛔x者,并將交易指向該位讀者。由于沒有主動(dòng)-主動(dòng)數(shù)據(jù)庫(kù),因此我們消除了沖突的可能性。但是,簡(jiǎn)警告說(shuō),激活讀者需要一些時(shí)間。因此掉電時(shí)間比以前的模式要長(zhǎng)一些。

模式3:一個(gè)寫入和許多讀出

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

這是上面顯示的兩種方法的組合,但有所不同。所有數(shù)據(jù)存儲(chǔ)都是主數(shù)據(jù),并且是主動(dòng)-主動(dòng)模式;但其中一個(gè)(數(shù)據(jù)庫(kù)F)是一個(gè)超級(jí)主數(shù)據(jù)庫(kù),稱為"進(jìn)紙器"數(shù)據(jù)庫(kù)。所有應(yīng)用程序都連接到所有數(shù)據(jù)庫(kù)并進(jìn)行更新。為了保持一致性,為Feeder數(shù)據(jù)庫(kù)分配了很高的權(quán)重,這使它自己的更新更多,并傳播到其他主數(shù)據(jù)庫(kù)。其他主節(jié)點(diǎn)也可以更新,但不那么頻繁。簡(jiǎn)警告說(shuō),發(fā)生沖突的機(jī)會(huì)很小,但并未完全消除。如果存在沖突,則Feeder數(shù)據(jù)存儲(chǔ)區(qū)中的更新將覆蓋本地更改。

模式4:許多主節(jié)點(diǎn),但根據(jù)應(yīng)用程序進(jìn)行了更新

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

Jane opines,這可能是AASN的最實(shí)際用法。這里所有的數(shù)據(jù)庫(kù)都是主數(shù)據(jù)庫(kù),但是我們沒有使用數(shù)據(jù)庫(kù)復(fù)制策略,而是使用應(yīng)用程序直接更新它們。

Jane提請(qǐng)聽眾注意數(shù)據(jù)庫(kù)D1和D2之間沒有復(fù)制的事實(shí)。該應(yīng)用程序獨(dú)立更新兩個(gè)數(shù)據(jù)庫(kù)。由于沒有數(shù)據(jù)庫(kù)級(jí)別的復(fù)制,因此沒有沖突的可能性,因此也沒有隨之而來(lái)的風(fēng)險(xiǎn)。就數(shù)據(jù)庫(kù)技術(shù)而言,每個(gè)數(shù)據(jù)庫(kù)都是單一的,即沒有其他分區(qū)。因此CAP定理不適用。

模式5:多個(gè)主緩沖寫入

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

Jane指出,模式4提出了一個(gè)不同的問(wèn)題,因?yàn)閿?shù)據(jù)庫(kù)寫入的次數(shù)很多。在獲得所有數(shù)據(jù)庫(kù)的確認(rèn)之前,該應(yīng)用程序無(wú)法繼續(xù)。這可能會(huì)增加延遲問(wèn)題,尤其是在應(yīng)用程序是數(shù)據(jù)庫(kù)聊天的情況下。為了解決這個(gè)問(wèn)題,在模式5中,我們?cè)趦烧咧g使用了一個(gè)消息傳遞層。應(yīng)用程序流傳輸?shù)较鬟f層而不是數(shù)據(jù)庫(kù)。一個(gè)單獨(dú)的過(guò)程從消息傳遞層中將其提取并寫入多個(gè)主數(shù)據(jù)庫(kù)。當(dāng)對(duì)消息傳遞層的寫操作完成時(shí),應(yīng)用程序?qū)@得確認(rèn),因此它非??臁?/p>

黛比顯然對(duì)這種模式感到興奮。但是Jane警告說(shuō),雖然聽起來(lái)比較簡(jiǎn)單,但是卻增加了兩個(gè)風(fēng)險(xiǎn):

· 總體數(shù)據(jù)可用性有更多的延遲。當(dāng)應(yīng)用程序提交時(shí),數(shù)據(jù)不會(huì)寫入數(shù)據(jù)庫(kù)。它是在其他進(jìn)程將其拾取并寫入數(shù)據(jù)庫(kù)時(shí)寫入的。

· 不能保證寫入數(shù)據(jù)的順序;因此可能存在數(shù)據(jù)一致性問(wèn)題。

由于這些限制,Jane解釋說(shuō),此模式最適合靜態(tài)或不常更改的內(nèi)容(緩存和參考系統(tǒng)),而不適合記錄系統(tǒng)。

休會(huì)

綜上所述,Jane得出結(jié)論,"主動(dòng)-主動(dòng)-共享-無(wú)"數(shù)據(jù)庫(kù)層體系結(jié)構(gòu)的成功取決于數(shù)據(jù)庫(kù)的類型,其使用情況以及應(yīng)用程序處理數(shù)據(jù)更新沖突的能力和意愿。在數(shù)據(jù)庫(kù)級(jí)別開啟雙向復(fù)制絕不是一個(gè)簡(jiǎn)單的情況,并且期望應(yīng)用程序?qū)Υ艘粺o(wú)所知。通常,"記錄系統(tǒng)"數(shù)據(jù)存儲(chǔ)區(qū)最難實(shí)現(xiàn),而"會(huì)話狀態(tài)"數(shù)據(jù)存儲(chǔ)區(qū)最容易。因此,Acme可以在許多系統(tǒng)上在數(shù)據(jù)庫(kù)層上實(shí)現(xiàn)AASN,而無(wú)需更改應(yīng)用程序,對(duì)于有些應(yīng)用程序需要更改,而對(duì)于某些應(yīng)用程序則完全不需要。對(duì)于某些類型的系統(tǒng),在數(shù)據(jù)層中也不需要AASN,同時(shí)可以實(shí)現(xiàn)高可用性。

簡(jiǎn)在下表中對(duì)此進(jìn)行了總結(jié):

雙活無(wú)共享數(shù)據(jù)庫(kù)架構(gòu)

 

會(huì)議以緊張的音調(diào)開始;但最后對(duì)問(wèn)題和可能的解決方案有了清晰的理解和贊賞。特德(Ted)非常感謝簡(jiǎn),并宣布休會(huì)。

重要要點(diǎn)

· AASN體系結(jié)構(gòu)意味著數(shù)據(jù)存儲(chǔ)在地理上分布,它們之間沒有共享資產(chǎn),并且每個(gè)數(shù)據(jù)存儲(chǔ)都愿意為本地運(yùn)行的應(yīng)用程序?qū)嵗峁┓?wù)。

· 在大多數(shù)情況下,沒有應(yīng)用程序重構(gòu)就無(wú)法完成AASN數(shù)據(jù)庫(kù)層。

· 數(shù)據(jù)存儲(chǔ)分為以下幾種類型:記錄系統(tǒng),參考系統(tǒng),只讀,靜態(tài)內(nèi)容,緩存和會(huì)話狀態(tài)。

· 并非所有數(shù)據(jù)存儲(chǔ)都具有AASN配置。通常,在上述范圍內(nèi),適合性從左到右從不適合到適合。

· 單個(gè)數(shù)據(jù)元素可能被兩個(gè)不同區(qū)域中的兩個(gè)不同應(yīng)用程序更新,從而導(dǎo)致數(shù)據(jù)沖突。應(yīng)用程序必須意識(shí)到這種可能性。即使重構(gòu)后,并不是所有的應(yīng)用程序都可以處理它。

· 幾乎所有復(fù)制都是異步的,這意味著延遲的更新將覆蓋較新的更新,從而導(dǎo)致數(shù)據(jù)損壞。

· 同步復(fù)制雖然可能,但是非常昂貴,而且通常不切實(shí)際。

· 在某些數(shù)據(jù)庫(kù)技術(shù)中,數(shù)據(jù)存儲(chǔ)并不立即彼此一致,而是最終彼此不一致。這意味著應(yīng)用程序?qū)⒏鶕?jù)連接到的副本獲得不同的數(shù)據(jù)。

 

披露聲明:©2020 Capital One。觀點(diǎn)是個(gè)別作者的觀點(diǎn)。除非本文中另有說(shuō)明,否則Capital One不與任何提及的公司有附屬關(guān)系或認(rèn)可。使用或顯示的所有商標(biāo)和其他知識(shí)產(chǎn)權(quán)均為其各自所有者的財(cái)產(chǎn)。

(本文由聞數(shù)起舞翻譯自Duong Nguyen的文章《Active-Active Shared-Nothing Database Architecture》,轉(zhuǎn)載請(qǐng)注明出處,原文鏈接:https://medium.com/capital-one-tech/active-active-shared-nothing-database-architecture-304957ffb89)

分享到:
標(biāo)簽:架構(gòu) 數(shù)據(jù)庫(kù)
用戶無(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)定