这篇文章给大家介绍ZooKeeper分析是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
分布式系统是同时跨越多个物理主机,独立运行的多个软件所组成的系统。在这样的分布式系统中,如何保证节点信息同步和共享便是一个麻烦的事情,而ZooKeepe最主要的使用场景,便是作为分布式系统的协同服务,用来解决这些问题。
分布式的协同服务就是通过某种方式,让每个节点的信息都能够同步和共享。这依赖于服务进程之间的通信。通信方式有:
通过网络进行信息共享
例:现实中开发leader在会上将任务传达下去,组员通过听leader的命令或查看leader的邮件知道自己要干什么。当任务分配出现变化时,leader会单独通知组员或再次召开会议。信息通过人与人间的直接沟通,完成传递。
通过共享存储
例:开发leader按照约定的时间和路径,把任务分配表放到了SVN,组员每天去SVN上拉取最新的任务分配表,然后干活;当SVN文件版本更新时,触发邮件通知,每个组员再去拉取最新的任务分配表。其中SVN就是共享存储。
解决分布式协同服务有二种方式,ZooKeeper采用了共享存储的方式解决,但实际上分布式应用也需要和存储进行网络通信。
通过ZooKeeper实现分布式协同的原理,跟上面SVN的例子类似。ZooKeeper就像SVN一样存储了任务的分配、完成情况等共享信息。每个分布式系统的节点就像是组员,订阅了这些共享信息。当主节点(组leader),对某个从节点的分工信息作出改变时,相关订阅的从节点得到ZooKeeper的通知,取得自己最新任务分配。从节点完成工作后,把完成的情况存储到zookeeper,主节点订阅了该任务的完成情况信息,所以会得到zookeeper的完工通知。
注意:Slave节点要想获取ZooKeeper的更新通知,需要事先在关心的数据节点上设置观察点。
如果各个节点间信息不能及时共享和同步,那么就会在协作过程中产生过各种各样的问题。ZooKeeper解决协同问题的关键就在于保证分布式系统信息的一致性。
ZooKeeper是一个开源的分布式协调服务框架,其设计目标是将那些复杂的且容易出错的分布式一致性服务封装起来,构成一个高效的原语集,并以一些简单的接口提供给用户使用。分布式应用程序基于它可以实现如数据订阅/发布、负载均衡、命名服务、集群管理、分布式锁和分布式队列等功能。
首先要学习ZooKeeper得大致了解下面的几种概念:
在分布式系统中,通常构成集群的每一台机器都有自己的角色,最典型的就是主备模式(Master/Slave),能够处理写的就是master机器,把通过异步复制方式获取最新数据并提供读服务的称为Slave机器。而在ZooKeeper中并未采取这些概念,而是引入了Leader、Follower、Observer三种角色。
为方便理解,可以先了解下Paxos及Raft等解决分布式一致性的算法等理论知识。虽然Zookeeper并没有直接采用Paxos算法,而是采用了一种被称为ZAB(Zookeeper Atomic Broadcast)的一致性协议。分布式(一)——简介及理论
Leader:zookeeper中的所有机器通过选举来选定一台被称为Leader的机器,用来提供读和写服务。
Follower:提供读服务、及选举leader服务。
Observer:也能提供读服务,区别在于不参与选举,不参与写操作的过半成功策略,同时作为选举的记录者。
session指客户端会话,一个客户端连接指客户端和服务端的一个TCP长连接。
ZooKeeper对外的服务端口默认为2181,客户端启动时会与服务器建立一个tcp长连接,从第一次连接建立开始,客户端会话的生命周期也就开始了。通过这个连接客户端能够进行心跳检测与服务器保持有效的会话,也能够向ZooKeeper服务器发送请求并接收响应,同时还可以通过连接接受来自服务器的watch事件通知。
分布式中通常讲的节点就是指一台机器,但在ZooKeeper中节点分为两类:
机器节点:构成集群的机器
数据节点(ZNode );ZooKeeper将所有的数据存储在内存中,数据模型是一颗树(ZNode Tree),如下图所示。
树中的每一个节点就是一个ZNode,每个ZNode上面会保存自己的数据内容及一系列属性信息。
对于每个ZNode,ZooKeeper都会对其维护一个叫做Stat的数据结构。这个Stat数据结构记录了当前这个ZNode的三个数据版本:
version:当前ZNode的版本
cversion:当前ZNode子节点的版本
aversion:当前ZNode的ACL版本
Watcher事件监听器,是ZooKeeper实现分布式协调服务的重要特性,ZooKeeper允许用户在指定节点注册一些Watcher,并在一些特定事件触发时,ZooKeeper会将事件通知给感兴趣的客户端。
ZooKeeper采用ACL策略来进行权限控制,有如下五种权限:
CREATE:创建子节点的权限
READ:获取节点数据及子节点列表的权限
WRITE:更新节点数据的权限
DELETE:删除子节点的权限
ADMIN:设置节点ACL的权限
关于ZooKeeper分析是怎么样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。