事務的具體定義
事務提供一種機制將一個活動涉及的所有操作納入到一個不可分割的執(zhí)行單元类垦,組成事務的所有操作只有在所有操作均能正常執(zhí)行的情況下方能提交狈邑,只要其中任一操作執(zhí)行失敗,都將導致整個事務的回滾蚤认。簡單地說米苹,事務提供一種“要么什么都不做,要么做全套(All or Nothing)”機制
數(shù)據(jù)庫本地事務
說到數(shù)據(jù)庫事務就不得不說砰琢,數(shù)據(jù)庫事務中的四大特性蘸嘶,ACID
A:原子性(Atomicity)
一個事務(transaction)中的所有操作,要么全部完成陪汽,要么全部不完成训唱,不會結束在中間某個環(huán)節(jié)。事務在執(zhí)行過程中發(fā)生錯誤挚冤,會被回滾(Rollback)到事務開始前的狀態(tài)况增,就像這個事務從來沒有執(zhí)行過一樣。
就像你買東西要么交錢收貨一起都執(zhí)行训挡,要么要是發(fā)不出貨澳骤,就退錢。
C:一致性(Consistency)
事務的一致性指的是在一個事務執(zhí)行之前和執(zhí)行之后數(shù)據(jù)庫都必須處于一致性狀態(tài)澜薄。如果事務成功地完成为肮,那么系統(tǒng)中所有變化將正確地應用,系統(tǒng)處于有效狀態(tài)肤京。如果在事務中出現(xiàn)錯誤弥锄,那么系統(tǒng)中的所有變化將自動地回滾,系統(tǒng)返回到原始狀態(tài)。
I:隔離性(Isolation)
指的是在并發(fā)環(huán)境中籽暇,當不同的事務同時操縱相同的數(shù)據(jù)時,每個事務都有各自的完整數(shù)據(jù)空間饭庞。由并發(fā)事務所做的修改必須與任何其他并發(fā)事務所做的修改隔離戒悠。事務查看數(shù)據(jù)更新時,數(shù)據(jù)所處的狀態(tài)要么是另一事務修改它之前的狀態(tài)舟山,要么是另一事務修改它之后的狀態(tài)绸狐,事務不會查看到中間狀態(tài)的數(shù)據(jù)。
打個比方累盗,你買東西這個事情寒矿,是不影響其他人的
D:持久性(Durability)
指的是只要事務成功結束,它對數(shù)據(jù)庫所做的更新就必須永久保存下來若债。即使發(fā)生系統(tǒng)崩潰符相,重新啟動數(shù)據(jù)庫系統(tǒng)后,數(shù)據(jù)庫還能恢復到事務成功結束時的狀態(tài)蠢琳。
打個比方啊终,你買東西的時候需要記錄在賬本上,即使老板忘記了那也有據(jù)可查傲须。
簡單而言蓝牲,ACID是從不同維度描述事務的特性:
- 原子性 —— 事務操作的整體性
- 一致性 —— 事務操作下數(shù)據(jù)的正確性
- 隔離性 —— 事務并發(fā)操作下數(shù)據(jù)的正確性
- 持久性 —— 事務對數(shù)據(jù)修改的可靠性
一個支持事務(Transaction)的數(shù)據(jù)庫,需要具有這4種特性泰讽,否則在事務過程當中無法保證數(shù)據(jù)的正確性例衍,處理結果極可能達不到請求方的要求。
什么時候使用數(shù)據(jù)庫事務
在介紹完事務基本概念之后已卸,什么時候該使用數(shù)據(jù)庫事務佛玄?
簡單而言,就是業(yè)務上有一組數(shù)據(jù)操作咬最,需要如果其中有任何一個操作執(zhí)行失敗翎嫡,整組操作全部不執(zhí)行并恢復到未執(zhí)行狀態(tài),要么全部成功永乌,要么全部失敗惑申。
在使用數(shù)據(jù)庫事務時需要注意,盡可能短的保持事務翅雏,修改多個不同表的數(shù)據(jù)的冗長事務會嚴重妨礙系統(tǒng)中的所有其他用戶圈驼,這很有可能導致一些性能問題。
什么是分布式事務
分布式產生背景與概念
隨著互聯(lián)網(wǎng)快速發(fā)展望几,微服務绩脆,SOA等服務架構模式正在被大規(guī)模的使用,現(xiàn)在分布式系統(tǒng)一般由多個獨立的子系統(tǒng)組成,多個子系統(tǒng)通過網(wǎng)絡通信互相協(xié)作配合完成各個功能靴迫。
有很多用例會跨多個子系統(tǒng)才能完成惕味,比較典型的是電子商務網(wǎng)站的下單支付流程,至少會涉及交易系統(tǒng)和支付系統(tǒng)玉锌,而且這個過程中會涉及到事務的概念名挥,即保證交易系統(tǒng)和支付系統(tǒng)的數(shù)據(jù)一致性,此處我們稱這種**跨系統(tǒng)的事務為分布式事務**主守,具體一點而言禀倔,分布式事務是指事務的參與者、支持事務的服務器参淫、資源服務器以及事務管理器分別位于不同的分布式系統(tǒng)的不同節(jié)點之上救湖。
舉個互聯(lián)網(wǎng)常用的交易業(yè)務為例:
上圖中包含了庫存和訂單兩個獨立的微服務,每個微服務維護了自己的數(shù)據(jù)庫涎才。在交易系統(tǒng)的業(yè)務邏輯中鞋既,一個商品在下單之前需要先調用庫存服務,進行扣除庫存憔维,再調用訂單服務涛救,創(chuàng)建訂單記錄。
可以看到业扒,如果多個數(shù)據(jù)庫之間的數(shù)據(jù)更新沒有保證事務检吆,將會導致出現(xiàn)子系統(tǒng)數(shù)據(jù)不一致,業(yè)務出現(xiàn)問題程储。
分布式事務的難點
事務的原子性
事務操作跨不同節(jié)點蹭沛,當多個節(jié)點某一節(jié)點操作失敗時,需要保證多節(jié)點操作的**要么什么都不做章鲤,要么做全套(All or Nothing)**的原子性摊灭。
事務的一致性
當發(fā)生網(wǎng)絡傳輸故障或者節(jié)點故障,節(jié)點間數(shù)據(jù)復制通道中斷败徊,在進行事務操作時需要保證數(shù)據(jù)一致性帚呼,保證事務的任何操作都不會使得數(shù)據(jù)違反數(shù)據(jù)庫定義的約束、觸發(fā)器等規(guī)則皱蹦。
事務的隔離性
事務隔離性的本質就是如何正確多個并發(fā)事務的處理的讀寫沖突和寫寫沖突煤杀,因為在分布式事務控制中,可能會出現(xiàn)提交不同步的現(xiàn)象沪哺,這個時候就有可能出現(xiàn)“部分已經提交”的事務沈自。此時并發(fā)應用訪問數(shù)據(jù)如果沒有加以控制,有可能出現(xiàn)“臟讀”問題辜妓。
本文由
傳智教育博學谷狂野架構師
教研團隊發(fā)布枯途。如果本文對您有幫助忌怎,歡迎
關注
和點贊
;如果您有任何建議也可留言評論
或私信
酪夷,您的支持是我堅持創(chuàng)作的動力榴啸。轉載請注明出處!