給我五塊錢,我給你講講分布式事務

2022-04-23 12:37:24 字數 2197 閱讀 8680

資料庫事務acid:原子性,一致性,永續性,隔離性

分布式:是指在多台不同的伺服器中部署不同的服務模組,通過遠端呼叫協同工作,對外提供服務。

分布式事務:就是需要多個分布式服務同時為了乙個功能實現而協調工作,我們想把這個實現的流程像本地事務那樣,使其具有原子性。一致性。永續性和隔離性,重點在於多個服務間通過網路請求協同完成乙個事務的過程;

我們就舉乙個電商中的乙個下單和減庫存的列子來說明這個分布式事務問題

下單模組負責使用者下單,庫存模組負載增減庫存,兩個分布式服

那麼問題來了,當我們的使用者下單後,怎麼通知庫存模組減去相應庫存呢?這裡的著重點就在下單模組和庫存模組能共協同工作,即我下單了,在訂單資料庫中已經插入了資料,那麼庫存模組必須給我把庫存減了,必須保證這兩個分布式服務的事務一致性

使用者下單完成,下單模組插入訂單資料到訂單表中,本地資料庫事務支撐;

遠端呼叫庫存模組。減去相應庫存數,網路遠端請求可能會出毛病;

訂單模組得到訊息,減去相應商品庫存並插入到資料庫中,本地資料庫事務支撐;

上面流程中1、3都使用spring事務控制,丟擲異常則單個服務回滾資料;

以前寫過,:

copy過來讓我們一起學習,使你這一塊錢花的物超所值;

cap原則:也叫cap定理,指的是在乙個分布式系統中,一致性、可用性、分割槽容錯性三者不可兼得

上面已經說明,分割槽容錯性是分布式系統必須考慮的,此外,當我們想要保證高可用的時候,無非就是增加很多的節點,高可用的確是滿足了,但帶來的問題是,這麼多的節點之間的資料同步是乙個很多的消耗,極其容易造成資料不一致,當我們強調一致性的時候,節點越少,資料同步的消耗就小,但帶來的節點少卻又造成服務的可用性差,所以一致性和可用性是不可兼顧的,他們處於乙個對立面;

ca :不是分布式架構,就使用這種,關聯式資料庫按照ca進行設計 ,放棄分割槽容錯性,因為沒有分割槽呀!!

ap:加強可用性和分割槽容錯性,放棄立即一致性(強一致性),追求最終一致性,比如eureka

cp:強調強一致性和分割槽容錯性,放棄可用性,比如zookeeper,master在宕機後選舉leader期間不提供服務

2pc實現了強一致性,缺點就是事務協調者協調多個庫的事務,事務執行時間拖長,效能底下

解決方案有:springboot+atomikos or bitronix

還是訂單模組和庫存模組舉列:

該模式的優缺點

最終保證資料的一致性,在業務實現事務的控制,靈活性較好

但是開發成本太高,每個事務操作每個參與者都要實現try、confirm、cancel三個介面

此方案也是我想重點闡述的乙個方案,是我寫這篇部落格的乙個重點

該方案是將分布式事務拆分成多個本地事務來完成,並且通過訊息佇列的方式非同步協調完成

訂單服務和庫存服務完成檢查(不重複插入乙個訂單等...)

訂單服務開啟本地事務,寫入訂單表和訊息表(訊息表記載某乙個商品,變動的庫存數)

我們開啟乙個定時任務,使其掃瞄訂單訊息表,一旦有掃到結果,就將結果發給mq

庫存服務監聽mq,開啟本地事務,將相應商品減去庫存,並寫入自己的訊息表(商品id,庫存number)

我們開啟乙個定時任務,使其掃瞄庫存任務表,一旦有掃到結果,就將結果發給mq

訂單服務監聽mq,開啟本地事務,將相應的資料從訂單訊息表中刪除,

非同步的當時完成協調,效能較好,開發成本比tcc低

本地事務支撐,頻繁讀寫資料庫,影響資料庫效能,不是應對高併發的最佳方案,但對於小併發卻是乙個優質的解決方案

可能再次補充...

給我五塊錢,我給你講分布式事務

資料庫事務acid 原子性,一致性,永續性,隔離性 分布式 是指在多台不同的伺服器中部署不同的服務模組,通過遠端呼叫協同工作,對外提供服務。分布式事務 就是需要多個分布式服務同時為了乙個功能實現而協調工作,我們想把這個實現的流程像本地事務那樣,使其具有原子性。一致性。永續性和隔離性,重點在於多個服務...

五塊錢的誤會

希望大家用心來體會文中的含意,想想自己是不是常遇見這種 想說又礙於面子又不好意思說 的情境。有一位影劇界的朋友告訴我乙個生活小插曲。某次錄影,她打 叫了無線電計程車回家,下車時計費表上顯示的是一百八十元,她拿出兩百元給司機,司機默默的收了。以台北市的計費標準,表上加十五元等於車費,她稍微等了一下,以...

缺角的1塊錢

地鐵站出來,斜對面有個約19歲的女孩蹦著朝我走來,我猛的一驚,而後大喜,露 出這個表情,等了26年的桃花運,莫非這個時候要。女孩 你好,先生,能不能幫我買個麵包?我當時走了一天,很累很睏,頭腦一點也不清醒,但也馬上就反應過來了,白高興一場,這種情況我都不知道說什麼好了,要是以前,有女孩問我能不能幫她...