Zookeeper
最近在看kafka集群,看到了kafka对zookeeper的使用,对于zookeeper,印象最深的就是Paxos算法,但是对于zookeeper还没有系统一点的认识,周末突击梳理了一下。
Zookeeper是什么
ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.
Zookeeper的主页上是这样介绍的,但汇总起来,就是一个存储容器,只不过这个存储容器是集群化的,具有强一致性。因为这个特性,所以才能提供上述英文定义的服务。
这个定义理解很重要,因为是存储容器,所以推测使用方法必定有get和set方法。
但是它不是普通的存储容器,只能存储大小有限的数据,主要是保持强一致性。
Zookeeper的优劣势
优劣势就要回到CAP原理了,关于CAP,是分布式系统的基本理论,大家就自己找文章看了,主要核心是分布式系统只能满足三者中的两者,而不能三者都满足。
Zookeeper是个CP系统,不同于一般的CA系统,这里的直接参照对象就是Spring cloud的Euroka注册服务。对于Zookeeper这个强一致性系统,简单理解就是在任何一个节点都保持随时内容一致,怎么实现的,依靠Paxos算法。但是这种强一致性必然牺牲高可用,在节点数据不一致的时候会丢弃请求。对于一下Euroka,由于提供的是注册服务,在任何时候都需要高可用,所以是一个CA系统。
所以使用Zookeeper的时候注意它是个CP系统,是有场景限制的。
Zookeeper的使用场景
有很多基本示例
- 配置管理
- DNS服务
- 名字服务
- 分布式锁
可以参照文章:https://www.jianshu.com/p/baf966931c32
当然最应该了解的是Zookeeper在具体应用中的使用,如kafka,可以参照文章:
https://www.jianshu.com/p/a036405f989c
Zookeeper的实现
Zookeeper的实现分为两个层次去理解,一个是数据结构或者模块组成,一个是流程
数据结构的组成,参照这篇文章 https://www.cnblogs.com/luxiaoxun/p/4887452.html
接着动手搭建个集群环境,参见文章https://www.cnblogs.com/ysocean/p/9860529.html
我自己搭建的是虚机三节点集群环境,搭建完成后验证:
接着继续动手用客户端连接:参见https://www.cnblogs.com/chengxuyuanzhilu/p/6698059.html
客户端连接后,根据原理介绍猜想,这是树形结构,使用命令和linux一致,操作了一把
image.png
接着,我自己想试一下一致性,根据命令提示设置一个temp节点,值是1
image.png
看看一致性,到fellow机器上打开客户端看一看,从机上已经有这个值了
image.png
通过动手把知识相互印证一下。
zookeeper的原理
这就涉及到paxos算法了,参照文章https://blog.csdn.net/yanxilou/article/details/84400562
知道怎么选主就可以了。
zookeeper对比etcd
https://www.cnblogs.com/yogoup/p/12020477.html
小结
通过简单学习,基本明白zookeeper是干啥的了,平时用的时候怎么选,如果有必要,就进一步深入学习。同时也可以看到,学习的这些都是别人学习剩下的,什么都可以找到,所以平时学习,没有必要什么都细节都深入,重要是掌握面。