0. 前言
一致性协议的出现主要是为了保证大规模分布式系统的数据一致性,对分布式系统设计具有很重要的作用。
一致性协议说白了就是,制定一个大家都公认的规则,在进行数据更新的时候都按照这个规则进行,既然这个规则这么重要,那么在设计规则的时候就需要考虑到方方面面的问题,下面将详细介绍。
1. 两阶段提交
- 基本原则:要么所有备份数据都同时更改某个值,要么都不更改,保证数据强一致性。
- 包含实体:协调者(用于进行分布式事务的管理协调作用)和参与者(参与表决和更新过程)
- 详细过程:两阶段主要是表决阶段和提交阶段
- 表决阶段:协调者向所有参与者发送一个表决请求。参与者收到请求之后,如果自己已经准备好则发送VOTE_COMMIT,否则发送VOTE_ABORT表示目前自己不能进行事务提交。
- 提交阶段:协调者收集所有参与者的表决信息,如果所有参与者都可以提交事务,那么协调者向所有参与者发送一个GLOBAL_COMMIT消息,通知参与者进行本地提交;如果有任意一位或者多位参与者发送VOTE_ABORT,那么协调者发送GLOBAL_ABORT消息通知参与者取消事务提交。
- 2PC中的阻塞状态:协调者广播完之后需要等待参与者的响应,此时其处于阻塞状态;参与者在等待协调者第一次广播时候和等待第二次广播时候也处于阻塞状态。包含阻塞状态的系统比较脆弱,因为很可能因有进程陷入崩溃而导致处于阻塞态的对象长时间等待,使得系统无法进行。
- 解决2PC中进程崩溃导致严重后果问题方法:超时判断和参与者互询机制。超时机制可以解决协调者