欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud中的Seata基本介紹與安裝教程

 更新時間:2024年01月18日 14:44:32   作者:一個風(fēng)輕云淡  
Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù),這篇文章主要介紹了SpringCloud之Seata基本介紹與安裝,需要的朋友可以參考下

基本介紹

概述

Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。

阿里巴巴作為國內(nèi)最早一批進行應(yīng)用分布式改造的企業(yè),很早就遇到微服務(wù)架構(gòu)下的分布式事務(wù)問題。阿里巴巴對于分布式事務(wù)問題先后發(fā)布了以下解決方案:

2014 年,阿里中間件團隊發(fā)布 TXC(Taobao Transaction Constructor),為集團內(nèi)應(yīng)用提供分布式事務(wù)服務(wù)。

2016 年,TXC 在經(jīng)過產(chǎn)品化改造后,以 GTS(Global Transaction Service) 的身份登陸阿里云,成為當(dāng)時業(yè)界唯一一款云上分布式事務(wù)產(chǎn)品。在阿云里的公有云、專有云解決方案中,開始服務(wù)于眾多外部客戶。

2019 年起,基于 TXC 和 GTS 的技術(shù)積累,阿里中間件團隊發(fā)起了開源項目 Fescar(Fast & EaSy Commit And Rollback, FESCAR),和社區(qū)一起建設(shè)這個分布式事務(wù)解決方案。

2019 年 fescar 被重命名為了seata(simple extensiable autonomous transaction architecture)。

核心組件

Seata的核心組件可分為Seata服務(wù)端Seata客戶端兩類

Seata 定義了 3 個核心組件:

  • TC(Transaction Coordinator):事務(wù)協(xié)調(diào)器,維護全局和分支事務(wù)的狀態(tài),協(xié)調(diào)全局事務(wù)提交或回滾 ,直接調(diào)度事務(wù)參與者RM。負責(zé)將RM的反饋結(jié)果響應(yīng)給TM,并聽從TM的最終決議,將具體決議(提交或回滾)發(fā)送給RM執(zhí)行。相當(dāng)于中間人,主要負責(zé)維護全局事務(wù)和分支事務(wù)的狀態(tài)。
  • TM(Transaction Manager):事務(wù)管理器,定義全局事務(wù)的范圍、開始全局事務(wù)、提交或回滾全局事務(wù)。 它是事務(wù)的發(fā)起者(具體的微服務(wù))。根據(jù)RM第一階段的執(zhí)行結(jié)果,進行決議。并將決議反饋給TC。相當(dāng)于發(fā)號施令的
  • RM(Resource Manager):資源管理器,管理分支事務(wù)處理的資源,與TC交談以注冊分支事務(wù)和報告分支事務(wù)的狀態(tài),并驅(qū)動分支事務(wù)提交或回滾。 其實就是事務(wù)的參與者。獲取TC的執(zhí)行命令具去執(zhí)行分支事務(wù)的第一階段以及第二階段,并將執(zhí)行結(jié)果反饋給TC,相當(dāng)于具體做事的

三個組件相互協(xié)作,TC 以 Seata 服務(wù)器(Server)形式獨立部署,TM 和 RM 則是以 Seata Client 的形式集成在微服務(wù)中運行。 

 四種方案

 整體的架構(gòu)如圖:

Seata基于上述架構(gòu)提供了四種不同的分布式事務(wù)解決方案:

  • XA模式:強一致性分階段事務(wù)模式,犧牲了一定的可用性,無業(yè)務(wù)侵入

支持XA協(xié)議 事務(wù)的數(shù)據(jù)庫。Java 應(yīng)用,通過 JDBC 訪問數(shù)據(jù)庫。

執(zhí)行階段(E xecute):XA start/XA end/XA prepare + SQL + 注冊分支

完成階段(F inish):XA commit/XA rollback

  • TCC模式:最終一致的分階段事務(wù)模式,有業(yè)務(wù)侵入

不依賴于底層數(shù)據(jù)資源的事務(wù)支持:

一階段 prepare 行為:調(diào)用 自定義 的 prepare 邏輯。

二階段 commit 行為:調(diào)用 自定義 的 commit 邏輯。

二階段 rollback 行為:調(diào)用 自定義 的 rollback 邏輯。

所謂 TCC 模式,是指支持把 自定義 的分支事務(wù)納入到全局事務(wù)的管理中。

  • AT模式:最終一致的分階段事務(wù)模式,無業(yè)務(wù)侵入,也是Seata的默認模式

