本地事务
本地事务,也就是传统的单机事务,在传统数据库事务中,必须要满足四个原则:
- 原子性(A):事务中的所有操作,要么全部成功,要么全部失败
- 一致性(C):保证数据库内部的完整性约束以及声明性约束
- 隔离性(I):对同一资源的事务不能同时发生
持久性(D):对数据库做的一切修改将永久保存,不管是否出现故障
分布式事务
分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务:
跨数据源的分布式事务
- 跨服务的分布式事务
- 综合情况
问题
分布式系统中,每个服务之间通过远程调用,一个事务可能涉及多个服务,要满足保证业务的原子性,要么所有操作全部成功,要么全部失败,不能出现部分成功部分失败的情况,这就是分布式事务,此时ACID难以满足,这就是分布式事务要解决的问题 :::
CAP定理
1998年,加州大学的计算机科学家Eric Brewer提出,分布式系统有三个指标:
- Consistency(一致性):一致性就是当我们访问任意的一个服务节点,得到的数据都必须是一致的
- Availability(可用性):可用性就是当我们访问任意的一个健康节点,都能得到及时的响应
- Partition tolerance (分区容错性):分区容错性就是部分节点因为网络原因,与其他节点断开了通信,此时我们去访问这些节点,它必须拒绝提供服务,从而保证数据的一致性
这三个指标不可能同时做到,这个结论就是CAP定理
在实际的项目开发中,我们不能保证网络100%不出现问题,因此必须满足分区容错性,那么就有AP和CP两种方案:AP就是分别执行并提交各个分支事务,出现异常再想办法恢复数据,实现数据的最终一致;CP就是各个分支事务执行后相互等待,然后同时提交或者同时回滚,从而实现数据的强一致,会牺牲部分可用性 :::
BASE理论
BASE理论是对CAP的一种解决思路,包含三个思想:
- Basically Available(基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用
- Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态
- Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致 :::