我们现在围绕两个问题来学习zookeeper:

      • 什么是zookeeper?
      • zookeeper基础知识
  1. 什么是zookeeper: zookeeper是hadoop下面的一个子项目,是一个分布式协调服务框架,这个解释其实是很抽象的。其实我觉得不用扯这些东西,通过zk的一些实践项目就可以很好的理解什么是zookeeper了。我们通过一个zk的实际例子来了解,基本所有公司都有这样的需求:在使用rpc进行服务调用的时候,我们更不关心现在提供服务的集群入口(比如:一个集群提供同一个服务,但是只有一个入口(进行实际服务调用,负载均衡等操作),并且这个入口会进行主从切换)是哪一个?那么我们应该怎么弄才能再第一时间获取到入口机器的变更呢?这样的需求我们就能使用zookeeper来提供一个命名服务,我们为这个服务提供一个name,并将它注册到zk中,每一次入口变更都会先到zk进行更改。这样就可以完全屏蔽服务集群的入口了。
  2. zookeeper基础知识:
      • zookeeper组成: 通常集群都存在master/slave架构,比如hadoop。但是zookeeper中却不是这种架构模式,它的组成可以分为三类

        • leader:    集群中的管理者,负责接收客户端的读写操作和消息分发。
        • follower:  集群中leader的随从,负责接收客户端的读操作,并进行leader选举的投票。
        • observe:  用于提高缓解zk的读操作压力,负责接收客户端的都操作,但是不参与leader投票。 
      • 会话: client与server端通过tcp长连接的形式进行通信,建立连接之后通过心跳进行状态检查,同时server端接收client的请求,client端接收server端的watch响应。
      • 数据节点: zookeeper中的数据是按照树状来进行排布的,类似于Linux目录结构,但是不存在文件夹与文件的区别,所有的元素都是节点,我们存储的数据也存放在节点中,节点又可以作为父节点容纳子节点。其中zk的数据节点可进行如下分类:
        • 持久节点: 就是一旦创建就不会因为客户端的连接与否而被删除,除非客户端主动进行删除。
        • 临时节点: 创建节点的生命周期与客户端的生命周期相同,即只能存活在客户端生命周期内。
        • 顺序节点: 就类似与我们平时使用的windows,同样的一个文件放在同一级目录下面会出现后面的编号。就是通过自动添加编号的方式来进行相同目录下不同文件的辨别。
      • 版本:  zookeeper中每个数据节点都存放有我们所需要的数据,并且每个数据都有一个stat数据,这个数据记录了这个znode上的三个版本,分别是version(当前节点的数据版本),cversion(当前znode子节点的版本),avresion(当前znode的ACL版本)。这些版本信息中version版本是保证分布式数据原子性的基础,这个我们后面也会详细的学习。
      • watcher: 我们在使用zk的时候,如果存在这样一种需求,就是客户端会对zk的数据进行缓存以减少对zk集群的访问压力,那么我们需要实时的获取数据的最新版本,那么现在就存在这样一个问题,当服务器端对一个数据进行更改的时候如何通过客户端来获取最新数据。针对这个需求,我们就有必要好好了解一下watcher,其工作的原理就是客户端需要在服务器端针对自己感兴趣的事件(比如:delete)进行watcher注册,当服务器端节点触发这个事件的时候,我们就会通知这些感兴趣的节点来进行数据更新。这就是大致的watcher的过程。
      • ACL: 上面我们提到数据节点的版本时,提到ACL,那么什么是ACL呢?ACL全称是Access Control list,访问控制列表,用来进行数据操作的权限控制。提供了以下几种访问控制权限:
        • create
        • read
        • write
        • delete
        • admin

  3.  zookeeper的特征:

      • 顺序一致性: 指的是同一个客户端发出的一系列请求会严格按照发送的顺序进行执行。
      • 原子性:  主要侧重于zookeeper能够保证在整个zk集群中所有机器都会提交一个事务。注意:这里指的是最终的状态,而不是提交的标准,因为zk commit 事务的时候,只要收到超过一半的节点返回ACK就执行commit。
      • 单一视图:  无论哪一个客户端连接得到的视图都相同,均为同一个视图。
      • 可靠性:  其实我个人对可靠性的理解是允许zk leader节点宕机,zk同样能对外提供服务。而看了以为大牛的博客是这样解释的:可靠性就是说如果一个事务被zk提交,那么事务引起的客户端的变化将会持续下去直到被修改。这个我觉得选择性接收吧。
      • 实时性: zk只能在一定时间内保证数据传递的实时性。     

