ACID理论:数据库事务正确执行的4个基本要素
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程中无法保证数据的正确性。
CAP原理又称CAP定理,指的是一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性),三者不可兼得。
- 一致性:所有节点访问同一份最新的数据副本
- 可用性:部分节点故障后,集群整体仍能响应客户端的读写请求
- 分区容错性:当某个节点或网络分区故障时,仍能够对外满足一致性和可用性的服务
BASE理论
它是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性),它是一致性和可用性权衡的结果。
核心思想:即使无法保证强一致性,也应该使用适当的方式,在一定时限内达致最终一致性。
- 基本可用:允许当系统发生故障时,损失部分可用性
- 软状态:允许系统中的数据存在中间状态,并且不会影响系统的整体可用性,即允许不同节点之间的数据副本同步存在延迟
- 最终一致性:所有的数据副本,终过一段时间同步后,最终都能过到一致性
XA协议:它是一个分布式事务协议,它大致分为两部分
- 事务管理器
- 本地资源管理器
下面是基于XA协议的两阶段(2PC)提交
第一阶段
第二阶段
缺点:
- 同步阻塞问题,参与者在等待协调者发出提交时,会一直阻塞
- 单点故障,在二阶段时,协调者发生故障,所有参与者处于锁定事务资源状态,无法继续完成事务
- 数据不一致,由于网络异常或发送commit过程中协调者发生故障,只有部分参与者接受到commit
- 保守,当任意一个参与者宕机,协调者超时没收到响应,就会导致整个事务回滚失败
- 二阶段无法解决问题:协调者发出commit后宕机,而唯一收到commit的参与者也宕机。那么即使选出新的参与者,这条事务的状态也是不确定的,没人知道事务是否已提交
3pc(三阶段提交协议):
针对2pc的缺点,提出了3pc
2pc只有协调者有超时判断,3pc协调者和参与者均有超时判断
3pc在2pc的基础上引用询问阶段,在开始事务前询问能否进行事务
LCN框架是基于协调spring事务,通过控制协调本地事务与全局事务的一致性从而达到分布式事务的效果,框架属于在2阶段基础至上做了优化。
lcn原理图
注意:如果发起方执行了调用参与方而发起方执行过长,那么参与方将会因超时回滚而发起方却执行成功,此时可以设置超时时间,默认超时时间为5s,超时容易发生在debug过程中
lcn配合nginx配置集群原理图