概述:
背景
由於最近工作一直玩轉都是單機版專案,在大型專案上場景纔會使用熱備和讀寫庫等簡單專案構建,其核心本質在使用的同時還是單機版,故此在當前經濟和行業背景下,加強學習才能成為一名更加合格的CRUD工程師。
摘要
本文將由淺入深介紹分散式事務原理及一些簡單解決方案介紹。
在當今分散式系統和微服務架構日益普及的背景下,分散式事務成爲了保持資料一致性和業務完整性的關鍵技術。本文首先介紹了分散式事務的核心概念和運作原理,解釋了為何在跨多個服務和資料庫的操作中需要分散式事務,以及它們在實現資料一致性和業務完整性方面的重要性。
文章探討了分散式事務的常見使用場景,包括跨資料庫事務、微服務架構中的業務操作、跨系統整合、電子商務交易以及金融服務等。這些場景突顯了分散式事務的必要性,同時也揭示了在設計系統時需要考慮的原因,如資料一致性、業務完整性、故障恢復、法規遵守和使用者體驗。
文章隨後詳細介紹了各種分散式事務解決方案,包括兩階段提交(2PC)、補償事務(TCC)、本地訊息表、分散式事務中介軟體和最終一致性(如BASE理論)。每種解決方案的原理、優點和缺點都進行了詳細闡述,為讀者提供了全面的理解。
最後,文章列舉了一系列流行的分散式事務中介軟體,如Seata、Atomikos、Narayana、Bitronix、JOTM、Apache Geronimo、Spring Transaction、DTC、TCC-Transaction、DTM和Eventuate等。這些中介軟體的功能和特性被簡要介紹,為開發者和架構師在選擇合適的分散式事務解決方案時提供了參考。
正文:
分散式使用場景及原因
分散式事務主要用於處理在分散式系統中跨多個服務、應用或資料庫的操作,這些操作需要作為一個整體來維護資料的一致性和完整性。以下是一些常見的使用場景和原因:
分散式事務處理的基本原理:
事務的分散式特性: 分散式事務涉及多個網路節點,每個節點可能是不同的資料庫或服務。它們需要透過網路協調來達成一致的事務決策。
原子性(Atomicity): 分散式事務必須保證事務中的所有操作作為一個整體執行,即要麼全部完成,要麼全部不執行。
一致性(Consistency): 事務執行的結果必須保證系統從一個一致的狀態轉移到另一個一致的狀態,不會破壞資料的完整性約束。
隔離性(Isolation): 事務的執行不應受到其他事務的干擾,即使多個事務併發執行,也應保證各自的隔離性。
永續性(Durability): 一旦事務提交,其結果就是永久的,即使系統發生故障,也不會丟失事務的執行結果。
使用場景:
跨資料庫事務: 當業務操作需要跨越多個數據庫例項時,這些資料庫可能分佈在不同的伺服器上,需要保證操作在所有相關資料庫上同時成功或失敗。
微服務架構: 在微服務架構中,不同的服務可能管理著不同的資料來源。當一個業務流程涉及多個服務時,需要協調這些服務以保證業務邏輯的一致性。
跨系統整合: 在企業應用整合(EAI)場景中,不同的系統可能需要共同完成某些業務流程,如訂單處理系統、庫存管理系統和財務系統。
電子商務交易: 電商平臺在處理訂單時,可能需要更新使用者資訊、庫存、支付狀態和訂單狀態等,涉及多個獨立的系統或資料庫。
金融服務: 銀行和金融機構在進行資金轉賬、支付結算等操作時,需要跨多個系統保證交易的原子性和一致性。
原因:
資料一致性: 分散式事務確保在分佈式環境中,即使業務操作跨越多個服務或資料庫,資料狀態也能保持一致。
業務完整性: 業務流程的各個步驟可能依賴於不同的服務,分散式事務保證了整個業務流程要麼完全成功,要麼在失敗時能夠完全回滾。
故障恢復: 在分散式系統中,服務可能由於網路問題、硬體故障或其他原因而失敗,分散式事務可以幫助系統從這些故障中恢復,避免資料丟失或不一致。
遵守法規: 某些行業(如金融、醫療)有嚴格的數據處理規定,分散式事務有助於符合這些法規要求,確保事務的可追溯性和合規性。
使用者體驗: 在使用者參與的交易中,分散式事務提供了一個穩定和可靠的後端系統,這對於維護使用者信任和滿意度至關重要。
儘管分散式事務提供了上述優勢,它們也帶來了效能開銷和複雜性。因此,在設計系統時,應當仔細評估是否需要分散式事務,或者是否可以透過其他架構決策(如最終一致性、事件驅動的方法等)來降低對分散式事務的依賴。
分散式事務解決方案:
分散式事務解決方案主要包括以下幾種型別: 兩階段提交(2PC)、補償事務(TCC)、本地訊息表、分散式事務中介軟體、最終一致性(如BASE理論)等。
1. 兩階段提交(2PC)
原理:
兩階段提交是一種強一致性事務協議,通常由一個協調者(事務管理器)和多個參與者(資源管理器)組成。
第一階段(準備階段):協調者詢問所有參與者是否準備好提交事務,並等待回覆。
第二階段(提交/回滾階段):如果所有參與者都準備好了,協調者傳送提交指令;如果任何參與者無法提交,協調者傳送回滾指令。
優點:
強一致性保證,確保所有參與者要麼全部提交,要麼全部回滾。
缺點:
效能開銷大,因為涉及多個系統的協調。
容易出現單點故障,協調者的故障會影響整個事務。
可能會導致資源鎖定時間過長,影響系統吞吐量。
2. 補償事務(TCC)
原理:
TCC是Try-Confirm-Cancel的縮寫,分為三個操作步驟。
Try階段:檢查所有資源是否足夠,預留必要資源。
Confirm階段:如果Try階段成功,確認預留資源,完成事務。
Cancel階段:如果任何一個操作失敗,取消預留的資源。
優點:
相比2PC,資源鎖定時間短,系統吞吐量更高。
更加靈活,可以根據業務邏輯自定義補償操作。
缺點:
實現複雜,需要為每個操作定義相應的確認和取消邏輯。
依然存在協調多個服務的開銷。
3. 本地訊息表
原理:
應用程式將事務操作和訊息通知寫入本地資料庫的訊息表中。
透過定時任務或事件觸發,將訊息傳送到訊息佇列。
其他服務監聽訊息佇列,根據訊息完成相應的業務操作。
優點:
依賴本地事務,簡化了分散式事務的複雜性。
提高了系統的可用性和容錯性。
缺點:
需要額外的訊息佇列系統。
可能會有訊息的延遲處理,不適合實時性要求高的場景。
4. 分散式事務中介軟體(如Seata)
原理:
封裝了分散式事務的處理邏輯,提供了類似於本地事務的程式設計模型。
透過事務協調器管理全域性事務的提交和回滾。
優點:
提供了一致性保證,簡化了分散式事務的處理。
支援多種事務模式,適應不同的業務場景。
缺點:
效能開銷和系統複雜性增加。
可能存在中心化協調器的單點故障風險。
5. 最終一致性(BASE理論)
原理:
基於BASE理論(Basically Available, Soft state, Eventually consistent),允許系統在一段時間內是不一致的,但最終會達到一致狀態。
常見的實現方式有非同步通訊、事件驅動、最終一致性協議等。
優點:
提高了系統的可用性和伸縮性。
適合大規模分散式系統。
缺點:
不提供強一致性保證,需要業務能夠容忍一定時間的資料不一致。
複雜的業務邏輯可能需要額外的補償機制。
在選擇分散式事務解決方案時,需要根據業務場景、資料一致性要求、效能影響等因素綜合考慮。在可能的情況下,設計無事務或最終一致性的業務流程可以有效減少分散式事務帶來的複雜性和效能開銷
分散式事務中介軟體
分散式事務中介軟體提供了跨多個服務和資料庫的事務協調和管理。以下是一些流行的分散式事務中介軟體:
Seata:
開源的分散式事務解決方案,支援AT、TCC、SAGA和XA模式,廣泛用於處理微服務架構中的分散式事務。
Atomikos:
提供JTA(Java Transaction API)和JTS(Java Transaction Service)相容的事務管理器,支援多種事務模式,包括XA。
Narayana:
開源的事務管理器,支援JTA和JTS,是WildFly應用伺服器(原JBoss)的事務元件。
Bitronix:
輕量級的開源事務管理器,實現了JTA介面,適用於Java環境。
JOTM (Java Open Transaction Manager):
開源的事務管理器,提供JTA/JTS支援,可以與JNDI、RMI等技術整合。
Apache Geronimo:
開源的應用伺服器,包含一個JTA相容的事務管理器。
Spring Transaction:
Spring框架提供的宣告式事務管理功能,可以與JTA或者其他本地事務管理機制(如Hibernate, JDBC)整合。
Distributed Transaction Coordinator (DTC):
微軟提供的事務管理器,支援在Windows平臺上進行分散式事務處理。
TCC-Transaction:
開源的TCC(Try-Confirm-Cancel)型別的分散式事務框架。
DTM:
開源的分散式事務管理器,支援多種事務模式,包括TCC、SAGA、XA和2PC。
Eventuate:
基於事件驅動架構的分散式事務框架,使用事件來協調服務之間的操作。
Saga:
分散式事務模式,通常用於長時間執行的業務流程,可以透過多種中介軟體實現,如Eventuate Tram或Axon Framework。
這些中介軟體各有特點,適用於不同的場景和需求。在選擇分散式事務中介軟體時,需要考慮系統的架構、效能要求、一致性需求、中介軟體的成熟度和社羣支援等因素。
總結:
分散式事務是現代分散式系統中不可或缺的組成部分,它們允許跨多個服務和資料庫的操作以原子方式執行,確保了資料的一致性和業務流程的完整性。本文討論了包括跨資料庫事務、微服務架構、跨系統整合、電子商務和金融服務在內的多種場景,這些場景體現了分散式事務在處理複雜業務操作中的重要作用。文章還分析了不同的分散式事務解決方案,包括兩階段提交、補償事務、本地訊息表、分散式事務中介軟體以及最終一致性等。每種方案都有其特定的適用場景、優點和潛在的缺點,選擇合適的解決方案需要根據業務需求、系統架構和效能考慮進行綜合評估。
最後,本文介紹了多種流行的分散式事務中介軟體,這些中介軟體提供了不同層次的抽象和工具,以簡化分散式事務的管理和協調。它們使得開發者能夠更加專注於業務邏輯的實現,而不是底層的事務協調機制。
總之,分散式事務是解決分散式系統中資料一致性問題的關鍵技術。雖然它們引入了額外的複雜性和效能考慮,但透過合理的架構設計和中介軟體的使用,可以有效地管理這些挑戰,確保系統的穩定性和可靠性。隨著分散式系統的不斷髮展,對分散式事務解決方案的需求也將持續增長,對應的技術也將不斷進化以滿足日益複雜的業務需求。