基于 支持本地 ACID 事務(wù) 的 關(guān)系型數(shù)據(jù)庫:

一階段 prepare 行為:在本地事務(wù)中,一并提交業(yè)務(wù)數(shù)據(jù)更新和相應(yīng)回滾日志記錄。

二階段 commit 行為:馬上成功結(jié)束,自動 異步批量清理回滾日志。

二階段 rollback 行為:通過回滾日志,自動 生成補償操作,完成數(shù)據(jù)回

  • SAGA模式:長事務(wù)模式,有業(yè)務(wù)侵入

Saga模式是SEATA提供的長事務(wù)解決方案,在Saga模式中,業(yè)務(wù)流程中每個參與者都提交本地事務(wù),當(dāng)出現(xiàn)某一個參與者失敗則補償前面已經(jīng)成功的參與者,一階段正向服務(wù)和二階段補償服務(wù)都由業(yè)務(wù)開發(fā)實現(xiàn)。

無論哪種方案,都離不開TC,也就是事務(wù)的協(xié)調(diào)者。

部署TC服務(wù)(安裝)

  • 下載 

首先要下載seata-server包,地址在http://seata.io/zh-cn/blog/download.html

在非中文目錄解壓縮這個zip包,其目錄結(jié)構(gòu)如下:

修改registry.conf 

注冊到nacos中 

registry {
  # tc服務(wù)的注冊中心類,這里選擇nacos,也可以是eureka、zookeeper等
  type = "nacos"
  nacos {
    # seata tc 服務(wù)注冊到 nacos的服務(wù)名稱,可以自定義
    application = "seata-tc-server"
    serverAddr = "127.0.0.1:8848"
    group = "DEFAULT_GROUP"
    namespace = ""
    cluster = "SH"
    username = "nacos"
    password = "nacos"
  }
}
config {
  # 讀取tc服務(wù)端的配置文件的方式,這里是從nacos配置中心讀取,這樣如果tc是集群,可以共享配置
  type = "nacos"
  # 配置nacos地址等信息
  nacos {
    serverAddr = "127.0.0.1:8848"
    namespace = ""
    group = "SEATA_GROUP"
    username = "nacos"
    password = "nacos"
    dataId = "seataServer.properties"
  }
}

nacos添加配置

為了讓tc服務(wù)的集群可以共享配置,我們選擇了nacos作為統(tǒng)一配置中心。因此服務(wù)端配置文件seataServer.properties文件需要在nacos中配好。

配置內(nèi)容如下:

# 數(shù)據(jù)存儲方式,db代表數(shù)據(jù)庫
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=root
store.db.password=123
store.db.minConn=5
store.db.maxConn=30
store.db.globalTable=global_table
store.db.branchTable=branch_table
store.db.queryLimit=100
store.db.lockTable=lock_table
store.db.maxWait=5000
# 事務(wù)、日志等配置
server.recovery.committingRetryPeriod=1000
server.recovery.asynCommittingRetryPeriod=1000
server.recovery.rollbackingRetryPeriod=1000
server.recovery.timeoutRetryPeriod=1000
server.maxCommitRetryTimeout=-1
server.maxRollbackRetryTimeout=-1
server.rollbackRetryTimeoutUnlockEnable=false
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
# 客戶端與服務(wù)端傳輸方式
transport.serialization=seata
transport.compressor=none
# 關(guān)閉metrics功能,提高性能
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

 其中的數(shù)據(jù)庫地址、用戶名、密碼都需要修改成你自己的數(shù)據(jù)庫信息。

 Server端存儲模式(store.mode)現(xiàn)有file、db、redis三種(后續(xù)將引入raft,mongodb),file模式無需改動,直接啟動即可。

注: file模式為單機模式,全局事務(wù)會話信息內(nèi)存中讀寫并持久化本地文件root.data,性能較高;db模式為高可用模式,全局事務(wù)會話信息通過db共享,相應(yīng)性能差些;

建表(僅db) 

tc服務(wù)在管理分布式事務(wù)時,需要記錄事務(wù)相關(guān)數(shù)據(jù)到數(shù)據(jù)庫中,你需要提前創(chuàng)建好這些表。 

全局事務(wù)會話信息由3塊內(nèi)容構(gòu)成,全局事務(wù)-->分支事務(wù)-->全局鎖,對應(yīng)表global_table、branch_table、lock_table。

