




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、系統(tǒng)分布式情況下最終一致性方案梳理本文章來(lái)自于阿里云云棲社區(qū)摘要:前言 目前的應(yīng)用系統(tǒng),不管是企業(yè)級(jí)應(yīng)用還是互聯(lián)網(wǎng)應(yīng)用,最終數(shù)據(jù)的一致性是每個(gè)應(yīng)用系統(tǒng)都要面臨的問(wèn)題,隨著分布式的逐漸普及,數(shù)據(jù)一致性更加艱難,但是也很難有銀彈的解決方案,也并不是引入特定的中間件或者特定的開源框架能夠解決的,更多的還是看業(yè)務(wù)場(chǎng)景,根據(jù)場(chǎng)景來(lái)給出解決方案。前言目前的應(yīng)用系統(tǒng),不管是企業(yè)級(jí)應(yīng)用還是互聯(lián)網(wǎng)應(yīng)用,最終數(shù)據(jù)的一致性是每個(gè)應(yīng)用系統(tǒng)都要面臨的問(wèn)題,隨著分布式的逐漸普及,數(shù)據(jù)一致性更加艱難,但是也很難有銀彈的解決方案,也并不是引入特定的中間件或者特定的開源框架能夠解決的,更多的還是看業(yè)務(wù)場(chǎng)景,根據(jù)場(chǎng)景來(lái)給出解決方
2、案。根據(jù)筆者最近幾年的了解,總結(jié)了幾個(gè)點(diǎn),更多的應(yīng)用系統(tǒng)在編碼的時(shí)候,更加關(guān)注數(shù)據(jù)的一致性,這樣系統(tǒng)才是健壯的?;A(chǔ)理論相關(guān)說(shuō)起事務(wù),目前的幾個(gè)理論,ACID事務(wù)特性,CAP分布式理論,以及BASE等,ACID在數(shù)據(jù)庫(kù)事務(wù)中體現(xiàn),CAP和BASE則是分布式事務(wù)的理論,結(jié)合業(yè)務(wù)系統(tǒng),例如訂單管理,例如倉(cāng)儲(chǔ)管理等,可以借鑒這些理論,從而解決問(wèn)題。 ACID 特性o A(原子性)事務(wù)的原子操作單元,對(duì)數(shù)據(jù)的修改,要么全部執(zhí)行,要么全部不執(zhí)行;o C(一致性)在事務(wù)開始和完成時(shí),數(shù)據(jù)必須保持一致?tīng)顟B(tài),相關(guān)的數(shù)據(jù)規(guī)則必須應(yīng)用于事務(wù)的修改,以保證數(shù)據(jù)的完整性,事務(wù)結(jié)束時(shí),所有的內(nèi)部數(shù)據(jù)結(jié)構(gòu)必須正確;o I
3、(隔離性)保證事務(wù)不受外部并發(fā)操作的獨(dú)立環(huán)境執(zhí)行;o D(持久性)事務(wù)完成之后,對(duì)于數(shù)據(jù)的修改是永久的,即使系統(tǒng)出現(xiàn)故障也能夠保持; CAPo C(一致性)一致性是指數(shù)據(jù)的原子性,在經(jīng)典的數(shù)據(jù)庫(kù)中通過(guò)事務(wù)來(lái)保障,事務(wù)完成時(shí),無(wú)論成功或回滾,數(shù)據(jù)都會(huì)處于一致的狀態(tài),在分布式環(huán)境下,一致性是指多個(gè)節(jié)點(diǎn)數(shù)據(jù)是否一致;o A(可用性)服務(wù)一直保持可用的狀態(tài),當(dāng)用戶發(fā)出一個(gè)請(qǐng)求,服務(wù)能在一定的時(shí)間內(nèi)返回結(jié)果;o P(分區(qū)容忍性)在分布式應(yīng)用中,可能因?yàn)橐恍┓植际降脑驅(qū)е孪到y(tǒng)無(wú)法運(yùn)轉(zhuǎn),好的分區(qū)容忍性,使應(yīng)用雖然是一個(gè)分布式系統(tǒng),但是好像一個(gè)可以正常運(yùn)轉(zhuǎn)的整體 BASEo BA: Basic Availa
4、bility 基本業(yè)務(wù)可用性;o S: Soft state 柔性狀態(tài);o E: Eventual consistency 最終一致性;最終一致性的幾種做法單數(shù)據(jù)庫(kù)情況下的事務(wù)如果應(yīng)用系統(tǒng)是單一的數(shù)據(jù)庫(kù),那么這個(gè)很好保證,利用數(shù)據(jù)庫(kù)的事務(wù)特性來(lái)滿足事務(wù)的一致性,這時(shí)候的一致性是強(qiáng)一致性的。對(duì)于java應(yīng)用系統(tǒng)來(lái)講,很少直接通過(guò)事務(wù)的start和commit以及rollback來(lái)硬編碼,大多通過(guò)spring的事務(wù)模板或者聲明式事務(wù)來(lái)保證?;谑聞?wù)型消息隊(duì)列的最終一致性借助消息隊(duì)列,在處理業(yè)務(wù)邏輯的地方,發(fā)送消息,業(yè)務(wù)邏輯處理成功后,提交消息,確保消息是發(fā)送成功的,之后消息隊(duì)列投遞來(lái)進(jìn)行處理,如果
5、成功,則結(jié)束,如果沒(méi)有成功,則重試,直到成功,不過(guò)僅僅適用業(yè)務(wù)邏輯中,第一階段成功,第二階段必須成功的場(chǎng)景。對(duì)應(yīng)上圖中的C流程?;谙㈥?duì)列+定時(shí)補(bǔ)償機(jī)制的最終一致性前面部分和上面基于事務(wù)型消息的隊(duì)列,不同的是,第二階段重試的地方,不再是消息中間件自身的重試邏輯了,而是單獨(dú)的補(bǔ)償任務(wù)機(jī)制。其實(shí)在大多數(shù)的邏輯中,第二階段失敗的概率比較小,所以單獨(dú)獨(dú)立補(bǔ)償任務(wù)表出來(lái),可以更加清晰,能夠比較明確的直到當(dāng)前多少任務(wù)是失敗的。對(duì)應(yīng)上圖的E流程。業(yè)務(wù)系統(tǒng)業(yè)務(wù)邏輯的commit/rollback機(jī)制這一點(diǎn)說(shuō)的話確實(shí)不難,commit和rollback是數(shù)據(jù)庫(kù)事務(wù)中的比較典型的概念,但是在系統(tǒng)分布式情況下,需
6、要業(yè)務(wù)代碼中實(shí)現(xiàn)這種,成功了commit,失敗了rollback。業(yè)務(wù)應(yīng)用系統(tǒng)的冪等性控制為啥要做冪等呢? 原因很簡(jiǎn)單,在系統(tǒng)調(diào)用沒(méi)有達(dá)到期望的結(jié)果后,會(huì)重試。那重試就會(huì)面臨問(wèn)題,重試之后不能給業(yè)務(wù)邏輯帶來(lái)影響,例如創(chuàng)建訂單,第一次調(diào)用超時(shí)了,但是調(diào)用的系統(tǒng)不知道超時(shí)了是成功了還是失敗了,然后他就重試,但是實(shí)際上第一次調(diào)用訂單創(chuàng)建是成功了的,這時(shí)候重試了,顯然不能再創(chuàng)建訂單了。 查詢查詢的API,可以說(shuō)是天然的冪等性,因?yàn)槟悴樵円淮魏筒樵儍纱?,?duì)于系統(tǒng)來(lái)講,沒(méi)有任何數(shù)據(jù)的變更,所以,查詢一次和查詢多次一樣的。 MVCC方案多版本并發(fā)控制,update with condition,更新帶條件,
7、這也是在系統(tǒng)設(shè)計(jì)的時(shí)候,合理的選擇樂(lè)觀鎖,通過(guò)version或者其他條件,來(lái)做樂(lè)觀鎖,這樣保證更新及時(shí)在并發(fā)的情況下,也不會(huì)有太大的問(wèn)題。例如update table_xxx set name=#name#,version=version+1 where version=#version# ,或者是 update table_xxx set quality=quality-#subQuality# where quality-#subQuality# = 0 。 單獨(dú)的去重表如果涉及到的去重的地方特別多,例如ERP系統(tǒng)中有各種各樣的業(yè)務(wù)單據(jù),每一種業(yè)務(wù)單據(jù)都需要去重,這時(shí)候,可以單獨(dú)搞一張去重
8、表,在插入數(shù)據(jù)的時(shí)候,插入去重表,利用數(shù)據(jù)庫(kù)的唯一索引特性,保證唯一的邏輯。 分布式鎖還是拿插入數(shù)據(jù)的例子,如果是分布是系統(tǒng),構(gòu)建唯一索引比較困難,例如唯一性的字段沒(méi)法確定,這時(shí)候可以引入分布式鎖,通過(guò)第三方的系統(tǒng),在業(yè)務(wù)系統(tǒng)插入數(shù)據(jù)或者更新數(shù)據(jù),獲取分布式鎖,然后做操作,之后釋放鎖,這樣其實(shí)是把多線程并發(fā)的鎖的思路,引入多多個(gè)系統(tǒng),也就是分布式系統(tǒng)中得解決思路。 刪除數(shù)據(jù)刪除數(shù)據(jù),僅僅第一次刪除是真正的操作數(shù)據(jù),第二次甚至第三次刪除,直接返回成功,這樣保證了冪等。 插入數(shù)據(jù)的唯一索引插入數(shù)據(jù)的唯一性,可以通過(guò)業(yè)務(wù)主鍵來(lái)進(jìn)行約束,例如一個(gè)特定的業(yè)務(wù)場(chǎng)景,三個(gè)字段肯定確定唯一性,那么,可以在數(shù)據(jù)
9、庫(kù)表添加唯一索引來(lái)進(jìn)行標(biāo)示。 API層面的冪等這里有一個(gè)場(chǎng)景,API層面的冪等,例如提交數(shù)據(jù),如何控制重復(fù)提交,這里可以在提交數(shù)據(jù)的form表單或者客戶端軟件,增加一個(gè)唯一標(biāo)示,然后服務(wù)端,根據(jù)這個(gè)UUID來(lái)進(jìn)行去重,這樣就能比較好的做到API層面的唯一標(biāo)示。 狀態(tài)機(jī)冪等在設(shè)計(jì)單據(jù)相關(guān)的業(yè)務(wù),或者是任務(wù)相關(guān)的業(yè)務(wù),肯定會(huì)涉及到狀態(tài)機(jī),就是業(yè)務(wù)單據(jù)上面有個(gè)狀態(tài),狀態(tài)在不同的情況下會(huì)發(fā)生變更,一般情況下存在有限狀態(tài)機(jī),這時(shí)候,如果狀態(tài)機(jī)已經(jīng)處于下一個(gè)狀態(tài),這時(shí)候來(lái)了一個(gè)上一個(gè)狀態(tài)的變更,理論上是不能夠變更的,這樣的話,保證了有限狀態(tài)機(jī)的冪等。異步回調(diào)機(jī)制的引入A應(yīng)用調(diào)用B,在同步調(diào)用的返回結(jié)果中,B返回成功給到A,一般情況下,這時(shí)候就結(jié)束了,其實(shí)在99.99%的情況是沒(méi)問(wèn)題的,但是有時(shí)候?yàn)榱舜_保100%,記住最起碼在系統(tǒng)設(shè)計(jì)中100%,這時(shí)候B系統(tǒng)再回調(diào)A一下,告訴A,你調(diào)用我的邏輯,確實(shí)成功了。其實(shí)這個(gè)邏輯,非常類似TCP協(xié)議中的三次握手。上圖中的B流程。類似double check機(jī)制的確認(rèn)機(jī)制還是上圖中異步回調(diào)的過(guò)程,A在同步調(diào)用B,B返回成功了。這次調(diào)用結(jié)束了,但是A為了確保,在過(guò)一段時(shí)間,這個(gè)時(shí)間可以是幾秒,也可以是每天定時(shí)處理
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 離婚財(cái)產(chǎn)分割協(xié)議書范本含知識(shí)產(chǎn)權(quán)轉(zhuǎn)讓
- 藥廠藥渣處置方案
- 國(guó)際品牌代理分銷權(quán)授權(quán)協(xié)議書
- 部門激勵(lì)方案獎(jiǎng)罰制度
- 鋼鐵企業(yè)倉(cāng)儲(chǔ)倉(cāng)單質(zhì)押融資擔(dān)保合同
- 房貸合同編號(hào)查詢及貸款流程規(guī)范合同
- 水產(chǎn)養(yǎng)殖管理方案
- 黨課宣傳思想課件
- 煉鋼企業(yè)原料采購(gòu)方案
- 視聽(tīng)語(yǔ)言考試題及答案
- 2025年個(gè)人資產(chǎn)出售與收購(gòu)協(xié)議書
- 2024建筑光伏一體化應(yīng)用技術(shù)規(guī)程
- 2025年度人力資源居間費(fèi)合同范本:人才招聘中介服務(wù)協(xié)議
- 污水處理廠設(shè)計(jì)中的安全措施與管理
- 血小板制備純度提升策略-洞察分析
- 2025年度文化旅游區(qū)景區(qū)管理費(fèi)收取與運(yùn)營(yíng)合同3篇
- 環(huán)境衛(wèi)生管理方案
- 中國(guó)居民投資理財(cái)行為調(diào)研報(bào)告2024-高金智庫(kù)x螞蟻理財(cái)智庫(kù)-202412
- 投資咨詢業(yè)可持續(xù)發(fā)展策略-洞察分析
- 天立中學(xué)招生測(cè)試卷
- 電影《白日夢(mèng)想家》課件
評(píng)論
0/150
提交評(píng)論