Seata介绍、原理、配置_seata配置-程序员宅基地

技术标签: java  数据库  分布式  

目录

介绍:

核心组件:

原理:

Seata 会有 4 种分布式事务解决方案,分别是 AT 模式、TCC 模式、Saga 模式和 XA 模式

AT模式原理:

一阶段:

二阶段提交:

二阶段回滚:

Seata配置:(Windows环境)

1.下载seata

2.配置文件

在seata的conf目录下找到配置文件

修改1:

修改2:

修改3:

3.配置seata数据库

使用自带sql文件导入到上面配置的store数据库所在位置,需要先创建seata数据库

4.Nacos添加配置文件

在Nacos中添加配置:

5.启动


介绍:

Seata是一款开源的分布式事务解决方案,可以用于解决分布式系统中的数据一致性问题。它是由阿里巴巴集团发起的开源项目,目前得到了广泛的应用和支持。在 Seata 开源之前,其内部版本在阿里系内部一直扮演着应用架构层数据一致性的中间件角色,帮助经济体平稳的度过历年的双11

在分布式系统中,由于数据存储在不同的节点上,因此需要保证分布式事务的原子性(即要么全部成功,要么全部失败),否则将会出现数据不一致的情况。Seata提供了一种可靠的分布式事务解决方案,可以对全局事务进行管理和协调,从而实现分布式事务的原子性。

核心组件:

  • Transaction Coordinator(TC):负责全局事务的生命周期管理和协调,保证所有分支事务的一致性。
  • Transaction Manager(TM):负责分支事务的提交和回滚,接受TC的指令并执行相应的事务操作。
  • Resource Manager(RM):负责本地事务的提交和回滚,与TM进行通信,执行相应的事务操作。

原理:

上图Business、Storage、Order、Account独立的微服务相互之间的调用关系。

1、Business调用@GlobalTransaction注解的方法时,首先向TC注册全局事务,表示全局事务的开始,同时TC生成XID,并返回给TM;

2、Business调用Storage时,将XID传递给Storage;

3、Storage得到XID后,访问TC,注册分支事务,并从TC获得分支事务ID,TC根据XID将分支事务与全局事务关联;

4、Storage开始执行SQL语句,如果执行过程中没有异常,通知TC分支事务成功;

5、Business调用完Storage后,调用Order;

6、Order、Account与TC之间的交互与Order完全一致;

7、分支服务都成功后,Business通过TM通知TC全局事务成功,如果失败了,服务A也会通知TC全局事务失败;

8、TC记录了全局事务下的每个分支事务,TC收到全局事务的结果后,如果结果成功,则通知RM成功,RM收到通知后清理之前在数据库中保存的回滚记录,如果失败了,则RM要查询出之前在数据库保存的回滚记录,对之前的SQL操作进行回滚。

每个分支事务对应的数据库中都需要有一个回滚日志表 UNDO_LOG,在真正修改数据库记录之前,都会先记录修改前的记录值,以便之后回滚。在收到回滚请求后,就会根据 UNDO_LOG 生成回滚操作的 SQL 语句来执行。如果收到的是提交请求,就把 UNDO_LOG 中的相应记录删除掉。

Seata 会有 4 种分布式事务解决方案,分别是 AT 模式、TCC 模式、Saga 模式和 XA 模式

AT 模式是一种无侵入的分布式事务解决方案。在 AT 模式下,用户只需关注自己的“业务 SQL”,用户的 “业务 SQL”作为一阶段,Seata 框架会自动生成事务的二阶段提交和回滚操作。实际开发中AT模式使用较多,这里仅对AT模式进行分析。

AT模式原理:

1、阶段一RM的工作:① 注册分支事务 ② 记录undo-log(数据快照)③ 执行业务sql并提交 ④报告事务状态

2、阶段二提交时RM的工作:删除undo-log即可

3、阶段二回滚时RM的工作:根据undo-log恢复数据到更新前

Seata配置:(Windows环境)

1.下载seata

 下载地址:GitHub - seata/seata: Seata is an easy-to-use, high-performance, open source distributed transaction solution. 根据需要下载Windows或者Linux版本

2.配置文件

在seata的conf目录下找到配置文件

修改1:

修改2:

修改3:

3.配置seata数据库

使用自带sql文件导入到上面配置的store数据库所在位置,需要先创建seata数据库

