zoukankan      html  css  js  c++  java
  • 分布式专题(一)——Zookeeper简介

    • 什么是Zookeeper;
    • CAP原理&Zookeeper数据的一致性;
    • Zookeeper的集群架构;
    • Zookeeper的客户端会话;
    • Zookeeper的数据节点;
    • Zookeeper的事件监听器;
    • Zookeeper的权限控制;

    一、什么是Zookeeper

        在维基百科是这样解释的: Apache ZooKeeper是Apache软件基金会的一个软件项目,他为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。ZooKeeper曾经是Hadoop的一个子项目,但现在是一个独立的顶级项目。

        ZooKeeper的架构通过冗余服务实现高可用性。因此,如果第一次无应答,客户端就可以询问另一台ZooKeeper主机。ZooKeeper节点将它们的数据存储于一个分层的命名空间,非常类似于一个文件系统或一个前缀树结构。客户端可以在节点读写,从而以这种方式拥有一个共享的配置服务。更新是全序的。

        其实zk就是一个分布式的协调服务。是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于他实现诸如:命名服务、配置管理、集群管理、选举算法、锁定和同步服务、高度可靠的数据注册表等功能。
     
    二、CAP原理&Zookeeper数据的一致性
        1、分布式领域中存在CAP理论:

            C:Consistency,一致性,数据一致更新,所有数据变动都是同步的。

            A:Availability,可用性,系统具有好的响应性能。

            P:Partition tolerance,分区容错性。以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择,也就是说无论任何消息丢失,系统都可用。

        该理论已被证明:任何分布式系统只可同时满足两点,无法三者兼顾。 因此,将精力浪费在思考如何设计能满足三者的完美系统上是愚钝的,应该根据应用场景进行适当取舍。

        2、ZK从以下几点保证了分布式数据的一致性:

            顺序一致性:同一个客户端发起的事务请求,严格按其顺序处理;

      原子性:所有事务请求的处理结果在整个集群中是一致的,要么整个集群中所有的机器都应用了这个事务,要不就都不应用;

      单一视图:无论客户端连接的是哪个ZK服务器,看到的服务端数据模型都是一致的;

      可靠性:一旦服务端成功的应用了一个事务,并完成了对客户端的响应,那么这个事务所引起的服务端变更会一直保留,直到被下个一事务所更改;

      实时性:ZK保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。

    三、Zookeeper的集群角色有哪些

        

        Leader:集群中有且仅有一个Leader,通过选举过程产生。负责所有事务写操作(回话状态变更及数据节点变更操作),保证集群事务处理的顺序性。默认设置下,Leader也处理读请求。

        Follower: 处理客户端非事务请求,转发事务请求给Leader服务器;参与Leader选举投票,参与事务操作的“过半通过”投票策略。

        Observer:只提供读取服务。在不影响写性能的情况下提升集群读取性能。不参与任何形式的投票。

        要搭建一个高可用的ZK集群,我们首先需要确定好集群规模。一般我们将节点(指Leader和Follower节点,不包括Observer节点)个数设置为 2*n+1 ,n为可容忍宕机的个数。 ZK使用“过半”设计原则,很好地解决了单点问题,提升了集群容灾能力。但是ZK的集群伸缩不是很灵活,集群中所有机器ip及port都是事先配置在每个服务的zoo.cfg 文件里的。如果要往集群增加一个Follower节点,首先需要更改所有机器的zoo.cfg,然后逐个重启。

    四、Zookeeper的客户端会话

        指客户端与服务器之间的会话,在ZK中会话是通过客户端和服务器之间的一个TCP长连接来实现的。通过这个长连接,客户端能够使用心跳检测与服务器保持有效的会话,也能向服务器发送请求并接收响应,还可接收服务器的Watcher事件通知。Session的sessionTimeout是会话超时时间,如果这段时间内,客户端未与服务器发生任何沟通(心跳或请求),服务器端会清除该session数据,客户端的TCP长连接将不可用,这种情况下,客户端需要重新实例化一个Zookeeper对象。

    五、Zookeeper的数据节点

        Zookeeper将所有的数据存在内存中,数据模式是一棵树ZNode Tree,用斜杠进行分割(/node/path1)。每个ZNode上会保存自己的数据,同时还会保存一系类属性;

        

    六、Zookeeper的事件监听器

        Zookeeper允许用户在一些指定的节点上注册一些Watcher,并且在一些特定事件触发的时候,Zookeeper服务端会将事件通知到感兴趣的客户端上去,该机制是zk实现分布式协调服务的重要特性。

        Watcher 有几个特点:

      Watches通知是一次性的,必须重复注册。

      对某个节点注册了Watcher但是节点被删除了,那么节点上的Watcher也会被移除。

      同一个zk客户端对某一个节点注册相同的Watcher只会收到一次通知。

      Watcher对象只会保存在客户端,不会传递到服务端。

    七、Zookeeper的权限控制

        Zookeeper采用ACL(Access Control Lists)策略来进行权限控制,类似于UNIX文件系统的权限控制。其中Create,Delete 都是争对子节点的权限控制。

      

  • 相关阅读:
    nginx+redis 实现 jsp页面缓存,提升系统吞吐率
    mybatis做like模糊查询
    java自定义注解实现前后台参数校验
    sql like 通配符 模糊查询技巧及特殊字符
    Hbuilder 常用快捷键汇总
    史上最全最强SpringMVC详细示例实战教程
    软件设计师&产品经理应常去的网站
    ActionMQ5.8.0 JMS实例 手把手详细图解
    Maven简单使用
    Maven 使用介绍
  • 原文地址:https://www.cnblogs.com/jiangyaxiong1990/p/9074583.html
Copyright © 2011-2022 走看看