學(xué)AI,好工作 就找北大青鳥
關(guān)注小青 聽課做題,輕松學(xué)習(xí)
周一至周日
4000-9696-28

?終于有一篇文章把“事務(wù)”講清楚了!

來源:北大青鳥總部 2023年05月09日 14:22

摘要: 事務(wù)是一種工作機制,它把一個活動所涉及的其他所有操作都放入一個不可分割的執(zhí)行單元,只有所有的操作都執(zhí)行成功,事務(wù)才算完成,否則整個事務(wù)就不成功,回到原始狀態(tài)。

不知道你是否遇到這樣的場景,去小賣鋪買東西,付了錢,但店主突然有事情需要去處理,等處理回來之后給到你的貨物與你最開始想要買的不一致,或許多了,或許少了,或許拿錯了,甚至是間歇性失憶忘記你曾經(jīng)付過錢反而要求你重新付錢了。

又或是在線購物時,付款成功后可以增加積分,但是個人積分卻沒有任何變動,或者是明明成功付款了,過一會兒店小二聯(lián)系你說沒有庫存了希望你能申請下退款。這所有的事情總結(jié)起來就是某個操作的期望與實際不一致,而這背后的原因就是沒有事務(wù)。

那么事務(wù)是什么呢?事務(wù)是一種工作機制,它把一個活動所涉及的其他所有操作都放入一個不可分割的執(zhí)行單元,只有所有的操作都執(zhí)行成功,事務(wù)才算完成,否則整個事務(wù)就不成功,回到原始狀態(tài)。

有了事務(wù),你去小賣鋪買東西的時候,你付錢、店主給你對應(yīng)的貨品、店主減掉庫存這三個操作都完成后,整個買東西的操作才算完成,如果你沒有付錢或者店主沒有給到你對應(yīng)的貨品,那么這個事務(wù)就算是執(zhí)行失敗,就會回到最初的狀態(tài),錢還是你的錢,貨還是商家的貨,不增不減。

事務(wù)主要使用在數(shù)據(jù)庫場合,有本地事務(wù)、分布式事務(wù)兩種業(yè)態(tài)。

對于數(shù)據(jù)庫本地事務(wù)來說,這個很好理解,因為涉及數(shù)據(jù)的內(nèi)容都會存在數(shù)據(jù)庫里,而數(shù)據(jù)改動中最重要的就是對金錢財產(chǎn)有改動的內(nèi)容,需要通過事務(wù)去保障,不然你付了錢,卻不給你發(fā)貨,你是不是要去找賣家申訴,而平臺老出問題,賣家是不是要去找平臺申訴,環(huán)環(huán)相扣,最終會影響一大波人,因此事務(wù)是非常重要的。

對于分布式事務(wù),這個主要是由于分布式架構(gòu)、微服務(wù)的出現(xiàn)產(chǎn)生的,分布式事務(wù)的一致性也同等重要。

數(shù)據(jù)庫事務(wù)最重要的特點就是ACID,即原子性Atomicity、一致性Consistency、隔離性Isolation、持久性Durability。所謂原子性就是事務(wù)中所涉及的所有操作,是一個最小的不可分割的,要么全部完成,要么全部不完成,如果事務(wù)在執(zhí)行過程中發(fā)生錯誤,則回滾到事務(wù)開始前的狀態(tài),就像你買東西一樣,要么交錢收貨一起完成,否則就不給錢或不發(fā)貨。

所謂一致性就是事務(wù)在執(zhí)行前后數(shù)據(jù)庫內(nèi)容要一致,就像你買東西一樣,買之前商家的售貨額與商品庫存分別是100、1000,在你買之前,所有的人來買東西時商家的售貨額和庫存均是100、1000,你花了50塊錢成功買了100件物品,那么商家的售貨額與庫存變?yōu)?50、900,所有的人來買東西時商家的售貨額和庫存均是150、900,商家的個人數(shù)據(jù)庫始終一致。

所謂隔離性就是在并發(fā)環(huán)境中,不同的食物操作相同的數(shù)據(jù)時,每個事務(wù)獨立執(zhí)行,互不影響,就像你去小賣鋪買東西,并不影響其它人也來小賣鋪買東西,但是你買貨結(jié)賬時的售貨額和庫存一定是個確定值,不會看到中間態(tài)。所謂持久性是指只要事務(wù)成功結(jié)束,那么數(shù)據(jù)庫會更新記錄,即使發(fā)生系統(tǒng)崩潰、重啟數(shù)據(jù)庫系統(tǒng)后,數(shù)據(jù)庫也還能恢復(fù)到事務(wù)成功結(jié)束時的狀態(tài),就像你去小賣鋪買東西,所有的交易記錄老板都記錄在賬本上,即使老板忘記了也還可以查帳本。

