分布式事务解决方案

分布式事务解决方案

1、本地事务

事务的四大特性

原子性

 

 

一致性

 

 

隔离性

持久性

 

 而其中原子性、隔离性、持久性数据库可以完成,而原子性和持久性则是通过undo和redo日志来实现

undo和redo mysql中与事务有关的日志

 undo Log:

 

 

 

 

 

  redo Log:

 

 

 

 原本试讲undo log写入磁盘,但是实际上试讲undo log写入redo log,从而充分发挥redo log的优势(写入磁盘的方式是顺序写

 

 

 分布式事务

 

 

 

 如何解决分布式事务

CAP定理

 

 

 

 

2、两阶段提交

用户请求请求我们微服务,微服务调用哪个其他微服务时,当牵扯数据库操作时,由我们的事务协调器(事务管理器)先进性预提交(此时是占用数据库数据资源),当所有的操作(sql)都正常执行,

在进行真正的提交,中间有一个过程出错,所有的执行回滚操作。从而实现分布式事务,所有的分布式事务都无法保证100%的一致,并且允许柔性事务。

3、TCC

try confirm  cancel 

4、可靠消息服务

 

 1、必须保证消息的可靠

2、无法回滚成功服务的事务

为了保证消息的可靠,引入本地消息表,通过本地消息表和定时任务去保证消息可靠

5、AT模式

 

 

 

 第一阶段与TCC模式一样,每个服务单独执行事务,事务执行成功后直接提交,而当某一个服务出现失败,由框架执行补偿操作,TCC是人为去进行补偿操作,而且没有try的过程直接写业务,操作数据库

 

 一阶段:

 

 二阶段:会获取所有阶段一的返回结果,如果都成功,清空阶段一生成的两个日志,如果有失败的便获取before imag中的数据进行回滚,在这之前先通过after imag去进行比对现在的数据是否是执行修改后的数据,

一旦不一致说明出现脏数据,需要人工干预

 

 

 

 

 

 

 

1、搭建TC服务

 

 

 解压后的目录结构

 

 解压后需要配置两个配置文件,registry.conf 和 file.conf

registry.conf

注册中心,TC需要将自己注册到我们的注册中心中

 

配置中心

 

 

 file.conf

1、配置TC的信息往哪存(两种方式file 或 db)

 

 

 

 2、所有服务参与者引入RM TM

事务的发起者也就是我们服务调用方进行如下操作

(1)导入相关的依赖

 

 

 

 (2)添加配置文件

 

 配置一个事务组

(3)项目中添加两个文件 file.conf registry.conf

file.conf

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 其中vgroupMapping中与版本有关,可能是vgroupMapping或者vgroup_mapping

这是file的核心配置,其中mapping.test_tx_group是我们配置文件配置内容,seata_tc_server是我们配置中心TC的实例名,从而可以获取到我们Tc

 

 registry.conf

基本与TC配置一样

(4)代理DataSource

 

(5)添加事务注解

 事务的参与者与发起者几乎相同,少了一步开启事务组注解,只需要添加本地事务

 

posted @ 2021-06-28 17:46  javazmd  阅读(74)  评论(0编辑  收藏  举报