当前位置: 首页 > 图灵资讯 > 技术篇> 分布式事务

分布式事务

来源:图灵教育
时间:2023-10-29 14:06:33

分布式事务1.分布式事务问题1.1.本地事务

本地事务,即传统的单机事务。在传统的数据库事务中,必须遵循四个原则:

image-20210724165045186

1.2.分布式事务

分布式事务是指不在单个服务或单个数据库架构下产生的事务,如:

  • 跨数据源的分布式事务
  • 跨服务分布式事务
  • 综合情况

数据库水平拆分和服务垂直拆分后,业务操作通常需要跨多个数据库和服务才能完成。例如,电子商务行业常见的订单付款案例包括以下行为:

  • 创建新订单
  • 扣除商品库存
  • 从用户账户余额中扣除的金额

完成上述操作需要访问三个不同的微服务和三个不同的数据库。

image-20210724165338958

每个服务和数据库中的订单创建、库存扣除、账户扣除都是本地事务,可以保证ACID原则。

但是当我们把三件事当作一件事的时候"业务",为了满足保证“业务”的原子性,要么所有操作都成功,要么所有操作都失败,部分成功和部分失败是不允许的。这是分布式系统下的事务。

此时ACID难以满足,这是分布式事务需要解决的问题

1.3.演示分布式事务

我们通过一个案例来演示分布式事务的问题:

微服务结构如下:

image-20210724165729273

其中:

seata-demo:依靠父亲的项目负责项目的管理

  • account-service:账户服务负责用户资金账户的管理。提供扣除余额的界面
  • storage-service:库存服务负责商品库存的管理。提供扣除库存的接口
  • order-service:负责订单管理的订单服务。创建订单时,需要调用account-service和service。storage-service

3)启动nacos、所有微服务

4)测试订单功能,发出Post请求:

请求如下:

curl --location --request POST 'http://localhost:8082/order?userId=user202103032042012&commodityCode=100202003032041&count=20&money=200'

如图:

image-20210724170113404

测试发现,当库存不足时,如果余额已经扣除,就不会回滚,就会出现分布式事务问题。

2.理论基础

要解决分布式事务问题,需要一些分布式系统的基础知识作为理论指导。

2.1.CAP定理

1998年,加州大学计算机科学家 Eric Brewer 分布式系统有三个指标。

  • Consistency(一致性)
  • Availability(可用性)
  • Partition tolerance (分区容错性)

image-20210724170517944

它们的第一个字母是 C、A、P。

Eric Brewer 这三个指标不可能同时完成。这个结论被称为 CAP 定理。

2.1.1.一致性

Consistency(一致性):用户访问分布式系统中的任何节点,数据必须一致。

例如,现在有两个节点,初始数据是一致的:

image-20210724170704694

当我们修改其中一个节点的数据时,两者之间的数据是不同的:

image-20210724170735847

要保持一致性,必须实现node01 到 Node02的数据 同步:

image-20210724170834855

2.1.2.可用性

Availability (可用性):访问集群中的任何健康节点,用户必须能够得到反应,而不是加班或拒绝。

如图所示,有三个节点集群,任何访问都可以及时响应:

image-20210724170932072

当某些节点因网络故障或其他原因无法访问时,表示节点不能使用:

image-20210724171007516

2.1.3.分区容错

Partition(分区):分布式系统中的一些节点由于网络故障或其他原因与其他节点失去连接,形成独立分区。

image-20210724171041210

Tolerance(容错):当集群出现分区时,整个系统也应继续提供外部服务

2.1.4.矛盾

在分布式系统中,系统之间的网络不能100%保证健康,必然会出现故障,服务必须保证外部服务。所以Partition Tolerance是不可避免的。

当节点接收到新的数据变更时,就会出现问题:

image-20210724171546472

要保证此时的一致性,必须等待网络恢复,完成数据同步后,整个集群才能向外界提供服务,服务处于阻塞状态,不可用。

如果此时要保证可用性,就不能等待网络恢复,那么node01、数据不一致会出现在node02和node03之间。

也就是说,当P肯定会出现时,A和C之间只能实现一个。

2.2.BASE理论

BASE理论是CAP的一种解决方案,包括三个想法:

  • Basically Available (基本可用):当分布式系统出现故障时,允许损失部分的可用性,即确保核心的可用性。
  • **Soft State(软状态):**允许在一定时间内出现中间状态,如临时不一致状态。
  • Eventually Consistent(最终一致性):虽然不能保证强一致性,但最终在软状态结束后达到数据一致性。
2.3.解决分布式事务的思路

分布式事务最大的问题是各子事务的一致性,因此可以借鉴CAP定理和BASE理论,有两种解决方案:

  • AP模式:各子事务分别执行和提交,允许结果不一致,然后采取补偿措施恢复数据,实现最终一致。

  • CP模式:各子事务实施后相互等待,同时提交,同时回滚,达成强烈协议。但在等待事务的过程中,它处于弱可用状态。

但无论是哪种模式,都需要在子系统事务之间进行沟通和协调,即需要**事务协调员(TC)**:

image-20210724172123567

这里的子系统事务称为分支事务;相关分支事务称为全局事务。

包括高质量开源项目在内的博主个人开源博客地址: https://www.chengke.net

上一篇:

初识Seata

下一篇:

方法