1. 什么是zookeeper?

分布式协调服务
  • 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。
  • Zookeeper 一个最常用的使用场景就是用于担任服务生产者和服务消费者的注册中心
  • ZooKeeper有临时节点的概念。 当创建临时节点的客户端会话一直保持活动,瞬时节点就一直存在。而当会话终结时,瞬时节点被删除。持久节点是指一旦这个ZNode被创建了,除非主动进行ZNode的移除操作,否则这个ZNode将一直保存在Zookeeper上
  • 为了保证高可用,最好是以集群形态来部署 ZooKeeper,这样只要集群中大部分机器是可用的(能够容忍一定的机器故障),那么 ZooKeeper 本身仍然是可用的
  • ZooKeeper 将数据保存在内存中,这也就保证了 高吞吐量和低延迟
  • ZooKeeper 是高性能的。 在“读”多于“写”的应用程序中尤其地高性能,因为“写”会导致所有的服务器间同步状态。(“读”多于“写”是协调服务的典型场景。)

2. 会话是什么?

  • 在 ZooKeeper 中,一个客户端连接是指客户端和服务器之间的一个 TCP 长连接
  • 通过这个连接,客户端能够通过心跳检测与服务器保持有效的会话,也能够向Zookeeper服务器发送请求并接受响应,同时还能够通过该连接接收来自服务器的Watch事件通知
  • 只要在sessionTimeout规定的时间内能够重新连接上集群中任意一台服务器,那么之前创建的会话仍然有效。
在为客户端创建会话之前,服务端首先会为每个客户端都分配一个sessionID。由于 sessionID 是 Zookeeper 会话的一个重要标识,许多与会话相关的运行机制都是基于这个 sessionID 的,因此,无论是哪台服务器为客户端分配的 sessionID,都务必保证全局唯一。

3. 节点Znode

(1) 分布式系统的节点是类似 Leader 和 slave 的主从节点, 但是zookeeper确实不同它是存放数据的数据单元节点
(2) 节点分成两种: 
    1) 临时节点, 一次会话(session)创建出来的节点, 随着session 的消失而消失
    2) 持久节点: 一但创建, 如果不主动删除, 它将永远一直zookeeper上
在添加节点的时候每个节点会被zookeeper标记上SEQUENTIAL(一个整型自增)
(3) 每个节点都会存在一个Stat数据结构, 用来记录Znode的三个版本, 当前Xnode, 当前Znode子版本, 当前Znode的ACL版本

4. 事件监听器

zookeeper会在某些节点上注册事件监听器, 当满足某些条件的时候就会主动通知一些客户端, 该机制是Zookeeper实现分布式协调服务的重要特性。

5. ALC访问控制列(AccessControlLists)


6. zookeeper的特点

  • 顺序一致性: 从同一客户端发起的事务请求,最终将会严格地按照顺序被应用到 ZooKeeper 中去。
  • 原子性: 所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说,要么整个集群中所有的机器都成功应用了某一个事务,要么都没有应用。
  • 单一系统映像 : 无论客户端连到哪一个 ZooKeeper 服务器上,其看到的服务端数据模型都是一致的。
  • 可靠性: 一旦一次更改请求被应用,更改的结果就会被持久化,直到被下一次更改覆盖。

7. zookeeper内部数据结构类型window的文件系统


上面的每一个节点都是Znode, 但是这个数据结构却是存放在内存中的, 所以和文件系统又不同, 速度比较快

8. zookeeper是可集群

(1) 它的集群使用的是Zab(Zookeeper Atomic Broadcast)来确保高可用的, 如果其中的leader无法接通了, 那么将会通过这个集群选举策略来选举新的leader, 而且集群是需要奇数数量的节点的
(2) 客户端和zookeeper是通过TCP进行连接的, 使用心跳包完成的判断

9. 顺序访问

zookeeper可以保证客户的每个请求的先后顺序, 保证先后顺序使用的是叫做时间戳的方式保证的顺序执行也叫zxid(Zookeeper Transaction Id)也叫zookeeper事务id

10. zookeeper集群角色




过半写成功???

11. zookeeper使用的是ZAB协议

zab协议存在两种模式, 一个是崩溃恢复模式和消息广播模式, 两个模式
崩溃恢复模式:
    当集群中唯一的leader失效的时候, zab将会转化成崩溃模式, 崩溃模式下zab将会选举出新的leader, 当集群中有过半的节点完成了同步后, Zab将退出恢复模式, 转成消息广播模式
消息广播模式:这个模式下, leader将会把读取的操作丢给follower去完成, 当这个操作是写的使用, follower将把这个事务丢给leader

12. zookeeper的缺陷

(1) zookeeper的设计理念使用的是CAP中的CP, 保证了单调一致性, 所以在一些极端环境下, zookeeper可能会丢掉一些请求, 但是它能保证数据的一致性和顺序性
1) 因为它在选举是当一半的N + 1 个follower发现你是leader的时候就会开始围绕着leader工作, 但是还有部分并不知情的节点;
2) 当数据同步的时候, 当数据同步达到 N/2 + 1 的情况下, zookeeper便表示可以使用这个数据了, 因为他是最新的, 但是实际上还有部分节点存储的是旧值
C: zookeeper它只能保证在十几秒到几分钟的时间后数据是最终一致的
A: 数据是可用了, 无任何的锁结构, 有大半的节点存储的是最新的值, 如果你想保证拿到的所有节点的值都是最新的, 那么可以调用Sync() 去同步获取最新的值
P: 节点多了, 同步数据的时间会变长, leader的选取需要大量的时间, 但是可以引入Observer节点临时缓冲下数据, (前文说过Observer不进行选举)
(2) zookeeper可能还存在脑裂问题, 就是多个leader的问题
(3) 当zookeeper判断一个节点失效了, 那么它会直接将zookeeper剔除出这个集群, 这样会出现一个问题, 有可能剔除出去的这个节点并不是不可用的, 但是你直接把他剔除出这个集群, 也许这个节点正在和某个客户进行联系, 或者这个节点出现了网络故障的问题, 这个问题是临时的, 等待期网络恢复后便可以继续使用了, 但是zookeeper的集群被踢出的节点恢复正常是无法自动进入这个集群的, 不想eurake使用了节点保护机制, 暂时保护了这个节点, 让其保存在集群中(当然新的请求是不能再去请求它了), 等待这个节点恢复后, 新的请求将可以送到这个节点进行处理


























