ZAB最终一致性算法

一、老生常谈

        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启动时再加入集群会将没有广播的那条消息丢弃;

        

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值