我们现在围绕两个问题来学习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. zookeeper curator ( 实战一)

    目录 zookeeper 的伪集群搭建 写在前面 1.1. zookeeper 安装&配置 1.1.1. 创建数据目录和日志目录: 1.1.2. 创建myid文件 1.1.3. 创建和修改配置 ...

  2. vue+vuex构建单页应用

    基本 构建工具: webpack 语言: ES6 分号:行首分号规则(行尾不加分好, [ , ( , / , + , - 开头时在行首加分号) 配套设施: webpack 全家桶, vue 全家桶 项 ...

  3. 洛谷 2261 [CQOI2007]余数求和

    题目戳这里 一句话题意 求 \(\sum_{i=1}^{n} (k ~~\texttt{mod} ~~i)\) Solution 30分做法: 说实话并不知道怎么办. 60分做法: 很明显直接一遍o( ...

  4. ubuntun下安装sublime text

    Sublime Text 3 是一款轻量级.跨平台的文本编辑器.可安装在ubuntu,Windows和MAC OS X上高级文本编辑软件,有一个专有的许可证,但该程序也可以免费使用,无需做逆向工程.如 ...

  5. .htaccess技巧: URL重写(Rewrite)与重定向(Redirect) (转)

    目录 Table of Contents 一.准备开始:mod_rewrite 二.利用.htaccess实现URL重写(rewrite)与URL重定向(redirect) 将.htm页面映射到.ph ...

  6. 跳转appStore评分

    跳转到AppStore让用户能够给我们的应用进行评分,有两种方法,一种是跳出应用,跳转到AppStore,进行评分.另一种是在应用内,内置AppStore进行评分. PS:appleID在https: ...

  7. ubuntu部分常用操作指令记录

    # 以ROOT权限打开图形文件管理界面: sudo nautilus # 给某个文件添加可执行权限,例如: sudo chmod +x /usr/lib/jdk/bin/java # 修改某个文件或文 ...

  8. 【ES6】更易于继承的类语法

    和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 ...

  9. python-多线程3-生产者消费者

    '''生产者和消费者''' ''' 用python写一个多线程的生产者和消费者 生产者x x>0,有东西,print(不生产) x=0,没东西,print(生产) for循环 消费者x x=0, ...

  10. Git_学习_04_ 多人协作开发的过程

    多人协作的工作模式通常是这样: 1.首先,可以试图用 git push origin branch-name 推送自己的修改: 2.如果推送失败,则因为远程分支比你的本地更新,需要先用 git pul ...