4.Nacos添加配置文件

transport.type=TCP
transport.server=NIO
transport.heartbeat=true
transport.enableClientBatchSendRequest=false
transport.threadFactory.bossThreadPrefix=NettyBoss
transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker
transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler
transport.threadFactory.shareBossWorker=false
transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector
transport.threadFactory.clientSelectorThreadSize=1
transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread
transport.threadFactory.bossThreadSize=1
transport.threadFactory.workerThreadSize=default
transport.shutdown.wait=3
#my-tx-groip需要记住,后面要用
service.vgroupMapping.my_tx_group=default
service.default.grouplist=127.0.0.1:8091
service.enableDegrade=false
service.disableGlobalTransaction=false
client.rm.asyncCommitBufferLimit=10000
client.rm.lock.retryInterval=10
client.rm.lock.retryTimes=30
client.rm.lock.retryPolicyBranchRollbackOnConflict=true
client.rm.reportRetryCount=5
client.rm.tableMetaCheckEnable=false
client.rm.tableMetaCheckerInterval=60000
client.rm.sqlParserType=druid
client.rm.reportSuccessEnable=false
client.rm.sagaBranchRegisterEnable=false
client.tm.commitRetryCount=5
client.tm.rollbackRetryCount=5
client.tm.defaultGlobalTransactionTimeout=60000
client.tm.degradeCheck=false
client.tm.degradeCheckAllowTimes=10
client.tm.degradeCheckPeriod=2000
store.mode=db
store.publicKey=
store.file.dir=file_store/data
store.file.maxBranchSessionSize=16384
store.file.maxGlobalSessionSize=512
store.file.fileWriteBufferCacheSize=16384
store.file.flushDiskMode=async
store.file.sessionReloadReadSize=100
store.db.datasource=druid
store.db.dbType=mysql
#数据库修改上面配置的位置
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true
store.db.user=root
store.db.password=123456
#--------------#
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
store.redis.mode=single
store.redis.single.host=127.0.0.1
store.redis.single.port=6379
store.redis.maxConn=10
store.redis.minConn=1
store.redis.maxTotal=100
store.redis.database=0
store.redis.password=
store.redis.queryLimit=100
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
client.undo.dataValidation=true
client.undo.logSerialization=jackson
client.undo.onlyCareUpdateColumns=true
server.undo.logSaveDays=7
server.undo.logDeletePeriod=86400000
client.undo.logTable=undo_log
client.undo.compress.enable=true
client.undo.compress.type=zip
client.undo.compress.threshold=64k
log.exceptionRate=100
transport.serialization=seata
transport.compressor=none
metrics.enabled=false
metrics.registryType=compact
metrics.exporterList=prometheus
metrics.exporterPrometheusPort=9898

配置文件的注意事项:

service.vgroupMapping.my_tx_group=default

数据库修改上面配置的位置

在Nacos中添加配置:

5.启动

继续阅读SpringBoot整合Seata: 

https://blog.csdn.net/weixin_58724261/article/details/131126601

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_58724261/article/details/131124980

智能推荐

斑马线分析_儿童理发店将斑马线搬了进来,孩子都争着来当“交警”-程序员宅基地

文章浏览阅读337次。食堂君:设计儿童理发店似乎是一个少见的案例,我们能以下案例中,找出一些关于儿童的设计要点。itD首次对儿童理发品牌进行空间设计。设计之初,我们思考的一个要点是:如何将空间元素与斑马线儿童理发品牌自然地连接在一起,并通过整个空间故事让顾客对斑马线产生品牌记忆点?经过前期调研分析,我们发现大多儿童理发品牌的空间多使用动物和汽车元素,且无故事脉络串联,仅填塞各种儿童可能会喜欢的形象,而缺乏空间..._斑马线儿童理发品牌终端空间设计

caffe学习:calssfication示例解析_clasiffication_final-程序员宅基地

文章浏览阅读693次。结合前面学习的内容,整理一下caffe的官方示例_clasiffication_final

Webstorm的安装和使用基础教程-程序员宅基地

