本地事务
使用本地事务,更多是通过关系型数据库数据库来控制事务,利用数据库本身的事务特性ACID实现,因此称数据库事务。
由于主要靠关系型数据库控制事务,而数据库和应用通常在同一个服务器,因此说关系型的数据库事务称为本地事务。
分布式事务
提供服务的各个节点分布在不同的机器上,相互之间通过网络交互,但网络不稳定会出现不一致的问题,因此需要更进一步的理论支持。
CAP理论
CAP分别是Consistency(一致性)、Avaliable(可用性)、Patition tolerant(分区容错性) 的首字母。一个分布式系统只能满足其中两个(CP/AP)
- **一致性 (Consistency)**:指的是写操作后读操作可以读取到最新的数据状态,当数据分布在多个节点上时,从任意节点读取到的数据都是最新状态。这种一致性是强一致性。
- 读写分离架构下(主负责写入,从负责读),写入主数据库后要将数据同步到从数据库。
- 写入主数据库后,同步给从数据库期间,要将从数据库锁住,同步完后再释放锁,以免在同步过程中读数据读取到旧的数据
- 可用性 (Avaliable):任何事务的操作都可以得到响应结果,且不会出现响应超时或者响应错误。
- **分区容错性 (Patition tolerant)**:分布式系统的各个节点部署在不同子网中,这是网络分区。由于网络问题导致某个节点间通信失败,但不影响集群对外提供服务。
- 异步取代同步操作,节点之间解耦合
- 一主多从
权衡
Patition tolerant是在分布式系统中要保证的,因此只能在C和A中权衡:
- 保证一致性 (CP):如银行交易等要求强一致性的场景。实际应用:zookeeper
- 保证用户体验 (AP):MySQL异步复制、半同步复制、Eureka组件
BASE理论
BASE理论是对CAP中AP的扩展,通过牺牲强一致性来获得可用性。当出现故障时,允许部分不可用,但要保证核心功能可用,允许数据在一段时间内不一致,但最终达到一致状态。满足BASE理论的事务,称之为“柔性事务”
- 基本可用(Basically Avaliable):分布式系统出现故障时,允许损失部分功能可用性,但保证核心功能可用
- 电商网站交易付款出现问题,
- 软状态(Soft state):分布式系统中允许存在中间状态(软状态),这个状态不影响系统可用性
- “支付中”,”数据同步中”等,待数据最终一致后改为”成功”状态
- 最终一致性(Eventually consistent):经过一段时间之后,所有节点数据都会达到一致,但需要一定时间的延迟、等待