Zookeeper简介

    Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如:数据发布/订阅(作为dubbo注册中心)、负载均衡(作为duubo注册中心)、命名服务、分布式协调/通知(作为dubbo的消息推送)、集群管理、master选举、分布式锁和分布式队列等功能。

 

Zookeeper可以保证的一致性如下:

              顺序一致性:同一个客户端发起的事务请求,会严格按发起顺序执行

      原子性:要么整个集群所有机器都成功应用了某一个事务,要么都没应用

      单一视图:客户端看到的服务端数据都是一致的

      可靠性:执行事务殷勤的服务端状态改变会永久的保留下来

      实时性:保证在一段时间内,客户端最终能从服务端上读取最新的数据状态

 

Zookeeper的设计目标

             目标一:简单的数据模型

              这是一个树型结构,存在与内存之中,由一系列Znode数据节点组成。全量数据存储

      目标二:可以构建集群

              客户端会选择和集群中任意一台机器共同来创建一个TCP连接,并且断开后,会自动连接到集群中的其他机器。


 

             目标三:顺序访问

               每个请求都会分配一个全局唯一的递增编号。

       目标四:高性能

               全量数据存储在内存中,适用于读操作场景。

 

 

Zookeeper的基本概念

 

            集群角色

             Leader:  集群中的所有机器通过一个Leader选举过程来选定一台被称为“Leader”的机器。

                       为客户端提供读和写服务。                                             

             Follower:可以提供读服务

             Observer可以提供读服务

      follower和observer的区别在于:observer机器不参与leader选举过程,也不参与写操作的“过半写成功”策略,observer主要就是用来提升集群的读性能的。

 

 

     会话(Session):

             一个客户端连接是指客户端和服务器之间的一个TCP长连接。

             当第一次连接建立,客户端会话的生命周期也开始了。

             如果不慎断开,只要在sessionTimeout规定时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。

 

 

     数据节点(Znode):

              数据模型是一棵树(Znode Tree),由斜杠(/)进行分割的路径,就是一个Znode。

              每个Znode上都会保存自己的数据内容,同时还会保存一系列属性信息

              分为:

                    持久节点:将一直保存在zookeeper上,除非手动删除

                    临时节点:和客户端会话绑定,会话失效,所有临时节点移除

      zookeeper允许用户为每个节点添加一个特殊的属性,SEQUENTIAL。一旦节点被标记上这个属性,那么在这个节点被创建的时候,zookeeper会自动在其节点名后面追加上一个整型数字,这个整型数字是由父节点维护的自增数字。

 

 

     版本:

              对于每个ZNode,zookeeper都会为其维护一个叫做Stat的数据结构,Stat中记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion(当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)

 

 

     Watcher

              事件监听器。

              zookeeper允许用户在指定节点上注册一些Watcher,并且在一些特定事件触发的时候,zookeeper服务端会将事件通知到感兴趣的客户端上。

         

     ACL:

             zookeeper采用ACL策略来进行权限控制。

             5中权限:

                    CREATE:创建子节点的权限

                    READ:获取节点数据和子节点列表的权限

                    WRITE:更新节点数据的权限

                    DELETE:删除子节点的权限

                    ADMIN:设置节点ACL的权限






参考书籍:《zookeeper分布式一致性原理与实践》


猜你喜欢

转载自blog.csdn.net/u013045959/article/details/76121747