1500 字简述 Apache ZooKeeper 的基本原理
你好,这里是网络技术联盟站。
Apache 有个非常棒的开源项目叫做 Zookeeper,用于管理大量主机的分布式协调服务,很多人对 Zookeeper 的原理不太了解,那么本文瑞哥就带大家学习一下 Zookeeper 的基本原理。
什么是 Zookeeper?
ZooKeeper 是对分布式环境中大量主机的协调和管理服务,是一个框架,ZooKeeper 框架最初是由 Yahoo! 构建的。
我们都知道在分布式环境中协调和管理服务确实是一个非常复杂的过程,但是 ZooKeeper 以其简单的架构和 API 解决了这个问题。
什么是分布式服务?
提到 ZooKeeper,那么一定得提到分布式服务,ZooKeeper 是专门为分布式服务设计的。
简单来说,分布式系统就是多台设备、多个服务的集合,这个集合对外看起来就是单台服务,这些内部的多台服务相互配合、容错、共享、协同完成分布式服务,单台设备的故障不会影响整个系统的运行。
分布式系统有以下好处:
扩展性:分布式系统可以水平扩展,达到使用更多的流量。
模块化:分布式系统可以扩展多个模块,而且一般都没有上限。
容错性:分布式系统比单机更容错。
成本效益:初始成本高于传统系统,但由于其可扩展性,扩展的越多、时间越长,其成本效益就很高。
低延迟:用户可以在多个位置拥有一个节点
效率高:分布式系统将复杂数据分解成更小的部分,所以处理效率一般都很高。
ZooKeeper 架构
ZooKeeper 在客户端-服务器架构上工作:
我们来看下 ZooKeeper 这些角色:
Client:客户端用于访问来自服务器的信息,它向服务器发送一条消息,让服务器知道客户端还活着,如果连接的服务器没有响应,客户端会自动将消息重新发送到另一台服务器。
Server:服务器向客户端发出确认以通知服务器处于活动状态,并向客户端提供所有服务。
Leader:如果任何服务器节点发生故障,该服务器节点将执行自动恢复。
Follower:追随 Leader 指示的服务器节点。
ZooKeeper 如何工作?
ZooKeeper 服务器启动后发生的第一件事是,它等待客户端连接到服务器。
ZooKeeper 集群中的客户端将连接到其中一个节点,该节点可以是 Leader 或 Follower 中的任何一个。
一旦客户端连接到特定节点,该节点就会将会话 ID 分配给客户端并向该特定客户端发送确认。
如果客户端没有从节点得到任何确认,那么它会将消息重新发送到 ZooKeeper 集群中的另一个节点并尝试与之连接。
收到确认后,客户端通过定期向节点发送心跳来确保连接不会丢失。
最后,客户端可以根据需要执行读取、写入或存储数据等功能。
最好使用奇数个服务器运行 ZooKeeper 集群;典型的集群大小是 3、5 或 7。例如,如果运行 5 台服务器,假如其中 3 台停机,则集群将不可用,这个时候可以让一台服务器停机进行维护,但仍能在故障中恢复。但是,如果运行 6 台服务器,集群在发生 3 次故障后仍然不可用,但同时发生 3 次故障的可能性现在略高一些。当添加更多服务器时,虽然可以容忍更多故障,但这也会让吞吐量降低。
ZooKeeper 用途
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 的工作,希望对您有所帮助。
最后感谢您的阅读,如果觉得文章对您有帮助,别忘了点赞👍、收藏⭐哦!有任何问题,欢迎在下方评论区与我讨论!!!
版权声明: 本文为 InfoQ 作者【wljslmz】的原创文章。
原文链接:【http://xie.infoq.cn/article/1abe2515cfd892fcee10b33eb】。未经作者许可,禁止转载。
评论