新建一個名為seata的數(shù)據(jù)庫  ,然后執(zhí)行以下sql語句

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- 分支事務(wù)表
-- ----------------------------
DROP TABLE IF EXISTS `branch_table`;
CREATE TABLE `branch_table`  (
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `resource_group_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `resource_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `branch_type` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `status` tinyint(4) NULL DEFAULT NULL,
  `client_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gmt_create` datetime(6) NULL DEFAULT NULL,
  `gmt_modified` datetime(6) NULL DEFAULT NULL,
  PRIMARY KEY (`branch_id`) USING BTREE,
  INDEX `idx_xid`(`xid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
-- ----------------------------
-- 全局事務(wù)表
-- ----------------------------
DROP TABLE IF EXISTS `global_table`;
CREATE TABLE `global_table`  (
  `xid` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `transaction_id` bigint(20) NULL DEFAULT NULL,
  `status` tinyint(4) NOT NULL,
  `application_id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `transaction_service_group` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `transaction_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `timeout` int(11) NULL DEFAULT NULL,
  `begin_time` bigint(20) NULL DEFAULT NULL,
  `application_data` varchar(2000) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `gmt_create` datetime NULL DEFAULT NULL,
  `gmt_modified` datetime NULL DEFAULT NULL,
  PRIMARY KEY (`xid`) USING BTREE,
  INDEX `idx_gmt_modified_status`(`gmt_modified`, `status`) USING BTREE,
  INDEX `idx_transaction_id`(`transaction_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS = 1;

啟動 

進入bin目錄,運行其中的seata-server.bat即可:  

啟動成功后,seata-server應(yīng)該已經(jīng)注冊到nacos注冊中心了。

到此這篇關(guān)于SpringCloud之Seata基本介紹與安裝的文章就介紹到這了,更多相關(guān)SpringCloud Seata安裝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java整合Redis實現(xiàn)坐標附近查詢功能

    Java整合Redis實現(xiàn)坐標附近查詢功能

    這篇文章主要介紹了Java整合Redis實現(xiàn)坐標附近查詢,我們可以在redis服務(wù)器使用命令 help xxx 查看指令的具體用法,本文給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2023-11-11
  • SpringMVC異步處理的 5 種方式示例詳解

    SpringMVC異步處理的 5 種方式示例詳解

    這篇文章主要介紹了SpringMVC異步處理的 5 種方式,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • Spring依賴注入與第三方Bean管理基礎(chǔ)詳解

    Spring依賴注入與第三方Bean管理基礎(chǔ)詳解

    依賴注入(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個概念。具體含義是:當(dāng)某個角色(可能是一個Java實例,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時,在 傳統(tǒng)的程序設(shè)計過程中,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例
    2022-12-12
  • SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次

    SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次

    本文主要介紹了SpringBoot中@Scheduled實現(xiàn)服務(wù)啟動時執(zhí)行一次,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • 將Java程序打包成EXE文件的實現(xiàn)方式

    將Java程序打包成EXE文件的實現(xiàn)方式

    這篇文章主要介紹了將Java程序打包成EXE文件的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)

    Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)

    這篇文章主要介紹了Java 添加、刪除、替換、格式化Word中的文本(基于Spire.Cloud.SDK for Java),本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Java Swing JCheckBox復(fù)選框的實現(xiàn)方法

    Java Swing JCheckBox復(fù)選框的實現(xiàn)方法

    這篇文章主要介紹了Java Swing JCheckBox復(fù)選框的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 啟動Spring項目詳細過程(小結(jié))

    啟動Spring項目詳細過程(小結(jié))

    這篇文章主要介紹了啟動Spring項目詳細過程(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Mybatis 傳參與排序模糊查詢功能實現(xiàn)

    Mybatis 傳參與排序模糊查詢功能實現(xiàn)

    這篇文章主要介紹了Mybatis 傳參與排序模糊查詢功能實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-04-04
  • 在SpringBoot中實現(xiàn)斷點續(xù)傳的實例代碼

    在SpringBoot中實現(xiàn)斷點續(xù)傳的實例代碼

    在 Spring Boot 或任何其他 web 開發(fā)框架中,斷點續(xù)傳是一種技術(shù),允許文件的傳輸在中斷后可以從中斷點重新開始,而不是從頭開始,種技術(shù)在處理大文件或在不穩(wěn)定的網(wǎng)絡(luò)環(huán)境中尤為重要,本文給大家介紹了SpringBoot中實現(xiàn)斷點續(xù)傳的實例代碼,需要的朋友可以參考下
    2024-07-07

最新評論