天天看點

屬于db模式缺點的是什麼_架構設計 | 基于Seata中間件,微服務模式下事務管理...一、Seata簡介二、服務端部署三、業務服務搭建四、Seata用法詳解五、源代碼位址

一、Seata簡介

1、Seata元件

Seata是一款開源的分布式事務解決方案,緻力于提供高性能和簡單易用的分布式事務服務。Seata将為使用者提供了AT、TCC、SAGA、XA事務模式,為使用者打造一站式的分布式解決方案。

2、支援模式

AT 模式

  • 基于支援本地 ACID 事務的關系型資料庫。
  • Java應用,通過 JDBC 通路資料庫。

一階段:業務資料和復原日志記錄在同一個本地事務中送出,釋放本地鎖和連接配接資源。

二階段:送出異步化,非常快速地完成。復原通過一階段的復原日志進行反向補償。

TCC模式

一個分布式的全局事務,整體是兩階段送出的模型,全局事務是由若幹分支事務組成的,分支事務要滿足兩階段送出的模型要求,即需要每個分支事務都具備自己的:

一階段 prepare 行為

二階段 commit 或 rollback 行為

Saga模式

Saga模式是SEATA提供的長事務解決方案,在Saga模式中,業務流程中每個參與者都送出本地事務,當出現某一個參與者失敗則補償前面已經成功的參與者,一階段正向服務和二階段補償服務都由業務開發實作。

XA模式

XA是一個分布式事務協定,對業務無侵入的分布式事務解決方案,XA送出協定需要事務參與者的資料庫支援,XA事務具有強一緻性,在兩階段送出的整個過程中,一直會持有資源的鎖,性能不理想的缺點很明顯。

二、服務端部署

1、下載下傳元件包

1.2版本:seata-server-1.2.0.zip

解壓目錄

  • bin:存放服務端運作啟動腳本;
  • lib:存放服務端依賴的資源jar包;
  • conf:配置檔案目錄。

2、修改配置

file.conf配置

mode:db 即使用資料庫存儲事務資訊,這裡還可以選擇file存儲方式。

file模式為單機模式,全局事務會話資訊記憶體中讀寫并持久化本地檔案root.data,性能較高;

db模式為高可用模式,全局事務會話資訊通過db共享,相應性能差些;

redis模式Seata-Server 1.3及以上版本支援,性能較高,存在事務資訊丢失風險,請提前配置合适目前場景的redis持久化配置.

registry.conf配置

這裡選擇eureka作為注冊中心,seata-server也要作為一個服務添加到注冊中心,不使用配置中心是以config配置預設即可。

3、事務管理表

需要在seata-server即上述配置的MySQL庫中建立3張事務管理表:

  • 全局事務:global_table
  • 分支事務:branch_table
  • 全局鎖:lock_table
  • 事務復原:undo_log
  • SQL腳本:mysql-script目錄

4、啟動指令

Linux環境:sh seata-server.sh

三、業務服務搭建

1、代碼結構

屬于db模式缺點的是什麼_架構設計 | 基于Seata中間件,微服務模式下事務管理...一、Seata簡介二、服務端部署三、業務服務搭建四、Seata用法詳解五、源代碼位址
  • seata-eureka:注冊中心
  • seata-order:訂單服務
  • seata-account:賬戶服務
  • seata-inventor:庫存服務
  • seata-client:用戶端服務
  • account-feign:賬戶Feign接口
  • inventory-feign:庫存Feign接口
  • order-feign:訂單Feign接口

請求鍊路:用戶端->訂單->賬戶+庫存,測試整個流程的分布式事務問題。

2、資料庫結構

屬于db模式缺點的是什麼_架構設計 | 基于Seata中間件,微服務模式下事務管理...一、Seata簡介二、服務端部署三、業務服務搭建四、Seata用法詳解五、源代碼位址
  • seata_server:seata元件服務端依賴庫
  • seata_account:模拟賬戶資料庫
  • seata_inventor:模拟庫存資料庫
  • seata_order:模拟訂單資料庫

各個庫腳本位置:mysql-script/data-biz.sql

3、啟動服務

依次啟動:注冊中心,庫存服務,賬戶服務,訂單服務,用戶端服務;

Eureka服務清單如下:

屬于db模式缺點的是什麼_架構設計 | 基于Seata中間件,微服務模式下事務管理...一、Seata簡介二、服務端部署三、業務服務搭建四、Seata用法詳解五、源代碼位址

四、Seata用法詳解

1、Seata基礎配置

屬于db模式缺點的是什麼_架構設計 | 基于Seata中間件,微服務模式下事務管理...一、Seata簡介二、服務端部署三、業務服務搭建四、Seata用法詳解五、源代碼位址

幾個基礎服務的配置方式一樣。

conf配置

file.conf重點關注下面内容,事務組的名稱,需要在yml檔案中使用。

my_test_tx_group = 
           

registry.conf:是注冊中心的選擇。

2、資料庫配置

注意這裡的事務組名稱配置。

将資料庫整體由Seata進行代理管理,核心API:DataSourceProxy。

@Configuration
           

3、業務代碼

核心注解:GlobalTransactional,管理整體的分布式事務。

@Service
           

測試流程:在任意服務下抛出異常,觀察整體的事務狀态,觀察是否有整體的事務控制效果。

五、源代碼位址

屬于db模式缺點的是什麼_架構設計 | 基于Seata中間件,微服務模式下事務管理...一、Seata簡介二、服務端部署三、業務服務搭建四、Seata用法詳解五、源代碼位址