分布式一致性的相关理论
- ACID
1:原子性
所有的操作结果只有两种状态:全部成功,全部不执行
2:一致性
数据的执行结果是一个状态跳转到另外一个状态。没有中间态。排除故障的状态
3:隔离性
并发隔离
4:持久性
一旦事务成功。其结果必将永久保存。 - CAP
1:一致性
数据在不同节点的同步。 其中又分为 强一致性,弱一致性,最终一致性
2:可用性
对于请求的操作总是能进行可处理的返回。
3:分区容错性
遇到网络分区故障时候,仍然能保证对外提供满足一致性和可用性的服务。影响到系统的扩展性。
三者只能最多满足两种。所以一般在设计阶段会放弃强一致性。 - BASE
1:基本可用
出现不可预知故障的时候。将对系统的影响降级到响应时间上的损失和功能上的损失。
2:软状态
允许系统在不同节点的数据副本之间同步数据存在延时。
3:最终一致性
强调系统中节点的副本在一段时间的同步后,最终能达到一致的状态。
一致性协议
- 2阶段提交
阶段一 :提交事务请求
1:事务访问
协调者向所有参与者发送事务内容。询问是否可以执行事务操作。
2:执行事务
参与者执行事务操作。并记录入日志
3:各参与者向协调者反馈事务询问的响应
阶段二 :执行事务提交
结果1:执行事务提交
a:发送提交请求。
b:事务提交
c:反馈事务提交结果
d:完成事务
结果2:中断事务
a:发送回滚请求
b:事务回滚
c:反馈回滚结果
d:中断事务
总的来说,二阶段提交时将事务分成两个极端。
一个是尝试询问执行,另外一个是分配提交反馈。
此方式优点是 原理简单,实现方便
缺点:同步阻塞,单点问题,脑裂,保守。
- 3阶段提交
阶段一:CanCommit
1:事务询问
2:反馈事务询问相应
阶段二:PreCommit
两种可能:
a:执行事务预提交
1:发送预提交请求
2:事务预提交
3:反馈预提交执行响应
b:中断事务
1:发送中断请求
2:中断事务
阶段三:doCommit
两种可能
a:执行提交
1:发送提交请求
2:事务提交
3:反馈事务提交结果
4:完成事务
b:中断事务
1:发送中断请求
2:事务回滚
相比二阶段提交协议,三阶段提交协议降低了参与则的阻塞访问。并避免了单点故障的影响
缺点:
接受preCommit后,如果网络出现分区。协调者于参与者不能有效地进行网络通信。那么,参与者依然会进行实物提交。可能导致数据的不一致性。