一:什么是事务?
1.1)什么是事物?
事务是逻辑上的一组执行单元,要么都执行,要么都不执行.
eg: 张三给李四转1000元钱, 涉及到二个操作
张三的账户-1000 李四的账户+1000
上诉二个步骤要么一起成功,要么一起失败. 不存在张三的钱扣了,李四
没收到转账.
1.2)事物的特性(ACID)
什么是ACID
ACID是指数据库管理系统DBMS中事物所具有四个特性
eg:在数据库系统中,一个事务由一系列的数据库操作组成一个完整的
逻辑过程,比如银行转账,从原账户扣除金额,目标账户增加金额
①:atomicity【原子性】
原子性表现为操作不能被分割,那么这二个操作 要么同时完成,要
么就全部不完成,若事务出错了,那么事务就会回滚,
好像什么 都 没有发生过
②:Consistency【一致性】
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,
事务开始前是一个一致状态,事务结束后是另一个一致状态,
事务将数据库从一个一致状态转移到另一个一致状态
③:Isolation【隔离性】所谓的独立性就是指并发的事务之间不会互相影响,如果一个事务
要访问的数据正在被另外一个事务修改,只要另外一个事务还未提交,它
所访问的数据就不受未提交事务的影响。换句话说,一个事务的影响在该
事务提交前对其它事务是不可见的
④:Durability【持久性】
若事务已经提交了,那么就回在数据库中永久的保存下来
 
 
  • eata-Server设计
    seata-server是一个单独进程服务,与TM/RM的交互是RPC

seata 分布式解决方案:

image

1)Coordinator Core:最下面的模块是事务协调器核心代码,主要用来处理事务协调的逻辑,如是否 Commit、Rollback 等协调活动。

2)Store:存储模块,用来将我们的数据持久化,防止重启或者宕机数据丢失。

3)Discover:服务注册/发现模块,用于将 Server 地址暴露给 Client。

4)Config:用来存储和查找服务端的配置。

5)Lock:锁模块,用于给 Seata 提供全局锁的功能。

6)Rpc:用于和其他端通信。

7)HA-Cluster:高可用集群,目前还没开源。为 Seata 提供可靠的高可用功能。

  • 核心组件

    TC: 事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚(server端)。

    TM: 控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议(client端)。

    RM:控制分支事务,负责分支注册、状态汇报,并接收事务协调器的指令,驱动分支(本地)事务的提交和回滚(client端)。

    seata 分布式解决方案:

    image

开启全局事物
以@GlobalTransactional为入口,GlobalTransactionalInterceptor为切入点,稍后会讲到
TM会向TC发起一个请求(服务端使用的netty)开启一个全局事物,生成全局事物的XID,通过服务调用链路传播

开启分支事物
执行业务代码,准备开启分支事物。
分支事物开启的原理:
1.由于seata对底层的DataSource,Connection等使用DataSourceProxy,ConnectionProxy代理

2.当进行数据库操作的时候,ConnectionProxy会判断是否包含全局事物
2.1 包含全局食物
2.1.1 RM向TC发起请求注册分支事物
2.1.2 插入回滚日志(undo_log表,业务库必须新建这个表)
2.1.3 事物提交
2.1.4 向TC上报事物状态
2.2 不包含全局事物
2.2.1 事物提交

 

 

参考博文:https://www.jianshu.com/p/fe8c48f38382

 
 

相关文章:

  • 2021-09-30
  • 2021-08-05
  • 2021-12-07
  • 2021-07-28
  • 2022-12-23
  • 2021-09-27
  • 2021-10-28
猜你喜欢
  • 2020-05-31
  • 2022-12-23
  • 2021-04-04
  • 2021-07-30
  • 2021-07-11
  • 2021-05-03
  • 2021-07-16
相关资源
相似解决方案