zookeeper原理与实践(一)----zookeeper的基本功能的更多相关文章

  1. 《zookeeper原理与实践》笔记

    第1章 分布式架构 1.1 分布式 分布式特点:分布性.对等性.并发性.缺乏全局时钟.故障总是会发生. 分布式问题:通讯异常.网络分区(脑裂).三态.节点故障.   1.2 ACID到CAP/BASE ...

  2. 《从Paxos到Zookeeper:分布式一致性原理与实践》【PDF】下载

    内容简介 Paxos到Zookeeper分布式一致性原理与实践从分布式一致性的理论出发,向读者简要介绍几种典型的分布式一致性协议,以及解决分布式一致性问题的思路,其中重点讲解了Paxos和ZAB协议. ...

  3. 从Paxos到Zookeeper 分布式一致性原理与实践读书心得

    一 本书作者介绍 此书名为从Paxos到ZooKeeper分布式一致性原理与实践,作者倪超,阿里巴巴集团高级研发工程师,国家认证系统分析师,毕业于杭州电子科技大学计算机系.2010年加入阿里巴巴中间件 ...

  4. Redis、Zookeeper实现分布式锁——原理与实践

    Redis与分布式锁的问题已经是老生常谈了,本文尝试总结一些Redis.Zookeeper实现分布式锁的常用方案,并提供一些比较好的实践思路(基于Java).不足之处,欢迎探讨. Redis分布式锁 ...

  5. 《从Paxos到ZooKeeper分布式一致性原理与实践》学习笔记

    第一章 分布式架构 1.1 从集中式到分布式 集中式的特点: 部署结构简单(因为基于底层性能卓越的大型主机,不需考虑对服务多个节点的部署,也就不用考虑多个节点之间分布式协调问题) 分布式系统是一个硬件 ...

  6. 《从Paxos到ZooKeeper 分布式一致性原理与实践》阅读【Watcher】

    ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能. ZooKeeper ...

  7. 《从Paxos到ZooKeeper 分布式一致性原理与实践》读书笔记

    一.分布式架构 1.分布式特点 分布性 对等性.分布式系统中的所有计算机节点都是对等的 并发性.多个节点并发的操作一些共享的资源 缺乏全局时钟.节点之间通过消息传递进行通信和协调,因为缺乏全局时钟,很 ...

  8. Zookeeper——分布式一致性协议及Zookeeper Leader选举原理

    文章目录 一.引言 二.从ACID到CAP/BASE 三.分布式一致性协议 1. 2PC和3PC 2PC 发起事务请求 事务提交/回滚 3PC canCommit preCommit doCommit ...

  9. ZooKeeper学习第七期--ZooKeeper一致性原理

    一.ZooKeeper 的实现 1.1 ZooKeeper处理单点故障 我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示. 图 1.1 ZooK ...

随机推荐

  1. 九度OJ 1152:点菜问题 (01背包、DP)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1046 解决:543 题目描述: 北大网络实验室经常有活动需要叫外买,但是每次叫外买的报销经费的总额最大为C元,有N种菜可以点,经过长时间的 ...

  2. Tomcat学习笔记【2】--- Tomcat安装、环境变量配置、启动和关闭

    本文主要讲Tomcat的安装和配置. 一 Tomcat安装 1.1 下载 下载地址:http://tomcat.apache.org/ 1.2 安装 Tomcat是不需要安装的,解压压缩包即可. 在安 ...

  3. Versions 崩溃(Mac升级OS X Yonsemite 10.10)

    今天兴冲冲的升级到了OS X Yonsemite 10.10,结果发现SVN工具不能用了,于是找到一个暂时的解决的方法 1.打开目录~/.subversion/servers 2.在[global] ...

  4. Java I/O模型从BIO到NIO和Reactor模式(转)

    原创文章,转载请务必将下面这段话置于文章开头处(保留超链接).本文转发自技术世界,原文链接 http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 ...

  5. Java for LeetCode 130 Surrounded Regions

    Given a 2D board containing 'X' and 'O', capture all regions surrounded by 'X'. A region is captured ...

  6. TensorFlow Action(开山使用篇)

    1.TensorFlow安装: 使用pip install tensorflow安装CPU版: 或使用pip install tensorflow-gpu==1.2.1指定版本安装GPU版. 2.Te ...

  7. webpack三种代码

    在使用webpack时,主要有三种代码类型: 1.你或你的团队写的源码 2.第三方library或vendor代码 3.管理模块交互的runtime和manifest 什么是manifest文件? 通 ...

  8. poj2965 The Pilots Brothers' refrigerator —— 技巧性

    题目链接:http://poj.org/problem?id=2965 题解:自己想到的方法是枚举搜索,结果用bfs和dfs写都超时了.网上拿别人的代码试一下只是刚好不超时的,如果自己的代码在某些方面 ...

  9. Git_学习_02_ 分支

    Git鼓励大量使用分支: 1.查看分支:git branch 2.创建分支:git branch <name> 3.切换分支:git checkout <name> 4.创建+ ...

  10. 小程序js页面设置上导航颜色

    //导航条颜色更改 wx.setNavigationBarColor({ frontColor: '#ffffff', // 必写项 backgroundColor: '#008de6', // 必写 ...