分布式事務

2021-10-03 07:37:46 字數 1485 閱讀 7102

和undo log相反,redo log記錄的是新資料的備份,在事務提交前,只要將redo log持久化即可,不需要將資料持久化

當系統崩潰時,雖然資料沒有持久化,但是redo log已經持久化。系統可以根據redo log的內容,將所有資料恢復到最新的狀態。

分布式事務:

定義:事務的參與者支援事務的伺服器,資源伺服器以及事務管理器分別位於不同的分布式系統的不同節點上

分布式事務產生的原因:

從上面本地事務來看,我們可以分為兩塊:

service產生多個節點

resource產生多個節點

分布式事務的基礎:

cap理論:

c(一致性):對某個指定的客戶端來說,讀操作返回最新的寫操作

對於資料分布在不同節點上的資料來說,如果在某個節點上更新了資料,那麼在其他節點如果能夠讀取到這個節點的資料,那麼就稱為強一致,如果某個節點沒有讀取到,那就是分布式不一致。

a(可用性):非故障節點在合理的時間內返回合理的響應(不是錯誤和超時的響應)。可用性的兩個關鍵乙個是合理的時間,乙個是合理的響應

合理的時間指的是請求不能***被阻塞,應該在合理的時間給出返回。合理的響應指的是系統應該明確返回結果並且結果是正確的,這裡的正確指的是比如應該返回 50,而不是返回 40。

p(分割槽容錯性):

當出現網路分割槽後,系統能夠繼續工作。打個比方,這裡集群有多台機器,有台機器出現了問題,但是這個集群仍然可以正常工作

分布式事務的解決方案:

在這裡我這只是介紹乙個我們常用的乙個方案:

採用ebay的建立本地訊息表:

此方案的核心是將需要分布式處理的任務通過訊息日誌的方式來非同步執行,訊息日誌可以儲存到本地檔案,資料庫或是訊息佇列,再通過業務規則自動或人工發起重試

對於本地訊息佇列來說核心是把大事務轉變成為小事務,舉例說明:

當你扣錢的時候,你需要在你扣錢的伺服器上新增加乙個本地訊息表,你需要把你扣錢和減去水的庫存寫入到本地訊息表,放入同乙個事務(依靠資料庫本地事務保證一致性)。

這個時候有個定時任務去輪詢這個本地事務表,把沒有傳送的訊息,扔給商品庫存伺服器,叫它減去水的庫存,到達商品伺服器之後,這時得先寫入這個伺服器的事務表,然後進行扣減,扣減成功後,更新事務表中的狀態。

商品伺服器通過定時任務掃瞄訊息表或者直接通知扣錢伺服器,扣錢伺服器在本地訊息表進行狀態更新。

針對一些異常情況,定時掃瞄未成功處理的訊息,進行重新傳送,在商品伺服器接到訊息之後,首先判斷是否是重複的。

如果已經接收,再判斷是否執行,如果執行在馬上又進行通知事務;如果未執行,需要重新執行由業務保證冪等,也就是不會多扣一瓶水。

本地訊息佇列是 base 理論,是最終一致模型,適用於對一致性要求不高的情況。實現這個模型時需要注意重試的冪等。

總結:在上面的知識中 還需要掌握的知識點就是zookeper的強一致性的

冪等概念:

集群概念:分割槽容錯

節點: 可用性

最終一致性相對于強一致性而言:是不需要時間上的立即資料一致(自我理解的),允許時間延遲的。

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...