乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      分布式事務(wù)之基本概念

       新進(jìn)小設(shè)計 2020-06-19

      1 基礎(chǔ)概念

      1.1. 什么是事務(wù)

      什么是事務(wù)?舉個生活的例子 :你去小賣部買東西,“一手交錢,一手交貨“就是一個事務(wù)的例子,交錢和交貨必須全部成功,事務(wù)才算成功,任一個活動失敗,事務(wù)將撤銷所有已成功的活動。
      明白上述例子,再來看事務(wù)的定義 :
      事務(wù)可以看做是一次大的活動,它由不同的小活動組成,這些活動要么全部成功,要么全部失敗。

      1.2. 本地事務(wù)

      在計算機(jī)系統(tǒng)中,更多的是通過關(guān)系型數(shù)據(jù)庫來控制事務(wù),這里利用數(shù)據(jù)庫本身的事務(wù)特性來實現(xiàn)的,因此叫數(shù)據(jù)庫事務(wù),由于應(yīng)用主要靠關(guān)系數(shù)據(jù)庫來控制事務(wù),而數(shù)據(jù)庫通常和應(yīng)用在同一個服務(wù)器,所以基于關(guān)系型數(shù)據(jù)庫的事務(wù)又被稱為本地事務(wù)。
      回顧一下數(shù)據(jù)庫事務(wù)的四大特性ACID:
      A(Atomic):原子性,構(gòu)成事務(wù)的所有操作,要么都執(zhí)行完成,要么全部不執(zhí)行,不可能出現(xiàn)部分成功部分失敗的情況。
      C(Consistency):一致性,在事務(wù)執(zhí)行前后,數(shù)據(jù)庫的一致性約束沒有被破壞。比如 :張三向李四轉(zhuǎn)100元,轉(zhuǎn)賬前和轉(zhuǎn)賬后的數(shù)據(jù)是正確狀態(tài)這叫一致性,如果出現(xiàn)張三轉(zhuǎn)出100元,李四賬戶沒有增加100元這就出現(xiàn)來數(shù)據(jù)錯誤,就沒有達(dá)到一致性。
      I(Isolation):隔離性,數(shù)據(jù)庫中的事務(wù)一般都是并發(fā)的,隔離性是指并發(fā)的兩個事務(wù)的執(zhí)行互不干擾,一個事務(wù)不能看到其他事務(wù)運(yùn)行過程的中間狀態(tài)。通過配置事務(wù)隔離級別可以避免贓讀、重復(fù)讀等問題。
      D(Durability):持久性,事務(wù)完成之后,該事務(wù)對數(shù)據(jù)的更改會被持久化到數(shù)據(jù)庫,且不會被回滾。
      數(shù)據(jù)庫事務(wù)在實現(xiàn)時會將一次事務(wù)涉及的操作全部納入到一個不可分割的執(zhí)行單元,該執(zhí)行單元中的所有操作要么都成功,要么都失敗,只要其中任一操作執(zhí)行失敗,都將導(dǎo)致整個事務(wù)的回滾。

      1.3. 分布式事務(wù)

      隨著互聯(lián)網(wǎng)的快速發(fā)展,軟件系統(tǒng)由原來的單體應(yīng)用轉(zhuǎn)變?yōu)榉植际綉?yīng)用,下圖描述來單體應(yīng)用向微服務(wù)的演變:
      在這里插入圖片描述
      分布式系統(tǒng)會把一個應(yīng)用系統(tǒng)拆分為可獨(dú)立部署的多個服務(wù),因此需要服務(wù)與服務(wù)之間遠(yuǎn)程協(xié)作才能完成事務(wù)操作,這種分布式系統(tǒng)環(huán)境下由不同的服務(wù)之間通過網(wǎng)絡(luò)遠(yuǎn)程協(xié)作完成事務(wù)稱之為分布式事務(wù),例如用戶注冊送積分事務(wù)、創(chuàng)建訂單減庫存事務(wù),銀行轉(zhuǎn)賬事務(wù)等都是分布式事務(wù)。
      我們知道本地事務(wù)依賴數(shù)據(jù)庫本身提供的事務(wù)特性來實現(xiàn),因此以下邏輯可以控制本地事務(wù) :

      begin transaction;
      	// 1. 本地數(shù)據(jù)庫操作 :張三減少金額
      	// 2. 本地數(shù)據(jù)庫操作 :李四增加金額
      commit transation;
      

      但是在分布式環(huán)境下,會變成下邊這樣:

      begin transaction;
      	// 1. 本地數(shù)據(jù)庫操作 :張三減少金額
      	// 2. 遠(yuǎn)程調(diào)用 :讓李四增加金額
      commit transation;	
      

      可以設(shè)想,當(dāng)遠(yuǎn)程調(diào)用讓李四增加金額成功來,由于網(wǎng)絡(luò)問題遠(yuǎn)程調(diào)用并沒有返回,此時本地事務(wù)提交失敗的回滾來張三減少金額的操作,此時張三和李四的數(shù)據(jù)就不一致了。
      因此在分布式架構(gòu)的基礎(chǔ)上,傳統(tǒng)數(shù)據(jù)庫事務(wù)就無法使用了,張三和李四的賬戶不在一個數(shù)據(jù)庫中甚至不在一個應(yīng)用系統(tǒng)里,實現(xiàn)轉(zhuǎn)賬事務(wù)需要通過遠(yuǎn)程調(diào)用,由于網(wǎng)絡(luò)問題就會導(dǎo)致分布式事務(wù)問題。

      1.4. 分布式事務(wù)產(chǎn)生的場景

      1、典型的場景就是微服務(wù)架構(gòu),微服務(wù)之間通過遠(yuǎn)程調(diào)用完成事務(wù)操作。比如 :訂單微服務(wù)和庫存微服務(wù),下單的同時訂單微服務(wù)請求庫存微服務(wù)減庫存。簡言之 :跨JVM進(jìn)程產(chǎn)生分布式事務(wù)。
      在這里插入圖片描述
      2、單體系統(tǒng)訪問多個數(shù)據(jù)庫實例,當(dāng)單體系統(tǒng)需要訪問多個數(shù)據(jù)庫(實例)時就會產(chǎn)生分布式事務(wù)。比如:用戶信息和訂單信息分別在兩個MySQL實例存儲,用戶管理系統(tǒng)刪除用戶信息,需要分別刪除用戶信息及用戶的訂單信息,由于數(shù)據(jù)分布在不同的數(shù)據(jù)實例,需要通過不同的數(shù)據(jù)庫鏈接去操作數(shù)據(jù),此時產(chǎn)生分布式事務(wù)。簡言之 :跨數(shù)據(jù)庫實例產(chǎn)生分布式事務(wù)。
      在這里插入圖片描述
      3、多服務(wù)訪問同一個數(shù)據(jù)庫實例,比如 :訂單微服務(wù)和庫存微服務(wù)即使訪問同一個數(shù)據(jù)庫也會產(chǎn)生分布式事務(wù),原因就是跨JVM進(jìn)程,兩個微服務(wù)持有了不同的數(shù)據(jù)庫鏈接進(jìn)行數(shù)據(jù)庫操作,此時產(chǎn)生分布式事務(wù)。
      在這里插入圖片描述

      2. 分布式事務(wù)基礎(chǔ)理論

      我們了解到分布式事務(wù)的基礎(chǔ)概念。與本地事務(wù)不同的是,分布式系統(tǒng)之所以叫分布式,是因為提供服務(wù)的各個節(jié)點(diǎn)分布在不同的機(jī)器上,相互之間通過網(wǎng)絡(luò)交互。不能因為有一點(diǎn)網(wǎng)絡(luò)問題就導(dǎo)致整個系統(tǒng)無法提供服務(wù),網(wǎng)絡(luò)因素成為了分布式事務(wù)的考量標(biāo)準(zhǔn)之一。因此分布式事務(wù)需要更進(jìn)一步的理論支持。
      在了解分布式事務(wù)控制解決方案之前先了解一些基礎(chǔ)理論,通過理論知識指導(dǎo)我們確定分布式事務(wù)控制的目標(biāo),從而幫助我們理解解決方案。

      2.1. CAP理論

      2.1.1. 理解CAP

      CAP是Consistency、Availability、Parition tolerance三個詞語的縮寫,分別表示一致性、可用性、分區(qū)容忍性。
      下邊我們分別來解釋 :
      為了方便對CAP理論的理解,我們結(jié)合電商系統(tǒng)中的一些業(yè)務(wù)場景來理解CAP。
      如下圖,是商品信息管理的執(zhí)行流程 :
      在這里插入圖片描述
      整體執(zhí)行流程如下 :
      1、商品服務(wù)請求主數(shù)據(jù)庫寫入商品信息(添加商品、修改商品、刪除商品)。
      2、主數(shù)據(jù)庫向商品服務(wù)響應(yīng)寫入成功。
      3、商品服務(wù)請求從數(shù)據(jù)庫讀取商品信息。

      C-Consistency :
      一致性是指寫操作后的讀操作可以讀取到最新的數(shù)據(jù)狀態(tài),當(dāng)數(shù)據(jù)分布在多個節(jié)點(diǎn)上,從任意節(jié)點(diǎn)讀取到的數(shù)據(jù)都是最新的狀態(tài)。
      上圖中,商品信息的讀寫要滿足一致性就是要實現(xiàn)如下目標(biāo) :
      1、商品服務(wù)寫入主數(shù)據(jù)庫成功,則向從數(shù)據(jù)庫查詢新數(shù)據(jù)也成功。
      2、商品服務(wù)寫入主數(shù)據(jù)庫失敗,則向從數(shù)據(jù)庫查詢新數(shù)據(jù)也失敗。
      如何實現(xiàn)一致性?
      1、寫入主數(shù)據(jù)庫后要將數(shù)據(jù)同步到從數(shù)據(jù)庫。
      2、寫入主數(shù)據(jù)庫后,在向從數(shù)據(jù)庫同步期間要將從數(shù)據(jù)庫鎖定,待同步完成后再釋放鎖,以免在新數(shù)據(jù)寫入成功后,向從數(shù)據(jù)庫查詢到舊的數(shù)據(jù)。

      分布式系統(tǒng)一致性的特點(diǎn) :
      1、由于存在數(shù)據(jù)同步的過程,寫操作的響應(yīng)會有一定的延遲。
      2、為了保證數(shù)據(jù)一致性會對資源暫時鎖定,待數(shù)據(jù)同步完成釋放鎖定資源。
      3、如果請求數(shù)據(jù)同步失敗的節(jié)點(diǎn)則會返回錯誤信息,一定不會返回舊數(shù)據(jù)。

      A-Availability:
      可用性是指任何事務(wù)操作都可以得到響應(yīng)結(jié)果,且不會出現(xiàn)響應(yīng)超時或響應(yīng)錯誤。
      上圖中,商品信息讀取滿足可用性就是要實現(xiàn)如下目標(biāo) :
      1、從數(shù)據(jù)庫接收到數(shù)據(jù)查詢的請求則立即能夠響應(yīng)數(shù)據(jù)查詢結(jié)果。
      2、從數(shù)據(jù)庫不允許出現(xiàn)響應(yīng)超時或響應(yīng)錯誤。
      如何實現(xiàn)可用性?
      1、寫入主數(shù)據(jù)庫后要將數(shù)據(jù)同步到從數(shù)據(jù)庫。
      2、由于要保證從數(shù)據(jù)庫的可用性,不可將從數(shù)據(jù)庫中的資源進(jìn)行鎖定。
      3、即使數(shù)據(jù)還沒有同步過來,從數(shù)據(jù)庫也要返回要查詢的數(shù)據(jù),哪怕是舊數(shù)據(jù),如果連舊數(shù)據(jù)也沒有則可以按照約定返回一個默認(rèn)信息,但不能返回錯誤或者響應(yīng)超時。

      分布式系統(tǒng)可用性的特點(diǎn) :
      1、所有請求都有響應(yīng),且不會出現(xiàn)響應(yīng)超時或響應(yīng)錯誤。

      P-Partition tolerance :
      通常分布式系統(tǒng)的各個節(jié)點(diǎn)部署在不同的子網(wǎng),這就是網(wǎng)絡(luò)分區(qū),不可避免的會出現(xiàn)由于網(wǎng)絡(luò)問題而導(dǎo)致節(jié)點(diǎn)之間通訊失敗,此時仍可對外提供服務(wù),這叫分區(qū)容忍性。
      上圖中,商品信息讀寫滿足分區(qū)容忍性就是要實現(xiàn)如下目標(biāo) :
      1、主數(shù)據(jù)庫向從數(shù)據(jù)庫同步數(shù)據(jù)失敗不影響讀寫操作。
      2、其一個節(jié)點(diǎn)掛掉不影響另一個節(jié)點(diǎn)對外提供服務(wù)。

      如何實現(xiàn)分區(qū)容忍性?
      1、盡量使用異步取代同步操作,例如使用異步方式將數(shù)據(jù)從主數(shù)據(jù)庫同步到從數(shù)據(jù),這樣節(jié)點(diǎn)之間能有效的實現(xiàn)松耦合。
      2、添加從數(shù)據(jù)庫節(jié)點(diǎn),其中一個從節(jié)點(diǎn)掛掉其它從節(jié)點(diǎn)提供服務(wù)。

      分布式分區(qū)容忍性的特點(diǎn) :
      1、分區(qū)容忍性是分布式系統(tǒng)具備的基本能力。

      2.1.2. CAP組合方式

      1、上邊商品管理的例子是否同時具備CAP呢?
      在所有分布式事務(wù)場景中不會同時具備CAP三特性,因為在具備了P的前提下C和A是不能共存的。
      比如 :
      下圖滿足了P即表示實現(xiàn)分區(qū)容忍 :
      在這里插入圖片描述
      本圖分區(qū)容忍的含義是 :
      1)主數(shù)據(jù)庫通過網(wǎng)絡(luò)向從數(shù)據(jù)同步數(shù)據(jù),可以認(rèn)為主從數(shù)據(jù)庫部署在不同的分區(qū),通過網(wǎng)絡(luò)進(jìn)行交互。
      2)當(dāng)主數(shù)據(jù)庫和從數(shù)據(jù)庫之間的網(wǎng)絡(luò)出現(xiàn)問題不影響主數(shù)據(jù)庫和從數(shù)據(jù)庫對外提供服務(wù)。
      3)其一個節(jié)點(diǎn)掛掉不影響另一個節(jié)點(diǎn)對外提供服務(wù)。
      如果要實現(xiàn)C則必須保證數(shù)據(jù)一致性,在數(shù)據(jù)同步的時候為防止向從數(shù)據(jù)庫查詢不一致的數(shù)據(jù)則需要將從數(shù)據(jù)庫數(shù)據(jù)鎖定,待同步完成后解鎖,如果同步失敗從數(shù)據(jù)庫要返回錯誤信息或超時信息。
      如果要實現(xiàn)A則必須保證數(shù)據(jù)可用性,不管任何時候都可以向從數(shù)據(jù)庫查詢數(shù)據(jù),則不會響應(yīng)超時或返回錯誤信息。
      通過分析發(fā)現(xiàn)在滿足P的前提下C和A存在矛盾性。

      2、CAP有那些組合方式呢?
      在生產(chǎn)中對分布式事務(wù)處理時要根據(jù)需求來確定滿足CAP的那兩個方面。
      1)AP:
      放棄一致性,追求分區(qū)容忍性和可用性。這是很多分布式系統(tǒng)設(shè)計時的選擇。
      例如 :
      上邊的商品管理,完全可以實現(xiàn)AP,前提是只要用戶可以接收所查詢的到數(shù)據(jù)在一定時間內(nèi)不是最新的即可。
      通常實現(xiàn)AP都會保證最終一致性,后面講的BASE理論就是根據(jù)AP來擴(kuò)展的,一些業(yè)務(wù)場景 比如 :訂單退款,今日退款成功,明日賬戶到賬,只要用戶可以接受在一定時間內(nèi)到賬即可。
      2)CP:
      放棄可用性,追求一致性和分區(qū)容錯性,我們的zookeeper其實就是追求的強(qiáng)一致性,又比如跨行轉(zhuǎn)賬,一次轉(zhuǎn)賬請求要等待雙方銀行系統(tǒng)都完成整個事務(wù)才算完成。
      3)CA:
      放棄分區(qū)容忍性,既不進(jìn)行分區(qū),不考慮由于網(wǎng)絡(luò)不通或節(jié)點(diǎn)掛掉的問題,則可以實現(xiàn)一致性和可用性。那么系統(tǒng)將不是一個標(biāo)準(zhǔn)的分布式系統(tǒng),我們最常用的關(guān)系型數(shù)據(jù)就滿足了CA。
      上邊的商品管理,如果要實現(xiàn)CA則架構(gòu)如下 :
      在這里插入圖片描述
      主數(shù)據(jù)庫和從數(shù)據(jù)庫中間不再進(jìn)行數(shù)據(jù)同步,數(shù)據(jù)庫可以響應(yīng)每次的查詢請求,通過事務(wù)隔離級別實現(xiàn)每個查詢請求都可以返回最新的數(shù)據(jù)。

      2.1.3 總結(jié)

      通過上面的學(xué)習(xí),CAP是一個已經(jīng)被證實的理論 :一個分布式系統(tǒng)最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(Partition tolerance)這三項中的兩項。它可以作為我們架構(gòu)設(shè)計、技術(shù)選型的考量標(biāo)準(zhǔn)。對于多數(shù)大型互聯(lián)網(wǎng)應(yīng)用的場景,節(jié)點(diǎn)眾多、部署分散,而且現(xiàn)在的集群規(guī)模越來越大,所以節(jié)點(diǎn)故障、網(wǎng)絡(luò)故障是常態(tài),而且要保證服務(wù)可用性達(dá)到N個9(99.99.%),并要達(dá)到良好的響應(yīng)性能來提高用戶體驗,因此一般都會做出如下選擇 :保證P和A,舍棄C強(qiáng)一致性,保證最終一致性。

      2.2. BASE理論

      1、理解強(qiáng)一致性和最終一致性
      CAP理論告訴我們一個分布式系統(tǒng)最多只能同時滿足一致性(Consistency)、可用性(Availability)和分區(qū)容忍性(Partition tolerance)這三項中的兩項,其中AP在實際應(yīng)用中較多,AP既舍棄一致性,保證可用性和分區(qū)容忍性,但是在實際生產(chǎn)中很多場景都要實現(xiàn)一致性,比如前邊我們舉的例子,AP即舍棄一致性,保證可用性和分區(qū)容忍性,但是在實際產(chǎn)生中很多場景都要實現(xiàn)一致性,比如前邊我們覺得例子主數(shù)據(jù)庫向從數(shù)據(jù)庫同步數(shù)據(jù),即使不要一致性,但是最終也要將數(shù)據(jù)同步成功來保證數(shù)據(jù)一致,這種一致性和CAP中的一致性不同,CAP中的一致性要求在任何時間查詢每個節(jié)點(diǎn)數(shù)據(jù)都必須一致,它強(qiáng)調(diào)的是強(qiáng)一致性,但是最終一致性是允許可以在一段時間內(nèi)每個節(jié)點(diǎn)的數(shù)據(jù)不一致,但是經(jīng)過一段時間每個節(jié)點(diǎn)的數(shù)據(jù)必須一致,它強(qiáng)調(diào)的是最終數(shù)據(jù)的一致性。
      2、Base理論介紹
      BASE是Basically Availbale(基本可用)、Soft state(軟狀態(tài))和Eventually consistent(最終一致性)三個短語的縮寫。BASE理論是對CAP中AP的一個擴(kuò)展,通過犧牲強(qiáng)一致性來獲得可用性,當(dāng)出現(xiàn)故障允許部分不可用但要保證核心功能可用,允許數(shù)據(jù)在一段時間內(nèi)是不一致的,但最終達(dá)到一致狀態(tài)。滿足BASE理論的事務(wù),我們稱之為“柔性事務(wù)”。

      • 基本可用 :分布式系統(tǒng)在出現(xiàn)故障時,允許損失部分可用功能,保證核心功能可用。如電商網(wǎng)址交易付款出現(xiàn)問題來,商品依然可以正常瀏覽。
      • 軟狀態(tài):由于不要求強(qiáng)一致性,所以BASE允許系統(tǒng)中存在中間狀態(tài)(也叫軟狀態(tài)),這個狀態(tài)不影響系統(tǒng)可用性,如訂單中的“支付中”、“數(shù)據(jù)同步中”等狀態(tài),待數(shù)據(jù)最終一致后狀態(tài)改為“成功”狀態(tài)。
      • 最終一致性:最終一致是指的經(jīng)過一段時間后,所有節(jié)點(diǎn)數(shù)據(jù)都將會達(dá)到一致。如訂單的“支付中”狀態(tài),最終會變?yōu)?ldquo;支付成功”或者“支付失敗”,使訂單狀態(tài)與實際交易結(jié)果達(dá)成一致,但需要一定時間的延遲、等待。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多