(1)分散式事務理論基礎

白露非霜發表於2021-11-16

一、服務架構演進

1.單體應用

最初的所有業務全部融合在一起,我們最初接觸到的一個java應用開發完成之後打成一個war包進行部署。

優點:

1)架構簡單,所有專案模組部署在一起,對於小型專案來說方便維護

缺點:

1)所有模組耦合在一起,對於大型專案來說不易與開發和維護

2)耦合度過高,一旦一個模組出現問題,會導致整個專案不可用

3)無法針對某個具體的模組來提升效能

4)無法進行水平擴充套件

2.垂直應用:

為滿足業務需求,將單體應用部署多份到不同伺服器上。但是無法根據某個模組來進行優化和效能提升,比如有些模組屬於CPU密集型的,有些屬於IO密集型的。無法進行鍼對性的優化。垂直應用架構就是將單體應用拆分未及格互不相干的應用,來提升整個系統的效能。比如針對C端的部署成一個應用,管理後臺部署成一個服務,C端一般流量大,這個時候只需要把C端的服務多部署幾個節點,而管理後臺訪問量則不需要。

優點:

1)可以根據不同系統的訪問情況進行鍼對性優化

2)能夠實現水平擴充套件

3)各系統分擔流量,解決併發量問題

4)子系統故障,不影響其他子系統執行,提高整體的容錯率

缺點:

1)拆分後各系統相對獨立,無法進行相互呼叫

2)難免存在重疊的業務,重複開發,增加維護成本

3.分散式應用

垂直應用越來越多,重複的的程式碼也會越來越多,這個時候就講重複的業務抽離出來形成單獨的服務,提供給其他業務某塊呼叫。這個時候一般拆分成表現層和服務層,服務層負責處理業務邏輯,提供給表現層呼叫,表現層負責和前端進行互動。

優點:

1)重複程式碼抽離,提高程式碼複用

2)可以針對性的進行優化

缺點:

1)系統之間呼叫關係,依賴關係變得複雜

2)系統維護成本變高

4.SOA(面向服務)架構

分散式架構下,當服務部署越來越多的時候,服務之間的關係,呼叫越來越複雜,這個時候我們需要增加統一的排程中心,對所有服務進行管理。增加註冊中心,解決各個服務之間的依賴和呼叫關係,使其自動註冊與發現。這個時候服務的粒度任然比較粗。

缺點:

1)某個服務出現問題,可能造成服務不可用

2)增加測試、運維成本

5.微服務架構

微服務架構是在SOA基礎上進一步的擴充套件和拆分。將一個大專案拆分成一個個小的可獨立部署的微服務,每個服務有自己的資料庫。

優點:

1)服務徹底拆分,各個服務獨立打包部署,獨立升級維護

2)每個服務複雜的業務清晰,利於後期擴充套件升級、維護

3)服務之間採用REST或者RPC協議通訊

缺點:

1)開發成本高(對開發人員要求更高)

2)成本更高,每個服務都需要機器來部署

3)涉及各個服務的容錯性問題

4)涉及資料一致性問題

5)涉及分散式事務問題

 

二、分散式事務場景

1.跨JVM程式

因為服務拆分之後,要完成一個完整業務流程就可能涉及到多個服務之間呼叫。

2.跨資料庫例項

分庫導致或者本身業務就是操作不同的庫

3.多個服務訪問單資料庫

 

三、資料一致性解決方案

ACID特性:利用資料庫事務的ACID(原子性、一致性、隔離性、永續性)特性。有些分散式事務解決方案其實最終也是要依賴資料庫的此特性。比如阿里seata中的AT模式。還有DTP模型、2PC模型(兩階段提交)、3PC(三階段提交)、TCC模型、可靠訊息最終一致性模型、最大努力通知模型

 

四、分散式事務基本理論

分散式事務的兩大基本理論:CAP理論和Base理論

CAPconsistency一致性、可用性availability、分割槽容錯性partition tolerance

要滿足一致性那麼我們在各個節點之間同步資料的時候,需要對資源進行鎖定等所有節點都同步完成之後再返回資料。防止在同步過程中應用程式從從節點讀取到不一致的資料。

可用性所有請求都會被響應,不會存在響應超時或錯誤的情況。

分割槽容錯,如果將系統部署在一個節點,那麼當節點出現故障時,整個系統將不可用。

因此需要多個節點部署,一個節點掛掉,其他節點也能對外提供服務。分割槽容錯時一個分散式系統必須具備的基礎能力。

AP:放棄一致性,但是一般都會考慮最終一致性。允許多個節點在一定時間內資料存在差異,一定時間之後達到一致。比如eureka,節點之間同步資料是一個定時任務從其他節點去同步資料的,定時任務沒有觸發的這個時間內,節點之間的資料是不一致的。

CP放棄可用性。當系統對一致性要求比較高的時候使用。比如ZK,寫入資料時需要保證過半的節點寫入之後,leader才會提交結果並返回。以此來保證資料的一致性。

CA放棄分割槽容錯性,此時系統不會進行分割槽,也不用考慮網路不通,節點掛掉等情況,嚴格來說此時的系統已經不是一個分散式系統了。

Base理論是對AP的一個擴充套件,它犧牲了強一致性來獲得可用性。Basically Available(基本可用)Soft State(軟狀態)和Eventually Consistent(最終一致性)的縮寫。

軟狀態比如訂單中可以設計“支付中”,“退款中”這種中間狀態,過一段時間之後變成“支付成功”“退款成功”。

 

後續:

強一致性分散式事務解決方案、最終一致性分散式事務解決方案

相關文章