ZAB最总一致性算法

发布时间:2024年01月19日

一、老生常谈

? ? ? ? 1、CAP理论

? ? ? ? 对于一个分布式系统,不能同时满足以下三点

? ? ? ? ? ? ? ? 一致性(Consistency):对某个指定的客户端来说,读操作保证能够返回最新的写操作结果。(服务A接收请求,将结果同步到服务B上,直到服务B给出正确的响应结果,才将结果返回给用户,服务A阻塞等待牺牲可用性)

????????????????可用性(Availability):非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。(服务A接收请求处理后,服务B异步完成处理,提高系统性能)

????????????????分区容错性(Partition Tolerance):当出现网络分区后,系统能够继续履行职责。

????????????????

2、CAP理论的应用

实际的互联网应用中我们一定要选择P,因为分布式系统中我们不可能建立一个网络不出现任何故障的集群;

因此互联网项目中一般是CP应用或者是AP应用;

CP应用:数据分区,所有节点同步完所有数据后给予客户端响应

AP应用:数据分区,接收请求的节点完成数据更新后给予客户端响应(数据同步通过异步或其它形式,若出现同步问题,可以采用补偿的形式保证最终一致性)

AC应用:数据不分区,所有的数据再一个应用上。单体应用;

二、ZAB算法原理

? ? ? ? 1、ZAB算法的选举

? ? ? ? ? ? ? ? 基础概念

? ? ? ? ? ? ? ? SID:机器id? ? ? ?

? ? ? ? ? ? ? ? epoch:任期编号? ? ? ?

? ? ? ? ? ? ? ? counter:索引序号(每增加一直值索引序号增加1)

? ? ? ? ? ? ? ? zid:事务id(epoch+counter)

? ? ? ? ? ? ? ? 节点角色

????????????????Leader:通过选举确定一台机器,为客户端提供读写功能
????????????????Follower:提供读功能,参与选举
????????????????Observer:提供读功能,不参与选举,也不参与过半成功策略。因此observer是在不影响写性能下,提升集群的读性能

? ? ? ? ? ? ? ? 选举规则:优先比较zid,在比较SID(zid>SID)

? ? ? ? ? ? ? ? 选举过程

? ? ? ? ? ? ? ? ? ? ? ? 初始化状态(集群初始化):

????????????????????????????????1 节点启动时,epoch以及counter相同,依据SID进行判断,自身节点最大时,想自己投一票并向其它节点拉票;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 当获得票数超过节点数一半时成为leader;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3 leader将资深epoch节点+1同步给其它节点;并向其它节点发送心跳

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 4 新加入的节点加入后即使发现资深SID较大,但已经有leader了,会以follower的身份加入:

? ? ? ? 2、原子广播阶段(数据同步)

? ? ? ? ? ? ? ? 每个节点都是队列维护日志数据;

? ? ? ? ? ? ? ? 1、leader接收数据,保存日志为未提交状态,并将日志同步到follower;

? ? ? ? ? ? ? ? 2、follower接收请求后保存日志(未提交状态),并告诉leader保存成功;

? ? ? ? ? ? ? ? 3、半数以上follower节点保存成功,leader节点把日志提交,发出提交命令;

? ? ? ? 3、崩溃恢复

? ? ? ? ? ? ? ? 1、新的leader由于zid较大成为leader,新的leader会将自己有的日志未提交的数据同步给follower节点处理掉;

? ? ? ? ? ? ? ? 2、旧的leader将日志存储后没有广播日志就挂了,新任leader没有此条日志,旧的leader启动时以follower启动时再加入集群会将没有广播的那条消息丢弃;

????????

文章来源:https://blog.csdn.net/qq_44347817/article/details/135649943
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。