这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
二段提交
二段提交:为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。
三个假设:
- 引入协调者(Coordinator)和参与者(Participants),互相进行网络通信
- 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上
- 所有节点不会永久性损坏,即使损坏后也可以恢复
三段提交
将二段提交中的Prepare阶段拆分成CanCommit和PreCommit机制。解决了二段提交中的单点故障和阻塞问题。引入超时机制,在等待超时之后,会继续进行事务提交。
MVCC
悲观锁:操作数据时直接把数据锁住,直到操作完成之后再释放锁。上锁期间其他人不能修改数据。
乐观锁:不会上锁,只是在执行更新时判断别人是否修改数据,只有冲突时才放弃操作。
MVCC是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突。既不会阻塞写,也不会阻塞读。为每个修改保存一个版本,事务和时间戳相关联。可以提高并发性,解决脏读问题。
Quorum NWR模型
N:在分布式存储系统中,有多少份备份数据。
W:代表一次成功的更新操作要求至少有w份数据写入成功
R:代表一次成功的读取数据要求至少有R份数据读取成功
为保证强一致性:W+R>N
Quorum NWR模型模型将CAP的选择权交给用户,是简化的一致性模型
RAFT协议
RAFT协议是一种分布式一致性算法(共识算法),即使出现部分节点故障、网络延时等情况,也不会影响各节点,提高系统整体可用性。
Leader-领导者,一主多从。Leader负责处理所有的客户端请求。
Follower-跟随者,不会发送请求。接受并持久化Leader同步的日志。
Candidate-备选者,Leader选举过程中的临时角色。向其他节点发送请求投票信息 。获票最多的成为领导者。
Leader选举过程:
-
初始全部为Follower
-
Current Term +1
-
选举自己
-
向其它参与者发起RequestVote请求,retry直到
-收到多数派请求,成为Leader,并发送心跳
-收到其他Leader请求,转为Follower,更新自己的Term
-收到部分,但未达到多数派,选举超时,随机timeOut开始下一轮