数据库技术 - 分布式事务

46 阅读3分钟

前言

8题。

什么是分布式事务?

假设有如下场景,一个业务包含多个子业务,这些子业务分布在不同的服务器或者数据库上,此时就需要使用分布式事务来保证这些子业务同时成功或失败。本质上来说,这种场景涉及多个数据源,分布式事务就是为了保证不同数据库的数据一致性。

产生分布式事务的原因主要有:

  1. 跨库事务:操作多个库,不同的库中存储不同的业务数据;

  2. 跨服务事务:调用多个微服务,不同的微服务操作的是不同的数据库。

什么是CAP理论?

CAP分别是一致性、可用性、分区容错性:CAP定理是指这个三个指标最多可以同时满足两个。

CP表示强一致性,AP表示可用性。

为什么分布式系统中无法同时AC?

对于分布式系统而言,因为网络交互可能会存在延时或者网络不可用的状态,所以分区是不可避免的。

在此条件下,若要保证各节点的一致性,就必须等待数据同步完才能正常访问服务,同时提交同时回滚达成强一致性,这就无法满足可用性;若要保证各节点的可用性,就必须在接收到请求后立即返回响应,这个时候可能还没有完成数据的统一,所以就无法满足一致性。所以,在存在系统分区的场景下,可用性和一致性无法同时满足。

什么是BASE理论?

BASE理论是CAP理论的延伸,核心思想是即使无法做到强一致性,但可以采用适合的方式达到最终一致性。

分布式事务的解决方案有哪些?

常见的有2PCTCC,还可以用MQ来做:

  • 2PC:它是一种保证强一致性的处理方式,主要将事务分为两个阶段:
  1. 准备阶段(P):所有参与者都将本事务执行预提交,并将能否成功的信息反馈发给协调者;

  2. 提交阶段(c):协调者根据所有参与者的反馈,通知所有参与者,一起执行提交或回滚;

必须在最后阶段释放锁资源。

  • TCC:又称补偿事务,它是一种保证最终一致性的处理方式,分为两阶段:
  1. RM将分支事务注册到TC,执行try操作预留资源,然后向TC报告事务状态;

  2. 根据各分支事务的状态执行confirm提交或者cancel回滚。

场景- 涉及到非关系型数据库时(Redis)。

  • MQ分布式事务:如果数据强一致性要求没那么高,可以采用消息中间件(MQ)实现事务最终一致。

Seata的架构是什么?

Seata事务管理中有三个重要的角色:

  • 事务协调者-TC (Transaction Coordinator) :保存分支事务的状态,根据结果决定最后是提交还是回滚;

  • 事务管理器-TM (Transaction Manager) :定义全局事务的范围、开始、提交或回滚全局事务;

  • 资源管理器-RM (Resource Manager) :向TC上报分支事务的状态,并根据状态判断提交或回滚。

XA模式的工作流程是什么?

XA模式的工作流程是:执行sql后事务不提交(意味着一直占用connection)等多个sql都执行后再统一提交或回滚(CP)。

XA模式要等所有事务执行完毕才能提交,牺牲了可用性,保证了强一致性。

AT模型的工作原理是什么?

AT模型的工作原理是:执行sql后事务提交,保存快照(修改前数据)到undolog表中,等多个sql执行后,若都成功就删除快照,若有失败的就从快照表中读取数据恢复(AP)。

AT保证了可用性,实现最终一致性。