Apache有个非常棒的开源项目叫做Zookeeper,用于管理大量主机的分布式协调服务,很多人对Zookeeper的原理不太了解,那么本文瑞哥就带大家学习一下Zookeeper的基本原理。
ZooKeeper 是对分布式环境中大量主机的协调和管理服务,是一个框架,ZooKeeper 框架最初是由 Yahoo! 构建的。
我们都知道在分布式环境中协调和管理服务确实是一个非常复杂的过程,但是 ZooKeeper 以其简单的架构和 API 解决了这个问题。
提到ZooKeeper,那么一定得提到分布式服务,ZooKeeper是专门为分布式服务设计的。
简单来说,分布式系统就是多台设备、多个服务的集合,这个集合对外看起来就是单台服务,这些内部的多台服务相互配合、容错、共享、协同完成分布式服务,单台设备的故障不会影响整个系统的运行。
分布式系统有以下好处:
ZooKeeper 在客户端-服务器架构上工作:
我们来看下ZooKeeper这些角色:
最好使用奇数个服务器运行 ZooKeeper 集群;典型的集群大小是3、5或7。例如,如果运行 5 台服务器,假如其中 3 台停机,则集群将不可用,这个时候可以让一台服务器停机进行维护,但仍能在故障中恢复。但是,如果运行 6 台服务器,集群在发生 3 次故障后仍然不可用,但同时发生 3 次故障的可能性现在略高一些。当添加更多服务器时,虽然可以容忍更多故障,但这也会让吞吐量降低。
ZooKeeper一般有两个用途:
ZooKeeper 中信息的组织方式与文件系统非常相似,在顶部有一个根,简称为 /,在根之下有称为 zNodes 的节点,是 ZooKeeper 节点的缩写,但主要是用于避免与计算机节点混淆的术语,一个 zNode 既可以充当包含二进制数据的文件,也可以充当具有更多 zNode 作为子节点的目录,与大多数文件系统一样,每个 zNode 都有一些元数据,该元数据包括读写权限和版本信息。
与普通的分布式文件系统不同,ZooKeeper 支持临时 zNode 和顺序 zNode 的概念,临时 zNode 是一个在其所有者的会话结束时将消失的节点,临时节点的典型用例是使用 ZooKeeper 发现分布式系统中的主机,然后,每个服务器都可以在临时节点中发布其 IP 地址,并且如果服务器与 ZooKeeper 失去连接并且无法在会话超时内重新连接,则其信息将被删除。
ZooKeeper 可以在 zNode 上注册观察者,通过使用观察者,可以通过让所有对某个主题感兴趣的客户端在该主题的 zNode 上注册一个观察者来实现消息队列,并且可以通过写入该 zNode 将有关该主题的消息广播给所有客户端,其实也就是观察者订阅某个主题。
不过,观察者总是一次性的,所以如果你想进一步更新那个 zNode,必须重新注册它们,在接收更新和重新注册之间会丢失更新,但可以通过使用 zNode 的版本号检测到这一点。
Apache ZooKeeper 是一个开源 Apache 项目,主要用于大型集群系统上进行分发配置、命名和组服务,使得分布式系统更易于管理,本文用1500来字简述了ZooKeeper的工作,希望对您有所帮助。
最后感谢您的阅读!!