ZAB最总一致性算法

一、老生常谈

        1、CAP理论

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

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

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

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

                ZAB最总一致性算法_第1张图片

2、CAP理论的应用

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

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

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

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

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

二、ZAB算法原理

        1、ZAB算法的选举

ZAB最总一致性算法_第2张图片

                基础概念

                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、原子广播阶段(数据同步)

ZAB最总一致性算法_第3张图片

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

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

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

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

        3、崩溃恢复

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

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

        

你可能感兴趣的:(分布式一致性算法,数据库)