




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、系統(tǒng)分布式情況下最終一致性方案梳理本文章來自于阿里云云棲社區(qū)摘要: 前言 目前的應(yīng)用系統(tǒng),不管是企業(yè)級應(yīng)用還是互聯(lián)網(wǎng)應(yīng)用,最終數(shù)據(jù)的一致性是每個應(yīng)用系統(tǒng)都要面臨的問題,隨著分布式的逐漸普及,數(shù)據(jù)一致性更加艱難,但是也很難有銀彈的解決方案,也并不是引入特定的中間件或者特定的開源框架能夠解決的,更多的還是看業(yè)務(wù)場景,根據(jù)場景來給出解決方案。前言目前的應(yīng)用系統(tǒng),不管是企業(yè)級應(yīng)用還是互聯(lián)網(wǎng)應(yīng)用,最終數(shù)據(jù)的一致性是每個應(yīng)用系統(tǒng)都要面臨的問題,隨著分布式的逐漸普及,數(shù)據(jù)一致性更加艱難,但是也很難有銀彈的解決方案,也并不是引入特定的中間件或者特定的開源框架能夠解決的,更多的還是看業(yè)務(wù)場景,根據(jù)場景
2、來給出解決方案。根據(jù)筆者最近幾年的了解,總結(jié)了幾個點,更多的應(yīng)用系統(tǒng)在編碼的時候,更加關(guān)注數(shù)據(jù)的一致性,這樣系統(tǒng)才是健壯的。基礎(chǔ)理論相關(guān)說起事務(wù),目前的幾個理論,ACID事務(wù)特性,CAP分布式理論,以及BASE等,ACID在數(shù)據(jù)庫事務(wù)中體現(xiàn),CAP和BASE則是分布式事務(wù)的理論,結(jié)合業(yè)務(wù)系統(tǒng),例如訂單管理,例如倉儲管理等,可以借鑒這些理論,從而解決問題。· ACID 特性o A(原子性)事務(wù)的原子操作單元,對數(shù)據(jù)的修改,要么全部執(zhí)行,要么全部不執(zhí)行;o C(一致性)在事務(wù)開始和完成時,數(shù)據(jù)必須保持一致狀態(tài),相關(guān)的數(shù)據(jù)規(guī)則必須應(yīng)用于事務(wù)的修改,以保證數(shù)據(jù)的完整性,事務(wù)結(jié)束時,所有的內(nèi)部
3、數(shù)據(jù)結(jié)構(gòu)必須正確;o I(隔離性)保證事務(wù)不受外部并發(fā)操作的獨立環(huán)境執(zhí)行;o D(持久性)事務(wù)完成之后,對于數(shù)據(jù)的修改是永久的,即使系統(tǒng)出現(xiàn)故障也能夠保持;· CAPo C(一致性)一致性是指數(shù)據(jù)的原子性,在經(jīng)典的數(shù)據(jù)庫中通過事務(wù)來保障,事務(wù)完成時,無論成功或回滾,數(shù)據(jù)都會處于一致的狀態(tài),在分布式環(huán)境下,一致性是指多個節(jié)點數(shù)據(jù)是否一致;o A(可用性)服務(wù)一直保持可用的狀態(tài),當用戶發(fā)出一個請求,服務(wù)能在一定的時間內(nèi)返回結(jié)果;o P(分區(qū)容忍性)在分布式應(yīng)用中,可能因為一些分布式的原因?qū)е孪到y(tǒng)無法運轉(zhuǎn),好的分區(qū)容忍性,使應(yīng)用雖然是一個分布式系統(tǒng),但是好像一個可以正常運轉(zhuǎn)的整體·
4、; BASEo BA: Basic Availability 基本業(yè)務(wù)可用性;o S: Soft state 柔性狀態(tài);o E: Eventual consistency 最終一致性;最終一致性的幾種做法單數(shù)據(jù)庫情況下的事務(wù)如果應(yīng)用系統(tǒng)是單一的數(shù)據(jù)庫,那么這個很好保證,利用數(shù)據(jù)庫的事務(wù)特性來滿足事務(wù)的一致性,這時候的一致性是強一致性的。對于java應(yīng)用系統(tǒng)來講,很少直接通過事務(wù)的start和commit以及rollback來硬編碼,大多通過spring的事務(wù)模板或者聲明式事務(wù)來保證?;谑聞?wù)型消息隊列的最終一致性借助消息隊列,在處理業(yè)務(wù)邏輯的地方,發(fā)送消息,業(yè)務(wù)邏輯處理成功后,提交消息,確保消
5、息是發(fā)送成功的,之后消息隊列投遞來進行處理,如果成功,則結(jié)束,如果沒有成功,則重試,直到成功,不過僅僅適用業(yè)務(wù)邏輯中,第一階段成功,第二階段必須成功的場景。對應(yīng)上圖中的C流程。基于消息隊列+定時補償機制的最終一致性前面部分和上面基于事務(wù)型消息的隊列,不同的是,第二階段重試的地方,不再是消息中間件自身的重試邏輯了,而是單獨的補償任務(wù)機制。其實在大多數(shù)的邏輯中,第二階段失敗的概率比較小,所以單獨獨立補償任務(wù)表出來,可以更加清晰,能夠比較明確的直到當前多少任務(wù)是失敗的。對應(yīng)上圖的E流程。業(yè)務(wù)系統(tǒng)業(yè)務(wù)邏輯的commit/rollback機制這一點說的話確實不難,commit和rollback是數(shù)據(jù)庫事
6、務(wù)中的比較典型的概念,但是在系統(tǒng)分布式情況下,需要業(yè)務(wù)代碼中實現(xiàn)這種,成功了commit,失敗了rollback。業(yè)務(wù)應(yīng)用系統(tǒng)的冪等性控制為啥要做冪等呢? 原因很簡單,在系統(tǒng)調(diào)用沒有達到期望的結(jié)果后,會重試。那重試就會面臨問題,重試之后不能給業(yè)務(wù)邏輯帶來影響,例如創(chuàng)建訂單,第一次調(diào)用超時了,但是調(diào)用的系統(tǒng)不知道超時了是成功了還是失敗了,然后他就重試,但是實際上第一次調(diào)用訂單創(chuàng)建是成功了的,這時候重試了,顯然不能再創(chuàng)建訂單了。· 查詢查詢的API,可以說是天然的冪等性,因為你查詢一次和查詢兩次,對于系統(tǒng)來講,沒有任何數(shù)據(jù)的變更,所以,查詢一次和查詢多次一樣的。· MVCC方案
7、多版本并發(fā)控制,update with condition,更新帶條件,這也是在系統(tǒng)設(shè)計的時候,合理的選擇樂觀鎖,通過version或者其他條件,來做樂觀鎖,這樣保證更新及時在并發(fā)的情況下,也不會有太大的問題。例如update table_xxx set name=#name#,version=version+1 where version=#version# ,或者是 update table_xxx set quality=quality-#subQuality# where quality-#subQuality# >= 0 。· 單獨的去重表如果涉及到的去重的地方特別多
8、,例如ERP系統(tǒng)中有各種各樣的業(yè)務(wù)單據(jù),每一種業(yè)務(wù)單據(jù)都需要去重,這時候,可以單獨搞一張去重表,在插入數(shù)據(jù)的時候,插入去重表,利用數(shù)據(jù)庫的唯一索引特性,保證唯一的邏輯。· 分布式鎖還是拿插入數(shù)據(jù)的例子,如果是分布是系統(tǒng),構(gòu)建唯一索引比較困難,例如唯一性的字段沒法確定,這時候可以引入分布式鎖,通過第三方的系統(tǒng),在業(yè)務(wù)系統(tǒng)插入數(shù)據(jù)或者更新數(shù)據(jù),獲取分布式鎖,然后做操作,之后釋放鎖,這樣其實是把多線程并發(fā)的鎖的思路,引入多多個系統(tǒng),也就是分布式系統(tǒng)中得解決思路。· 刪除數(shù)據(jù)刪除數(shù)據(jù),僅僅第一次刪除是真正的操作數(shù)據(jù),第二次甚至第三次刪除,直接返回成功,這樣保證了冪等。·
9、插入數(shù)據(jù)的唯一索引插入數(shù)據(jù)的唯一性,可以通過業(yè)務(wù)主鍵來進行約束,例如一個特定的業(yè)務(wù)場景,三個字段肯定確定唯一性,那么,可以在數(shù)據(jù)庫表添加唯一索引來進行標示。· API層面的冪等這里有一個場景,API層面的冪等,例如提交數(shù)據(jù),如何控制重復(fù)提交,這里可以在提交數(shù)據(jù)的form表單或者客戶端軟件,增加一個唯一標示,然后服務(wù)端,根據(jù)這個UUID來進行去重,這樣就能比較好的做到API層面的唯一標示。· 狀態(tài)機冪等在設(shè)計單據(jù)相關(guān)的業(yè)務(wù),或者是任務(wù)相關(guān)的業(yè)務(wù),肯定會涉及到狀態(tài)機,就是業(yè)務(wù)單據(jù)上面有個狀態(tài),狀態(tài)在不同的情況下會發(fā)生變更,一般情況下存在有限狀態(tài)機,這時候,如果狀態(tài)機已經(jīng)處于下一
10、個狀態(tài),這時候來了一個上一個狀態(tài)的變更,理論上是不能夠變更的,這樣的話,保證了有限狀態(tài)機的冪等。異步回調(diào)機制的引入A應(yīng)用調(diào)用B,在同步調(diào)用的返回結(jié)果中,B返回成功給到A,一般情況下,這時候就結(jié)束了,其實在99.99%的情況是沒問題的,但是有時候為了確保100%,記住最起碼在系統(tǒng)設(shè)計中100%,這時候B系統(tǒng)再回調(diào)A一下,告訴A,你調(diào)用我的邏輯,確實成功了。其實這個邏輯,非常類似TCP協(xié)議中的三次握手。上圖中的B流程。類似double check機制的確認機制還是上圖中異步回調(diào)的過程,A在同步調(diào)用B,B返回成功了。這次調(diào)用結(jié)束了,但是A為了確保,在過一段時間,這個時間可以是幾秒,也可以是每天定時處理,再調(diào)用B一次,查
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安徽省合肥市高中化學(xué) 第四章 非金屬及其化合物 第二節(jié) 富集在海水中的元素-氯教學(xué)實錄 新人教版必修1
- 人教版(PEP)四年級英語上冊教學(xué)工作計劃(含進度表)
- 新教材高中政治 6.1 人的認識從何而來教學(xué)實錄1 新人教版必修4
- mosfet在功率器件的應(yīng)用
- 勞務(wù)分包合同和護坡鉆洞勞務(wù)合同
- 2025年能源大數(shù)據(jù)合作協(xié)議書
- 主管年度工作計劃的團隊建設(shè)技巧
- 學(xué)期調(diào)查與需求分析計劃
- 成長足跡幼兒園教學(xué)工作計劃文檔
- 學(xué)生心理健康教育安排計劃
- DB44/T 1047-2012 物業(yè)服務(wù) 清潔檢查規(guī)范
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗人員理論考試題庫及答案
- 駱駝祥子 第一到三章讀后感
- 初三語文校本研修計劃(10篇)
- 《無機化學(xué)》課件-第五章 p區(qū)元素
- 高中化學(xué)-離子反應(yīng)教學(xué)設(shè)計學(xué)情分析教材分析課后反思
- 2024(新增)異常工況安全處置管理制度
- Unit2 Special days 單元整體教學(xué)設(shè)計(1.2) 人教版新起點(一年級起點)五年級下冊
- 內(nèi)審員培訓(xùn)班考核試題
- 五十六個民族之德昂族介紹
- 介紹人提成協(xié)議合同書
評論
0/150
提交評論