大气 网站源码,网络游戏的利弊,江门网络培训学院,网站建设公司 上前言
昨日博主的第一篇ZooKeeper#xff0c;对它自身具备的能力做了初步介绍。书接上文#xff0c;马不停蹄#xff0c;我们继续挖掘它内在的美#xff0c;充分把握它的核心与脉络。 揭秘ZooKeeper
Q#xff1a;集群一致性协同是如何进行的
我们讲到分布式#xff0c;…前言
昨日博主的第一篇ZooKeeper对它自身具备的能力做了初步介绍。书接上文马不停蹄我们继续挖掘它内在的美充分把握它的核心与脉络。 揭秘ZooKeeper
Q集群一致性协同是如何进行的
我们讲到分布式一般是在集群环境下实现的。以ZooKeeper为例它是如何保障集群环境下的成功运转呢 1. 节点角色
通过上图我们认识一下ZooKeeper的3类节点
Leader节点 Leader作为ZooKeeper的领袖有着举足轻重的作用。它是ZooKeeper集群环境如何稳定运行的关键主要负责读写和调度等核心工作。如果它宕机了一致性调度从此冷却整个集群将面临群龙无首的局面直至系统瘫痪。Follower节点 作为随从节点主要负责客户端的读操作如果遇到写申请 需要转发Leader节点完成自身不做任何处理。如Leader宕机会立即参与Leader的选举具有投票权。Observer节点 作为候选角色Observer为提升整个集群的执行效率提供一定帮助但仅限于读操作。不参与写不参与Leader的选举。
了解3类节点后我们大概知道每个ServerNode是如何执行客户端申请以及Server集群内部是如何完成最终一致性协同的过程。
比如Client对任一类节点发起读操作则每个节点均可立即返回本地数据如此便提高了响应性能 比如Client对Follower节点发起写操作则它会写命令转交Leader完成最后由Leader完成写操作和数据同步 比如Leader发生宕机则Follower们立即启动选举任命新的Leader。而Observer完全可以“袖手旁观置之不理”此刻真是“开心开心极了...”
2. 基础协议
为了实现上述一致性数据同步ZooKeeper基于ZABZookeeper Atomic Broadcast 原子广播协议完成的。
ZAB准确来讲提供了一套完整的数据同步消息机制。无论哪类节点从接收客户端请求到客户端收到实时数据并实现集群内部数据写操作的一致性均是通过ZAB机制完成的。 通过上图我们了解到Leader负责处理写请求如其他节点接收到写请求需转发Leader完成。那么Leader收到请求后如何继续工作呢
发布全局唯一事务申请zxidzxid是64位的Long类型所有的Follower均对此申请进行反馈Leader如收到反馈过半则执行写提交最后完成集群同步
Q集群选举如何进行的
我们都知道Leader至关重要是维持ZooKeeper的集群健康运转的大脑。但天有不测风云即使7*24高可用高可靠也难免百密一疏。如果Leader真的宕机了 如何维持集群秩序呢
接下来博主带着各位盆友继续揭秘ZooKeeper中 Leader的选举过程。
既然有选举就有投票有投票就有候选人有投票人。那么候选人和投票人是怎么产生的最终谁才能胜任 在正式讲解选项过程前我们先了解一些基础知识。
1. 节点状态
在ZooKeeper集群中涉及4中状态
节点状态简介LOOKING寻 找 Leader 状态即开始选举的初始状态FOLLOWING跟随者状态表明当前节点为FollowerLEADING领袖状态表明当前节点为LeaderOBSERVING观察者状态表明当前节点为Observer
2. 节点ID
我们在搭建ZooKeeper集群时一般需要为每个ServerNode标识一个唯一的编号从小到大比如1.2.3以此类推。
这个ID一般记录在每个ZooKeeper Server中的数据文件中安装时指定。
3. 奇数
ZooKeeper集群信仰奇数为什么? 因为有“过半才OK”的理念。 所以我们在搭建集群时务必按要求配置否则ZooKeeper可能无法正常工作哦。
4. 投票选举Leader
选举场景简介启动时选择此刻集群中的节点ID最大者投票。当然开始时均可为自己投票实时更新状态故障恢复时根据ZXID顺序优先执行并选择此刻集群中的节点ID最大者投票
投票结束后收到票数过半者则当选新一任Leader其他节点自动更新为Follower而Observer自必不说全程不参与。
到此为止我们具备了以上基础知识后继续回看上图是不是可以理解了 结语
博主通过揭秘ZooKeeper内在的核心逻辑剖析它是如何完成我们想象中的职责和工作的。通过以上内容我们可以发现无论是什么协议或算法均服务于某个业务和技术场景。所以感谢前辈们的辛勤耕耘才有ZooKeeper的用武之地。 历史回顾 微服务实战系列之ZooKeeper上微服务实战系列之MQ微服务实战系列之通信微服务实战系列之J2Cache微服务实战系列之Cache技巧篇微服务实战系列之MemCache微服务实战系列之EhCache微服务实战系列之Redis微服务实战系列之Cache微服务实战系列之Nginx技巧篇微服务实战系列之Nginx微服务实战系列之Feign微服务实战系列之Sentinel微服务实战系列之Token微服务实战系列之Nacos微服务实战系列之Gateway微服务实战系列之加密RSA微服务实战系列之签名Sign