最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

2014 年,阿里中間件團(tuán)隊(duì)發(fā)布 TXC(Taobao Transaction Constructor),為集團(tuán)內(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ù)積累,阿里中間件團(tuán)隊(duì)發(fā)起了開源項(xiàng)目 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)器,維護(hù)全局和分支事務(wù)的狀態(tài),協(xié)調(diào)全局事務(wù)提交或回滾 ,直接調(diào)度事務(wù)參與者RM。負(fù)責(zé)將RM的反饋結(jié)果響應(yīng)給TM,并聽從TM的最終決議,將具體決議(提交或回滾)發(fā)送給RM執(zhí)行。相當(dāng)于中間人,主要負(fù)責(zé)維護(hù)全局事務(wù)和分支事務(wù)的狀態(tài)。
  • TM(Transaction Manager):事務(wù)管理器,定義全局事務(wù)的范圍、開始全局事務(wù)、提交或回滾全局事務(wù)。 它是事務(wù)的發(fā)起者(具體的微服務(wù))。根據(jù)RM第一階段的執(zhí)行結(jié)果,進(jìn)行決議。并將決議反饋給TC。相當(dāng)于發(fā)號施令的
  • RM(Resource Manager):資源管理器,管理分支事務(wù)處理的資源,與TC交談以注冊分支事務(wù)和報(bào)告分支事務(wù)的狀態(tài),并驅(qū)動分支事務(wù)提交或回滾。 其實(shí)就是事務(wù)的參與者。獲取TC的執(zhí)行命令具去執(zhí)行分支事務(wù)的第一階段以及第二階段,并將執(zhí)行結(jié)果反饋給TC,相當(dāng)于具體做事的

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

 四種方案

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

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

  • XA模式:強(qiáng)一致性分階段事務(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的默認(rèn)模式

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

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

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

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

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

Saga模式是SEATA提供的長事務(wù)解決方案,在Saga模式中,業(yè)務(wù)流程中每個參與者都提交本地事務(wù),當(dāng)出現(xiàn)某一個參與者失敗則補(bǔ)償前面已經(jīng)成功的參與者,一階段正向服務(wù)和二階段補(bǔ)償服務(wù)都由業(yè)務(wù)開發(fā)實(shí)現(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模式為單機(jī)模式,全局事務(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;

啟動 

進(jìn)入bin目錄,運(yùn)行其中的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數(shù)組添加元素實(shí)例

    Java數(shù)組添加元素實(shí)例

    這篇文章主要介紹了Java數(shù)組添加元素實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java8中使用流方式查詢數(shù)據(jù)庫的方法

    Java8中使用流方式查詢數(shù)據(jù)庫的方法

    這篇文章主要介紹了Java8中使用流方式查詢數(shù)據(jù)庫的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • SpringMVC中使用bean來接收form表單提交的參數(shù)時的注意點(diǎn)

    SpringMVC中使用bean來接收form表單提交的參數(shù)時的注意點(diǎn)

    本篇文章主要介紹了SpringMVC中使用bean來接收form表單提交的參數(shù)時的注意點(diǎn),具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-05-05
  • spring boot讀取Excel操作示例

    spring boot讀取Excel操作示例

    這篇文章主要介紹了spring boot讀取Excel操作,結(jié)合實(shí)例形式詳細(xì)分析了spring boot解析、讀取Excel相關(guān)操作技巧,需要的朋友可以參考下
    2019-11-11
  • Spring Boot 自動裝配的幾種用法示例小結(jié)

    Spring Boot 自動裝配的幾種用法示例小結(jié)

    文章介紹了SpringBoot自動裝配的多種用法,包括基礎(chǔ)的@Bean注冊、策略模式通過applicationContext獲取指定Service實(shí)現(xiàn)類,以及高級的獲取接口所有實(shí)現(xiàn)類集合和Map映射,感興趣的朋友跟隨小編一起看看吧
    2025-07-07
  • Java 中的 NoSuchMethodException 異常及解決思路(最新推薦)

    Java 中的 NoSuchMethodException 異常及解決思路(最新推薦)

    NoSuchMethodException異常是Java中使用反射機(jī)制時常見的錯誤,它通常由方法名或參數(shù)不匹配、訪問權(quán)限問題、方法簽名不匹配等原因引發(fā),解決方法包括核實(shí)方法名及其參數(shù)類型、確認(rèn)方法訪問權(quán)限、檢查方法簽名和重載問題、確保方法存在于正確的類中,感興趣的朋友一起看看吧
    2025-01-01
  • 老生常談foreach(增強(qiáng)for循環(huán))和for的區(qū)別

    老生常談foreach(增強(qiáng)for循環(huán))和for的區(qū)別

    下面小編就為大家?guī)硪黄仙U刦oreach(增強(qiáng)for循環(huán))和for的區(qū)別。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Spring如何基于aop實(shí)現(xiàn)操作日志功能

    Spring如何基于aop實(shí)現(xiàn)操作日志功能

    這篇文章主要介紹了Spring如何基于aop實(shí)現(xiàn)操作日志功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Mybatis-Plus更新操作時遇到的問題及解決方法

    Mybatis-Plus更新操作時遇到的問題及解決方法

    在MyBatis-Plus開啟邏輯刪除時,使用updateById更新邏輯刪除字段時,可能會出現(xiàn)看起來執(zhí)行了但實(shí)際上沒有更新的問題,下面給大家介紹Mybatis-Plus更新操作時遇到的問題及解決方法,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • 枚舉java語言中的修飾符組合的實(shí)例代碼

    枚舉java語言中的修飾符組合的實(shí)例代碼

    這篇文章主要介紹了枚舉java語言中的修飾符組合,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評論

吴川市| 房山区| 吉水县| 鹿邑县| 福贡县| 南投县| 奉贤区| 乌拉特前旗| 会东县| 大理市| 彭阳县| 沧源| 黑山县| 长海县| 紫云| 宕昌县| 永仁县| 深泽县| 福建省| 穆棱市| 仲巴县| 宜良县| 阳信县| 高邮市| 昌宁县| 龙山县| 晋州市| 大方县| 汾阳市| 蓝山县| 兰西县| 儋州市| 肥乡县| 十堰市| 凤翔县| 武夷山市| 睢宁县| 文安县| 尉犁县| 吉水县| 宜良县|