:::tips

本地事务

本地事务,也就是传统的单机事务,在传统数据库事务中,必须要满足四个原则:

  • 原子性(A):事务中的所有操作,要么全部成功,要么全部失败
  • 一致性(C):保证数据库内部的完整性约束以及声明性约束
  • 隔离性(I):对同一资源的事务不能同时发生
  • 持久性(D):对数据库做的一切修改将永久保存,不管是否出现故障

    分布式事务

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

  • 跨数据源的分布式事务

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

问题

分布式系统中,每个服务之间通过远程调用,一个事务可能涉及多个服务,要满足保证业务的原子性,要么所有操作全部成功,要么全部失败,不能出现部分成功部分失败的情况,这就是分布式事务,此时ACID难以满足,这就是分布式事务要解决的问题 :::

:::tips

CAP定理

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

  • Consistency(一致性):一致性就是当我们访问任意的一个服务节点,得到的数据都必须是一致的
  • Availability(可用性):可用性就是当我们访问任意的一个健康节点,都能得到及时的响应
  • Partition tolerance (分区容错性):分区容错性就是部分节点因为网络原因,与其他节点断开了通信,此时我们去访问这些节点,它必须拒绝提供服务,从而保证数据的一致性

这三个指标不可能同时做到,这个结论就是CAP定理

在实际的项目开发中,我们不能保证网络100%不出现问题,因此必须满足分区容错性,那么就有AP和CP两种方案:AP就是分别执行并提交各个分支事务,出现异常再想办法恢复数据,实现数据的最终一致;CP就是各个分支事务执行后相互等待,然后同时提交或者同时回滚,从而实现数据的强一致,会牺牲部分可用性 :::

:::tips

BASE理论

BASE理论是对CAP的一种解决思路,包含三个思想:

  • Basically Available(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用
  • Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态
  • Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致 :::