blog icon indicating copy to clipboard operation
blog copied to clipboard

一文读懂分布式事务

Open TFdream opened this issue 4 years ago • 0 comments

1. 事务基本概念

1.1 什么是事务?

事务是恢复和并发控制的基本单位,事务有四个特性(ACID):

  • 原子性(Atomicity):可以理解为一个事务内的所有操作要么都执行,要么都不执行。
  • 一 致性(Consistency):可以理解为不会存在中间状态的数据,一个事务的执行会使数据从一个一致状态切换到另一个一致的状态;
  • 隔离性(Isolation):指的是多个事务并发执行的时候不会互相干扰,即一个事务内部的数据对于其他事务来说是隔离的。
  • 持久性(Durability):指的是一个事务提交成功之后数据就被永远保存下来,之后的其他操作或故障都不会对事务的结果产生影响。

2 分布式事务

2.1 分布式事务概念

随着互联网高速发展,事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点 之上。简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用。在这种 环境中,我们之前说过数据库的 ACID 四大特性,已经无法满足我们分布式事务。

分布式事务的最大挑战在于CAP,在《CAP理论与MongoDB一致性、可用性的一些思考》一文中有详细介绍。简而言之,由于网络分割(P: Network Partition)的存在,用户不得不在一致性(C Consistency)与可用性(A: Avaliable)之前做权衡。如果要保证强一致性(主要是应用层面的强一致性),那么在网络分割的时候,系统就不可用;如果要保证高可用性,那么就只能提供弱一致性,保证最终一致。下面提到的各种实现分布式事务的方法、协议都需要在一致性与可用性之间权衡。

2.2 CAP 理论

CAP 定理,又被叫作布鲁尔定理。 CAP 指的是:

  • 一致性(Consistency):数据在多个副本之间是否能够保持一致的特性。当执行数据更新操作后,仍然可保证数据处于一致的状态。
  • 可用性(Availability):系统提供的服务必须一直处于可用的状态。对于用户的每一个操作情况总是能够在有限的时间内返回结果。这个有限时间是系统设计之初就指定好的系统运行指标。返回的结果指的是系统返回用户的一个正常响应结果,而不是系统错误信息。
  • 分区容错性(Partition tolerance):分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

CAP 定律说的是,在一个分布式系统中,最多只能满足 C、A、P 中的两个,不可能三个同时满足。而在分布式系统中,网络无法 100% 可靠,分区其实是一个必然现象。

一个分布式系统无法同时满足这三个条件,只能满足两个,意味着我们要抛弃其中一项。

  • CA,放弃P:将所有数据都放在一个分布式节点上,这同时放弃了系统的可扩展性。
  • CP,放弃A:一旦系统遇到故障,受影响的服务器需要等待一段时间,在恢复期间无法对外提供正常的服务。
  • AP,放弃C:这里的放弃一致性是指放弃数据强一致性,而保留数据的最终一致性。系统无法实时保持数据的一致性,但承诺在一个限定的时间内,数据最终能够达到一致的状态。

对于分布式系统而言,分区容错性是一个最基本的要求,因为分布式系统中的组件必然需要部署到不同的节点,必然会出现网络分区(网络分区:俗称“脑裂”, 当网络分区出现时,分布式系统会出现局部小集群)的情形,所以我们只能选择 CP 或者 AP 架构。因此,设计人员必须在一致性与可用性之间做出选择。

2.3 BASE 理论

BASE理论是指:Basically Available(基本可用),Soft-state(软状态),Eventual Consistency(最终一致性)。是基于CAP定理演化而来,是对CAP中一致性和可用性权衡的结果。

核心思想:即使无法做到强一致性,但每个业务根据自身的特点,采用适当的方式来使系统达到最终一致性。

  • Basically Available(基本可用):指分布式系统在出现故障的时候,允许损失部分可用性,保证核心可用。但不等价于不可用。
  • Soft-state(软状态):软状态是指允许系统存在中间状态,并且该中间状态不会影响系统整体可用性。即允许系统在不同节点间副本同步的时候存在延时。
  • Eventual Consistency(最终一致性):系统中的所有数据副本经过一定时间后,最终能够达到一致的状态,不需要实时保证系统数据的强一致性。最终一致性是弱一致性的一种特殊情况。

3 解决方案

描述分布式事务,常常会使用以下几个名词:

  • 事务参与者:例如每个数据库就是一个事务参与者
  • 事务协调者(Transaction Coordinator):事务的发起者称协调者
  • 资源管理器(Resource Manager, RM):通常与事务参与者同义
  • 事务管理器(Transaction Manager, TM):通常与事务协调者同义

在分布式事务模型中,一个 TM 管理多个 RM,即一个服务程序访问多个数据源;TM 是一个全局事务管理器,协调多方本地事务的进度,使其共同提交或回滚,最终达成一种全局的 ACID 特性。

1、两阶段提交(2PC)

两阶段提交又称2PC(two-phase commit protocol),2pc是一个非常经典的强一致、中心化的原子提交协议。这里所说的中心化是指协议中有两类节点:一个是中心化协调者节点(coordinator)和N个参与者节点(partcipant)。

2、3PC

3、本地消息表

4、事务型消息

5、TCC

6、Saga模式

参考资料

TFdream avatar Aug 16 '21 03:08 TFdream