摘要:中大致分為兩部分事務管理器和本地資源管理器。具體實現分布式事務框架的核心功能是對本地事務的協調控制,框架本身并不創建事務,只是對本地事務做協調控制。
Spring Cloud 分布式事務管理
在微服務如火如荼的情況下,越來越多的項目開始嘗試改造成微服務架構,微服務即帶來了項目開發的方便性,又提高了運維難度以及網絡不可靠的概率.
@[toc]
在說微服務的優缺點時,有對比才會更加明顯,首先說一下單體式結構
在單體式架構中,系統通常采用分層架構模式(MVC),持久化層、表示層,業務邏輯層。架構主要存在以下問題:
系統內部互相訪問,耦合緊密導致難以維護;
各業務領域需要采用相同的技術棧,難以快速應用新技術(例如使用SSH很難向SSM改造);
對系統的任何修改都必須整個系統一起重新部署/升級;
在系統負載增加時,難以進行水平擴展;
當系統中一處出現問題,會影響整個系統;
為了克服以上缺點,微服務架構應運而生。微服務,又叫微服務架構。微服務就是一些協同工作的小而自治的服務.
微服務架構 優點:1. 技術異構性
在不同的服務中,可以使用不同的技術來各自開發,只要保證服務間能相互協作即可
2. 彈性
當微服務中的某一個服務不可用時,不會影響整個系統,只會影響相關功能不可用
3. 擴展
易于擴展,使用小的多個服務,更加易于擴展新的功能
4. 簡化部署
某個服務的更新部署,不需要重新部署整個應用
5. 可組合
通過組合多個服務,可以提供一些新的功能
6. 可替代
因為每個微服務都比較小,重新實現某一個服務或者直接刪除該服務都是可操作的
缺點:1. 復雜度高
微服務間通過REST、RPC等形式交互,相對于單體模式,需要考慮被調用方故障、過載、消息丟失等各種異常情況,代碼邏輯更加復雜。
對于微服務間的事務性操作,因為不同的微服務采用了不同的數據庫,將無法利用數據庫本身的事務機制保證一致性,需要引入二階段提交等技術。
同時,在微服務間存在少部分共用功能但又無法提取成微服務時,各個微服務對于這部分功能通常需要重復開發,或至少要做代碼復制,以避免微服務間的耦合,增加了開發成本。
2. 運維復雜
在采用微服務架構時,系統由多個獨立運行的微服務構成,需要一個設計良好的監控系統對各個微服務的運行狀態進行監控。運維人員需要對系統有細致的了解才對夠更好的運維系統。
3. 影響性能
相對于單體架構,微服務的間通過REST、RPC等形式進行交互,通信的時延會受到較大的影響。
分布式事務的引入正如上面所說
對于微服務間的事務性操作,因為不同的微服務采用了不同的數據庫,將無法利用數據庫本身的事務機制保證一致性,需要引入二階段提交等技術。
在單體項目中,很容易做到事務控制,而在多個服務之間很難實現
假設服務調用如下:
A B C D 的事務均在各個服務控制,如何做到,統一協調,保證數據的一致性?
分布式事務解決方案 基于XA協議的兩階段提交XA是一個分布式事務協議,由提出。XA中大致分為兩部分:事務管理器和本地資源管理器。其中本地資源管理器往往由數據庫實現,比如Oracle、DB2這些商業數據庫都實現了XA接口,而事務管理器作為全局的調度者,負責各個本地資源的提交和回滾。XA實現分布式事務的原理如下:
第一階段:
第二階段:
總的來說,XA協議比較簡單,而且一旦商業數據庫實現了XA協議,使用分布式事務的成本也比較低。但是,XA也有致命的缺點,那就是性能不理想,特別是在交易下單鏈路,往往并發量很高,XA無法滿足高并發場景。XA目前在商業數據庫支持的比較理想,在mysql數據庫中支持的不太理想,mysql的XA實現,沒有記錄prepare階段日志,主備切換回導致主庫與備庫數據不一致。許多nosql也沒有支持XA,這讓XA的應用場景變得非常狹隘。
消息事務+最終一致性所謂的消息事務就是基于消息中間件的兩階段提交,本質上是對消息中間件的一種特殊利用,它是將本地事務和發消息放在了一個分布式事務里,保證要么本地操作成功成功并且對外發消息成功,要么兩者都失敗,開源的RocketMQ就支持這一特性.
該方案采用最終一致的,犧牲了一致性,換來了性能的大幅度提升。存在造成數據不一致的風險
TCC編程模式所謂的TCC編程模式,也是兩階段提交的一個變種。TCC提供了一個編程框架,將整個業務邏輯分為三塊:Try、Confirm和Cancel三個操作。以在線下單為例,Try階段會去扣庫存,Confirm階段則是去更新訂單狀態,如果更新訂單失敗,則進入Cancel階段,會去恢復庫存。總之,TCC就是通過代碼人為實現了兩階段提交,不同的業務場景所寫的代碼都不一樣,復雜度也不一樣,因此,這種模式并不能很好地被復用。
具體實現 LCNhttps://github.com/codingapi/...
LCN分布式事務框架的核心功能是對本地事務的協調控制,框架本身并不創建事務,只是對本地事務做協調控制。因此該框架與其他第三方的框架兼容性強,支持所有的關系型數據庫事務,支持多數據源,支持與第三方數據庫框架一塊使用(例如 sharding-jdbc),在使用框架的時候只需要添加分布式事務的注解即可,對業務的侵入性低。LCN框架主要是為微服務框架提供分布式事務的支持,在微服務框架上做了進一步的事務機制優化,在一些負載場景上LCN事務機制要比本地事務機制的性能更好,4.0以后框架開方了插件機制可以讓更多的第三方框架支持進來
目前 LCN為 4.1 版本
主要特點:
支持各種基于spring的db框架
兼容SpringCloud、Dubbo、motan
使用簡單,低依賴,代碼完全開源
基于切面的強一致性事務框架
高可用,模塊可以依賴RPC模塊做集群化,TxManager也可以做集群化
支持本地事務和分布式事務共存
支持事務補償機制,增加事務補償決策提醒
采用強一致性方案,事務要不全部成功,要不全部失敗,保證了事務的一致性,代碼簡單,原有項目只需引入相關 jar 包,并在需要參與的事務的方法添加注解即可,節省了代碼改造成本.
Spring Cloud示例:
添加依賴
4.1.0 com.codingapi transaction-springcloud ${lcn.last.version} com.codingapi tx-plugins-db ${lcn.last.version}
在需要執行的事務上添加注解
@Override @TxTransaction(isStart = true) @Transactional public int save() { }
其中 @TxTransaction(isStart = true) 為lcn 事務控制注解,其中isStart = true 表示該方法是事務的發起方例如,服務A 需要調用服務B,服務B 需要調用服務C,此時 服務A為服務發起方,其余為參與方,參與方只需@TxTransaction 即可
在測試時需要將 事務管理服務啟動 txManager, 具體示例參看:https://www.txlcn.org
ByteTCChttps://github.com/liuyangmin...
ByteTCC是一個基于TCC(Try/Confirm/Cancel)機制的分布式事務管理器。兼容JTA,可以很好的與EJB、Spring等容器(本文檔下文說明中將以Spring容器為例)進行集成。
ByteTCC特性
1、支持Spring容器的聲明式事務管理;
2、支持普通事務、TCC事務、業務補償型事務等事務機制;
3、支持多數據源、跨應用、跨服務器等分布式事務場景;
4、支持長事務;
5、支持dubbo服務框架;
6、支持spring cloud;
該實現方式,需要在業務層編寫對應的 tcc(Try/Confirm/Cancel) 方法,開發需要一定的成本,同時某些業務可能無法保證數據可回滾
查看示例:https://github.com/liuyangmin...
參考:
https://github.com/codingapi/...
https://github.com/liuyangmin...
微服務設計(Sam Newman)
如果你喜歡就關注一下吧. 以后會寫一下我們公司在使用Spring Cloud 中遇到的問題和一些經驗
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71847.html
摘要:是一個相對比較新的微服務框架,年才推出的版本雖然時間最短但是相比等框架提供的全套的分布式系統解決方案。提供線程池不同的服務走不同的線程池,實現了不同服務調用的隔離,避免了服務器雪崩的問題。通過互相注冊的方式來進行消息同步和保證高可用。 Spring Cloud 是一個相對比較新的微服務框架,...
摘要:而微服務架構能否成功實踐,利用各種工具解決潛在問題是關鍵。因此,微服務本身可以通過庫和運行時代理解決客戶端服務發現負載均衡配置更新統計跟蹤等。與相比,解決了更廣的微服務架構問題。和處理了不同范圍的微服務架構技術點,而且是用了不同的方法。 Spring Cloud vs. Kubernetes,誰才是部署微服務的最佳拍檔? Spring Cloud和Kubernetes都聲稱自己是開發和...
摘要:一微服務系統最大的挑戰數據的并發訪問修改不同請求之間的數據隔離多個服務共同完成一個業務請求,保證都完成或者失敗發生異常時的數據回滾二事務事務本地事務的原則,實現原理事務事務機制事務抽象內部事務,外部事務,幾種事務管理實現事務管理的實例 一、微服務系統最大的挑戰 數據的并發訪問、修改 不同請求之間的數據隔離 多個服務共同完成一個業務請求,保證都完成或者失敗 發生異常時的數據回滾 二、...
摘要:授權框架使第三方應用程序來獲取對服務的有限訪問機會。無論是通過編排資源所有者和服務之間的交互批準的資源所有者,或通過允許第三方應用程序來獲取自己的訪問權限。 SpringCloud打造微服務平臺--概覽 簡述 SpringCloud是什么 Spring Boot和SpringCloud是什么關系 Spring Boot是Spring的一套快速WEB開發的腳手架,可建立獨立的Sprin...
摘要:摘要近日,阿里中間件的企業級分布式應用服務宣布再次升級,全面支持應用。在阿里巴巴的使用歷史可以追溯到年,并且成功通過了每年雙海量應用的嚴峻考驗。經過多年的歷練,目前已經成為阿里巴巴主要的分布式應用服務工具,日均調用超千億次。 摘要: 近日,阿里中間件(Aliware)的企業級分布式應用服務EDAS宣布再次升級,全面支持Spring Cloud應用。 點此查看原文:http://clic...
閱讀 2561·2021-09-02 15:40
閱讀 1565·2019-08-30 15:54
閱讀 1079·2019-08-30 12:48
閱讀 3398·2019-08-29 17:23
閱讀 1046·2019-08-28 18:04
閱讀 3664·2019-08-26 13:54
閱讀 606·2019-08-26 11:40
閱讀 2390·2019-08-26 10:15