我们现在围绕两个问题来学习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. go colly proxy 代理ip 动态 ip

    package main import ( "fmt" "github.com/gocolly/colly" "github.com/gocolly/ ...

  2. Neural Task Programming: Learning to Generalize Across Hierarchical Tasks

    Neural Task Programming: Learning to Generalize Across Hierarchical Tasks

  3. LeetCode:矩形区域【223】

    LeetCode:矩形区域[223] 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. 示例: 输入: -3, 0, 3, 4, ...

  4. LeetCode:访问所有节点的最短路径【847】

    LeetCode:访问所有节点的最短路径[847] 题目描述 给出 graph 为有 N 个节点(编号为 0, 1, 2, ..., N-1)的无向连通图. graph.length = N,且只有节 ...

  5. mysql 创建用户与授权

    权限管理 我们都知道,最高权限管理者是 root 用户 , 它拥有着最高的权限操作,包括 : select(查询) ,update(修改) , delete(删除,有事没事都不要用这个,反正也不能给这 ...

  6. Cmder配置

    中文乱码和重叠 当我们使用ls命令查看文件目录时,发现,中文被显示成了一些奇怪的乱码,将以下几行代码配置在cmder/config/user-aliases下即可解决问题: l=ls --show-c ...

  7. python基本模块相关信息

    系统相关的信息模块: import sys sys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的 ...

  8. npm使用淘宝镜像安装包

    npm使用registry这个属性指定仓库,因此配置这个属性即可.修改npm配置属性的几种方法详见官方文档. 这里只贴出修改registry的方法,以下三种任意一种即可: 修改~/.npmrc文件(没 ...

  9. laravel基础课程---8、laravel响应和视图(响应是什么)

    laravel基础课程---8.laravel响应和视图(响应是什么) 一.总结 一句话总结: 就是向请求返回的响应数据(一般为html(视图),当然也可以是变量值):所有的路由及控制器必须返回某个类 ...

  10. Facebook的实时流处理技术——Scuba是Facebook的一个非常快速、分布式的内存数据库,用于实时分析和查询

    Scuba,Facebook的一个非常快速.分布式的内存数据库,用于实时分析和查询.是Facebook的回归分析代码.错误报告监控.广告收入监控和性能调试的背后主力. Facebook的实时流处理技术 ...