事务

保证 事务的持久性、原子性、隔离性, 是为了实现最终一致性
分布式事务 - 图1

分布式事务理论基础

CAP 与 BASE 理论

CAP 理论

分布式事务 - 图2
在cap 理论中,一个分布式系统 ,设计读写操作时只能满足 三点中的两个

  • 一致性(Consistence): 所有节点访问同一份最新的数据副本
  • 可用性(Availability): 非故障的节点在合理的时间内返回合理的数据
  • 分区容错性(Partition tolerance): 分布式系统出现网格分区时,仍然能对外提供服务

    多个系统中网络出现中断,功能根据网络连接分割成区域

注意不是三选二
分布式系统不能没有P(分区容错),那实际上我们可以选的就只有PA,PC
如果没有发生网络分区,我们还是需要尽量保证c和a

BASE 理论

base理论是cap理论的一个延伸和发展,我们在网络分区情况下在牺牲一定强一致性,根据每个节点业务特点尽量保证每个节点的最终一致性
Base的理论三要素
分布式事务 - 图3

  1. 基本可用 在发生不可控的网络问题时,保证一定程度上的系统可用性。
  2. 软状态 允许数据存在中间状态, 并认为该中间状态不会影响系统的整体可用性。
  3. 最终一致 系统中的数据 ,经过一定时间,最终能达到一个一致的状态


一致性级别:

  1. 弱一致性:不保证在某些时间之后数据的一致性。
  2. 强一致性: 写入什么 读取就是什么。
  3. 最终一致性:保证一定时间之后数据的一致性,弱一致性的升级版。


分布式理论方案:

根据对一致性的区分,可以简略地分为最终一致性与强一致性。
最终一致性:tcc 消息表 saga
强一致性: 2pc 3pc

强一致性:

2pc:

分为两个阶段准备阶段与提交阶段
准备阶段:会通知各个事务点,准备好事务,但不提交等待总事务控制器的指令。
提交阶段:总事务控制器等待全部准备好后 ,发送命令全部执行 ,
事务点收到执行命令后,返回执行结果
总是事务控制器根据各节点的结果来决定是否回滚。

mysql与oracle 天然支持,实现简单
seata的act模式也是2pc模式的加强

存在问题:
事务会存在阻塞性
消息一致:在二阶段时, 网络问题导致各节点不一定能收得到其执行事务或回滚的操作。

3pc模式

3PC模式是2PC模式的一个延展
主要不同点在于准备阶段会有一个问询操作,询问节点是否可以执行事务
事务控制器收到全部就绪之后,会发送消息执行所有事务

tcc模式

是后来互联网经过发展提出的一种模式
try: 事务总控制器会询问各节点是否可以执行事务,各节点会的锁定部分数据,保证收到消息之后的事务可执行。
事务总控制器收到所有的就绪后,会发送消息,让各节点执行事务。
catch阶段: 如果中间发生了意外问题,事务控制器会发送消息,让各节点解锁锁定数据与回滚

tcc模式是严重侵入式,就要开发人员在代码里做一定处理。

saga模式

相比于tcc模式,准备阶段不会让各节点锁定数据,而是发送消息直接执行。

相比于tcc模式,无法保证事务的隔离性。事务操作的数据会被其它操作修改导致事务失败

seata模式好像两种都支持,需要我补充后续