隨著互聯(lián)網(wǎng)用戶和流量的劇增,業(yè)務(wù)架構(gòu)模式開始拆分成微服務(wù)、業(yè)務(wù)部署模式變?yōu)榉植际健?/p>

所謂微服務(wù)架構(gòu)就是把原來一體化的應(yīng)用拆分成能獨立完成功能的原子化模塊,比如電商系統(tǒng)服務(wù)可拆分成用戶管理微服務(wù)、商品管理微服務(wù)、訂單管理微服務(wù)、庫存管理微服務(wù)、交易管理微服務(wù)等模塊,原先在一套系統(tǒng)內(nèi)可以完成的付款、減庫存、加訂單的事務(wù)操作現(xiàn)在要分散在交易管理、訂單管理、庫存管理三個子模塊完成,本地事務(wù)變成分布式事務(wù)。所謂分布式部署則是為了容災(zāi)與高可用,將重要的、最常用的服務(wù)多個節(jié)點部署,保障無論何時服務(wù)都能正常響應(yīng),比如將電商系統(tǒng)服務(wù)中的商品管理在北京、上海、杭州、深圳都部署一套,訂單管理、庫存管理、交易管理等部署杭州,當(dāng)用戶在北京發(fā)生一筆交易時,需要杭州的服務(wù)與北京的服務(wù)通信,共同完成任務(wù),從而本地事務(wù)變成分布式事務(wù)。

分布式事務(wù)的產(chǎn)生是必然,那么又如何保障分布式事務(wù)的一致性呢?業(yè)內(nèi)的解法有CAP理論、BASE理論,CAP理論即一致性Consistency、可用性Availability、分區(qū)容錯性Partitiontolerance三者不能共存,要么保障系統(tǒng)的可用性AP、要么保障系統(tǒng)的一致性CP。

這是因為CAP是在分布式部署、微服務(wù)架構(gòu)的情況下提出來的,所以分區(qū)一定存在,如果為了保障數(shù)據(jù)的一致性,那么當(dāng)用戶在北京服務(wù)節(jié)點發(fā)生交易時,杭州的服務(wù)節(jié)點就不能使用,得等到整個交易完成了才能進行,這時候就出現(xiàn)了可用性缺失,如果為了保障系統(tǒng)的可用性,用戶在北京服務(wù)節(jié)點的交易和杭州服務(wù)節(jié)點的數(shù)據(jù)因為存在數(shù)據(jù)傳輸延遲,數(shù)據(jù)必然會不一致,所以一致性和可用性只能二選一。

對于電商平臺來說,因為覆蓋的用戶廣,無論如何都要保障業(yè)務(wù)隨時可用,對于數(shù)據(jù)的準(zhǔn)確性可以接受一定的錯誤,而對于交易系統(tǒng)來說,涉及到用戶財產(chǎn),那是一分一毫都不能少,所以數(shù)據(jù)的一致性非常重要。

BASE理論即基本可用BasicallyAvailable、軟狀態(tài)SoftState、最終一致性EventuallyConsistent,是對于CAP定論中的AP的擴展。所謂基本可用是指分布式系統(tǒng)在出現(xiàn)故障時,允許部分非核心業(yè)務(wù)功能不可用,保障核心功能可用。所謂軟狀態(tài)是指分布式系統(tǒng)中允許存在中間狀態(tài),允許部分出錯。所謂最終一致是指經(jīng)過一段時間后,所有分布式節(jié)點數(shù)據(jù)達(dá)到一致。

分布式事務(wù)是在互聯(lián)網(wǎng)的飛速發(fā)展下應(yīng)運而生。在我們的業(yè)務(wù)系統(tǒng)中究竟采取本地事務(wù)還是分布式事務(wù)應(yīng)當(dāng)視具體情況而定,不能為了分布式而分布式。如果真的必須分布式,那么需要結(jié)合自己的業(yè)務(wù)類型選擇合適的模式,可用性、強一致性、最終一致性都是可行解。


標(biāo)簽: 分布式
熱門班型時間
人工智能就業(yè)班 即將爆滿
AI應(yīng)用線上班 即將爆滿
UI設(shè)計全能班 即將爆滿
數(shù)據(jù)分析綜合班 即將爆滿
軟件開發(fā)全能班 爆滿開班
網(wǎng)絡(luò)安全運營班 爆滿開班
報名優(yōu)惠
免費試聽
課程資料
官方微信
返回頂部
培訓(xùn)課程 熱門話題 站內(nèi)鏈接