[心得]zookeeper的更多相关文章

  1. Zookeeper学习笔记(下)

    这是ZK学习笔记的下篇, 主要希望可以分享一些 ZK 的应用以及其应用原理 我本人的学习告一段落, 不过还遗留了一些ZK相关的任务开发和性能测试的任务, 留待以后完成之后再通过其他文章来进行分享了 Z ...

  2. Dubbo、Zookeeper集群搭建及Rose使用心得(一)

    接触这个两三月了,是时候总结一下使用的方法以及心得体会了.我是一个菜鸟,下面写的如有错误,还请各位前辈指出.废话不多说,正式开始. 一.简介 Dubbo是Alibaba开源的分布式服务框架,它最大的特 ...

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

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

  4. Zookeeper Ephemeral结点使用心得

    原文地址:https://www.cnblogs.com/linlemo/p/4807178.html 公司里面在拿Zookeeper做命名服务,通过使用ZK,前端只需要根据指定的ZK地址获得相应的资 ...

  5. 面试无忧之Zookeeper总结心得

    为什么需要分布式系统 l 单机系统已经无法满足业务需要 l 高性能硬件价格昂贵 分布式系统带来哪些问题 l 集群中节点数据一致性问题 l 集群产生分区 l 负载问题 l 幂等性问题 l 可用性问题 l ...

  6. Dubbo、Zookeeper集群搭建及Rose使用心得(二)

    上篇讲了一下配置,这次主要写一下这个框架开发的大概流程.这里以实现 登陆 功能为例. 一.准备工作 1.访问拦截器 用户在进行网站访问的时候,有可能访问到不存在的网页,所以,我们需要把这些链接重新定向 ...

  7. 通过dubbo暴露接口调用方法,及基于zookeeper的dubbo涉及配置文件

    现在很流行的Dubbo很多朋友都听说过吧,最近我也在看这方面的东西,分享先我的心得笔记. 先说说我们团队要做的项目框架,很简单重在实现基于zookeeper的dubbo注册. 框架:springmvc ...

  8. ZooKeeper常见问题(转)

    这段时间来,也在和公司里的一些同学交流使用zk的心得,整理了一些常见的zookeeper问题.这个页面的目标是解答一些zk常见的使用问题,同时也让大家明确zk不能干什么.页面会一直更新. 客户端 1. ...

  9. Apache-Shiro+Zookeeper系统集群安全解决方案之会话管理

    如今的系统多不是孤军奋战,在多结点会话共享管理方面有着各自的解决办法,比如Session粘连,基于Web容器的各种处理等或者类似本文说的完全接管Web容器的Session管理,只是做法不尽相同. 而本 ...

随机推荐

  1. 8.8-9 fsck、dd

    8.8 fsck:检查并修复Linux文件系统 fsck命令用于检查并修复文件系统中的错误,即针对有问题的系统或磁盘进行修复,类似的命令还有e2fsck命令.有关fsck的使用需要特别注意的是:    ...

  2. 10.15 wget:命令行下载工具

    wget命令   用于从网络上下载某些资料,该命令对于能够连接到互联网的Linux系统的作用非常大,可以直接从网络上下载自己所需要的文件. wget的特点如下: 支持断点下载功能. 支持FTP和HTT ...

  3. 关于RabbitMQ的一些问题总结

    消息中间件在工作中一般都不会采用单机模式的,该篇其实是对mq的高可用等等常见问题做一些归纳. 消息队列的高可用 普通集群与镜像集群模式,此处不做深究,另开一篇专门讲述此处 如何保证消息不被重复消费 保 ...

  4. 3分钟 Markdown 快速入门(超详细)(Day_33)

    Markdown 快速入门 (这个贼重要)注:所有符号要在英文状态下完成哦,中文是没有效果的. 1.标题 # 表示一级标题 ## 表示二级标题 ### 表示三级标题 #### 表示四级标题 ##### ...

  5. Java 将Excel转为SVG的方法

    本文以Java示例展示如何将Excel文档转为SVG格式.通过本文中的方法,在将Excel转为SVG时,如果sheet工作表中手动设置了分页,则将每个分页的内容单独保存为一个svg文件,如果sheet ...

  6. ffmpeg安装之mac安装

    转发自白狼栈:查看原文 关于ffmpeg的安装,有的人可能要折腾很久,甚至折腾一个礼拜,究其原因,基本都是编译安装惹的祸. 我们提供4种安装方式,最复杂的莫过于centos7上的编译安装. ffmpe ...

  7. .Net RabbitMQ实战指南——RabbitMQ相关概念介绍

    什么是消息中间件 消息(Message)是指在应用间传送的数据.消息可以非常简单,比如只包含文本字符串.JSON等,也可以很复杂,比如内嵌对象. 消息队列中间件(Message Queue Middl ...

  8. Django优雅集成MongoDB

    Django优雅集成MongoDB   将Django与MongoDB集成 在不更改Django ORM的情况下,将MongoDB用作Django项目的后端数据库.使用Django Admin在Mon ...

  9. ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心

    作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...

  10. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...