一文了解zookeeper

前言

最近不是在淋雨就是在去淋雨的路上

用springcloud框架的仔子们都知道,Eureka 是其默认的也是推荐的服务注册中心组件。

我在项目中也是使用springcloud,那为啥要学习别的服务注册中心组件呢,了解Eureka的实现原理,熟练的使用它不香嘛。别问,问就是学习使我快乐。
在这里插入图片描述

其实我也不想这样的,没办法,我是被逼的。你听我解释,啥,你不听不听。那没办法,我证明给你看。

正文

官网介绍

The existing open source work on eureka 2.0 is discontinued. The code base and artifacts that were released as part of the existing repository of work on the 2.x branch is considered use at your own risk.

有关eureka 2.0的现有开源工作已停止。在2.x分支上作为现有工作资料库的一部分发布的代码库和工件被认为是使用风险自负

你看吧,人家不维护了。这可不能怪我。

什么是Zookeeper?

Eueaka不维护了,没事嘛,咱又不是只有那一个宝贝,去官网看看zookeeper。

官网介绍

ZooKeeper是一项集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。
它的设计易于编程,并使用了按照文件系统熟悉的目录树结构样式设置的数据模型。

Zookeeper的工作机制是什么?

Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应,从而实现集群中类似Master/Slave管理模式。
在这里插入图片描述
组成ZooKeeper服务的服务器都必须彼此了解。它们维护内存中的状态图像,以及持久存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper服务将可用。

客户端连接到单个ZooKeeper服务器。客户端维护一个TCP连接,通过它发送请求,获取响应,获取监视事件并发送心跳。如果与服务器的TCP连接断开,则客户端将连接到其他服务器。

Zookeeper集群的特点:

  1. 一个领导者(Leader),多个跟随者(Follower)组成的集群。
  2. 集群中Server有半数以上节点存活,集群可正常服务。
  3. 全局数据具有一致性。
  4. 更新请求顺序进行。
  5. 数据更新具有原子性。
  6. 实时性。
Zookeeper的数据结构是什么?

ZooKeeper数据模型的结构与Unix文件系统很类似,整体上可以看作是一棵树,每个节点称做一
个ZNode。每一个ZNode默认能够存储1M B的数据,每个ZNode都可以通过其路径唯一标识。

Zookeeper的节点类型分为两种:节点和短暂节点。
短暂节点(Ephemeral):只要创建znode的会话处于活动状态,这些znode就会存在。会话结束时,将删除znode。
节点(Persistent):只要创建znode的会话处于活动状态,这些znode就会存在。会话结束时,不会删除znode。

Znodes维护一个统计数据结构,其中包括用于数据更改,ACL更改和时间戳的版本号,以允许进行缓存验证和协调更新。znode的数据每次更改时,版本号都会增加。例如,每当客户端检索数据时,它也接收数据的版本。客户端可以推断事件的顺序。

Zookeeper监听器的原理是什么?
  1. 首先有一个main()线程。
  2. 在main线程中创建Zookeeper客户端,这时就会创建两个线程connect,istener。
  3. 线程connect负责连接通信,listener负责监听。
  4. 通过connect线程将注册的监听事件发送给Zookeeper。
  5. 在Zookeeper的注册监听器中将注册的监听事件添加到列表中。
  6. Zookeeper监听到有数据或者路径变化,就会将这个消息发送给listener线程。
  7. listener线程内部调用了process()方法。
    在这里插入图片描述
Zookeeper的选举机制
  1. 半数机制:集群中半数以上机器存活,集群能正常使用,一般Zookeeper服务器数量为奇数。
  2. Zookeeper在配置文件中并没有指定Master和Slave。那你前面说Zookeeper集群中有一个领导者(Leader),多个跟随者(Follower),别急嘛,放慢脚步。
举例子来认识Zookeeper是如何选举的。

Zookeeper的集群至少要有三台服务器。
在这里插入图片描述

  1. 先启动服务器1,发起选举,服务器1投自己一票。此时服务器的票数为1,一共有5台服务器,不够半数,选举未完成,服务器1保持LOOKING状态。
  2. 启动服务器2,又发起了选举,服务器1和2分别投自己一票并交换选票信息。此时服务器1发现2的id比自己大,放弃了投自己,投了2,服务器2还是投自己1票,此时服务器1票数为0,服务器2的票数为2。还是少于半数,选举未完成,1,2服务器都保持LOOKONG状态。
  3. 服务器3启动,又发起了选举。同第二步一样,1,2发现3比自己的ID大,都选投了三,此时服务器1和2票数为0票,服务器三为3票,等于半数,好家伙,终于出了老大。服务器3状态改为LEADING,服务器1,2跟随老大,状态更改为FOLLOWING。
  4. 此时,服务器4上线了。新来的靓仔有点豪横,非要投自己一票,那1,2,3不干啊。服务器4投了自己一票,1,2,3还是投了3号,服务器4很无奈当了小弟,状态更改为FOLLOWING。
  5. 服务器5启动,同4一样当了小弟。

总结

Zookeeper能做什么:统一配置管理、统一命名服务、分布式锁、统一集群管理、服务端动态上下线、软负载均衡等。

就实现分布式锁详细展开就要很长的篇幅,以上的功能之后的文章都会写到,会出一个系列。

springcloud中,Eureka 是其默认的也是推荐的服务注册中心组件。但现在停止维护了,可以用Zookeeper替代Eureka。当然了,目前能替换的不只是有Zookeeper,还有consul以及阿里巴巴的Nacos等。目前在springcloud中推荐使用的是阿里巴巴的Nacos。

我们永远赶不上技术的迭代,学习一个目前较流行的,社区活跃的框架。了解其实现原理,其它类似的服务大致原理都是想通的。

我是失忆,一个风趣幽默的男人。

文章中有任何问题您可以在留言中指出。如果你喜欢这篇文章别忘了三连。微信公众号搜索失忆老幺,除了技术还有生活分享,快来关注吧。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失忆老幺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值