接受」不完美「 分布式事務學習總結

2022-07-03 23:48:13 字數 2199 閱讀 6991

正如文章開頭所說的:事務是一系列的動作,這些動作必須全部完成,如果有乙個失敗,那麼事務就會回滾到最開始的狀態,彷彿什麼都沒發生過一樣。在企業級應用的開發過程中,事務管理是必不可少的技術,用來確保資料的完整性和一致性。

事務有四個特性,也就是經常被提到的acid:

上面我們說到的事務,也可以稱為是」本地事務「。目前許多框架,都能夠很方便的支援本地事務。比如spring boot,只需要在方法前加上」@transaction「的註解,就可以愉快的使用事務了。

但是,事務到此未知就結束了嗎?不是的,隨著企業應用越來越複雜,應用的架構也從單體架構演變到了soa,還有現在炙手可熱的微服務。這時候,又出現了分布式事務的概念。

分布式事務,簡單來說就是指對資料庫的處理操作分布在不同的節點之上,而且操作的資料,分布於不同的資料庫。分布式事務,需要保證不同資料庫的資料一致性。

處於資料量或者資料隔離的考慮,實際開發中需要進行分庫分表。原來乙個庫現在變成了多個庫,這時候要保證資料一致性,就要用到分布式事務。

所謂的soa話,就是業務的服務化。比如原來單機支撐了整個電商**,現在對整個**進行拆解,分離出了訂單中心、使用者中心、庫存中心。對於訂單中心,有專門的資料庫儲存訂單資訊,使用者中心也有專門的資料庫儲存使用者資訊,庫存中心也會有專門的資料庫儲存庫存資訊。這時候如果要同時對訂單和庫存進行操作,那麼就會涉及到訂單資料庫和庫存資料庫,為了保證資料一致性,就需要用到分布式事務。

說到分布式事務,就離不開cpa原則與base方案。

cpa指的是,在乙個分布式系統中,一致性(c)、可用性(a)、分割槽容錯性(p),三者不可兼得。cpa是nosql資料庫的基石。

cap理論就是說在分布式儲存系統中,最多只能實現上面的兩點。而由於當前的網路硬體肯定會出現延遲丟包等問題,所以分割槽容忍性是我們必須需要實現的。所以我們只能在一致性和可用性之間進行權衡,沒有nosql系統能同時保證這三點。

base就是為了解決關聯式資料庫強一致性引起的問題而引起的可用性降低而提出的解決方案。

base是下面三個術語的縮寫:

兩階段提交(two phase commit, 2pc), 具有強一致性, 是cp系統的一種典型實現,常見的標準是xa,jta等。例如oracle的資料庫支援xa。

下面是兩階段提交的示意圖:

圖的上半是兩階段提交成功的演示, 下半是兩階段提交失敗的演示。

兩階段提交目前並不是主流的解決方案,其主要原因是:協調者需要等待所有參與者發出yes請求,或者乙個參與者發出no請求後,才能執行提交或者終端操作。這會造成長時間鎖住多個資源,造成效能瓶頸。如果參與者有乙個耗時長的操作, 效能損耗會更明顯;還有乙個缺點,就是實現複雜,不利於系統的擴充套件。

通過將一系列同步的事務操作變為基於訊息執行的非同步操作, 避免了分布式事務中的同步阻塞操作的影響。基於訊息執行就是基於訊息中介軟體的兩階段提交,本質上是對訊息中介軟體的一種特殊利用,它是將本地事務和發訊息放在了乙個分布式事務裡,保證要麼本地操作成功成功並且對外發訊息成功,要麼兩者都失敗,開源的rocketmq就支援這一特性,具體原理如下:

執行步驟如下:

mq傳送方傳送遠端事務訊息到mq server;

mq server給予響應, 表明事務訊息已成功到達mq server.

mq傳送方commit本地事務.

若本地事務commit成功, 則通知mq server允許對應事務訊息被消費; 若本地事務失敗, 則通知mq server對應事務訊息應被丟棄.

若mq傳送方超時未對mq server作出本地事務執行狀態的反饋, 那麼需要mq servfer向mq傳送方主動回查事務狀態, 以決定事務訊息是否能被消費.

當得知本地事務執行成功時, mq server允許mq訂閱方消費本條事務訊息.

需要額外說明的一點, 就是事務訊息投遞到mq訂閱方後, 並不一定能夠成功執行. 需要mq訂閱方主動給予消費反饋(ack)

此方案適用於執行週期較長,實時性要求不高的場景。

這是分布式事務中要求最低的一種, 也可以通過訊息中介軟體實現, 與前面非同步確保型操作不同的一點是, 在訊息由mq server投遞到消費者之後, 允許在達到最大重試次數之後正常結束事務.這種方案適用於交易結果訊息的通知等

最近兩年,微服務的呼聲越來越高,不可避免的,微服務也會面臨事務的困擾。

事務,尤其是分布式事務,是乙個很大的話題,除了上述列出的幾種解決方案,根據不同的業務要求,還有許多其他的解決方案。按照控制力度,分布式事務分為部分控制和完全控制兩種:

接受「不完美」 分布式事務學習總結

作為乙個前端專業的人來說,對於事務的理解,一直停留在 要麼都成功,要麼都不成功 的小白階段。既然自己將2018年定義為 深入理解 的一年,那麼就從深入理解事務開始吧。正如文章開頭所說的 事務是一系列的動作,這些動作必須全部完成,如果有乙個失敗,那麼事務就會回滾到最開始的狀態,彷彿什麼都沒發生過一樣。...

分布式事務分析總結

分布式事務用於分布式系統中主要是為了確保不同節點的資料一致性,分布式事務有很多,最具代表性的就是oracre提出的xa分布式事務 分布式系統分為兩階段提交和三階段提交,這裡我們主要說一下兩階段提交。兩階段提交主要有三個部分主動方應用 訊息中介軟體 被動方應用,分布式事務主要是為解決資料不一致的問題。...

分布式事務seata學習

1 at模式 2 tcc模式 3 saga模式 at 模式基於 支援本地 acid 事務 的 關係型資料庫 一階段 prepare 行為 在本地事務中,一併提交業務資料更新和相應回滾日誌記錄。二階段 commit 行為 馬上成功結束,自動 非同步批量清理回滾日誌。二階段 rollback 行為 通過...