文章浏览阅读1.8k次。说一下使用Webstorm的原因,在此之前,我一直使用的是HBuilder编辑器,最近使用小程序框架mpvue开发,由于微信开发者工具对vue不太友好,vue编写界面无法查看,大家就推荐了Webstorm。于是,使用了大家推荐的这一款号称前端开发领域最好用的编辑器,果不其然,从此就不想再用别的了。1:安装官网地址:http://www...._idea怎么使用webstorm

【计算机毕业设计】基于SpringBoot+Vue高校食堂物流管理系统的设计与实现_高校食堂管理系统的设计与实现-程序员宅基地

文章浏览阅读199次,点赞3次,收藏3次。高校食堂物流管理系统,主要的模块包括管理员;首页、个人中心、管理员管理、用户管理、采购人员管理、财务管理、供应商信息管理、商品管理、出入库管理、基础数据管理,财务;首页、个人中心、财务管理、供应商信息管理、商品管理、出入库管理,仓库管理员;首页、个人中心、采购人员管理、财务管理、供应商信息管理、商品管理、出入库管理,采购;首页、个人中心、采购人员管理、供应商信息管理、商品管理、出入库管理等功能。_高校食堂管理系统的设计与实现

L298N电机驱动_l298n能驱动n20吗-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏5次。L298N电机驱动_l298n能驱动n20吗

CDN架构原理、流量模型、网络调优_cdn 95带宽算法优化-程序员宅基地

文章浏览阅读1k次。详细的知识参考 :https://www.cnblogs.com/zousong/p/10925445.htmlCDN全称:Content Delivery Network或Content Ddistribute Network,即内容分发网络基本思路:尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离.._cdn 95带宽算法优化

随便推点

HTML的列表标签,表格table和表单标签_html用ul写表格-程序员宅基地

文章浏览阅读710次。名词1名词1解释1...名词2名词2解释1名词2解释2..._html用ul写表格

HDU - 4333 Revolving Digits(扩展KMP)-程序员宅基地

文章浏览阅读187次。题目链接:点击查看题目大意:给出一个由 n 个数位组成的数字,现在可以通过将其不同的后缀移到前面来组成 n 个新的数字,现在要求出 n 个新数字进行去重后,有多少个新数字分别大于、等于、小于原数字如:1234进行上述转移可以得到的四个新数字分别为:1234,4123,3412,2341题目分析:如果暴力的比较虽然看似只需要枚举 n 个新的字符串,但是每个字符串的比较还需要花费O(n)的..._hdu - 4333

教练式辅导-GROW模型的分析与运用_用grow模型对下属进行辅导时,为了帮助下属看到更多的可能性,开启思路,管理者常用-程序员宅基地

文章浏览阅读2.1w次。http://pengtyao.iteye.com/blog/1462045_用grow模型对下属进行辅导时,为了帮助下属看到更多的可能性,开启思路,管理者常用

网线:568A 568B线序-程序员宅基地

文章浏览阅读10w+次,点赞23次,收藏111次。1.网线水晶头为什么要分568A、568B?这要从平行线交叉线说起。平行线:网线2头都做成568B标准,就叫平行线。用于双机不同级连接,比如交换机连电脑。交换机连路由器。交叉线:网线一头做成568B,另一头做成568A,就叫交叉线。用于双机同级连接,比如电脑连电脑,交换机连交换机。现在都是平行线做法,设备能够自己识别。2.568A和568B的区别区别在线序上。568A:白绿,绿,白橙,蓝,白蓝,橙,白棕,棕568B:白橙,橙,白绿,蓝,白蓝,绿,白棕,棕3.为什么不是颜色一致就可以?很多_568b

城市按A-Z json表_全国字母检索城市json-程序员宅基地

文章浏览阅读823次。城市按A-Z转载于https://blog.csdn.net/qq_36856163/article/details/97109683citys:{“hot”:[{“id”: 1,“spell”: “ab”,“name”: “北京”}, {“id”: 2,“spell”: “ab”,“name”: “上海”}],“A”: [{“id”: “161”,“spell”: “anshan”,“name”: “鞍山”}, {“id”: “226”,“spell”: “anqing_全国字母检索城市json

安装 Sublime-程序员宅基地

文章浏览阅读75次。2018 05 224月30更新版本 Build 3176Version 3.1 3176Sublime Text Build 3176 ( 3.1 )--------------- 安装 Sublime --------------官网: https://www.sublimetext.com/3中文官网: http://sublimetextcn.com/3/..._also available as a portable version