Zookeeper是分布式开源协调服务, 主要用来解决分布式集群中应用系统的一致性问题. 本质上是分布式小文件存储系统。
 
特性
  • 全局数据一致性(集群中每个服务器保存一份相同的数据副本,Client 无论连接到哪个服务器,展示的数据都是一致的,这是最重要的特征)  
  • 可靠性
  • 顺序性
  • 数据更新原子性(要不成功,要不失败),实时性
 
集群角色
Leader
  Zookeeper 集群工作的核心,事务请求(写操作)的唯一调度和处理者,保证集群事务处理的顺序性; 集群内部各个服务器的调度者。 对于 create , setData , delete 等有写操作的请求,则需要统一转发给leader 处理, leader 需要决定编号、执行操作,这个过程称为一个事务 。
Follower
  处理客户端非事务(读操作)请求,转发事务请求给 Leader,参与集群 Leader 选举投票。 此外,针对访问量比较大的 zookeeper 集群,还可新增观察者角色。
Observer
  观察者角色,观察 Zookeeper 集群的最新状态变化并将这些状态同步过来,其对于非事务请求可以进行独立处理,对于事务请求,则会转发给 Leader服务器进行处理。 不会参与任何形式的投票只提供非事务服务,通常用于在不影响集群事务处理能力的前提下提升集群的非事务处理能力。
  集群搭建指的是 ZooKeeper 分布式模式安装。通常由 2n+1台 servers 组成。这是因为为了保证 Leader 选举(基于 Paxos 算法的实现)能过得到多数的支持,所以 ZooKeeper 集群的数量一般为奇数。

 
数据模型
  采用树形层次结构,每个节点称为Znode。Znode兼具文件和目录两种特点,像文件维护着数据,元信息等数据结构,又像目录一样可以作为路径标识。Znode具有原子性操作。存储大小有限制,1M。Znode通过路径引用。
Znode有两种
  • 临时节点(不允许拥有子节点,会话结束,自动删除,也可以手动删除)
  • 永久节点
Znode序列化特效:如果创建的时候指定的话,该 Znode 的名字后面会自动追加一个不断增加的序列号。序列号对于此节点的父节点来说是唯一的,这样便会记录每个子节点创建的先后顺序。它的格式为“%10d”(10 位数字,没有数值的数位用 0 补充,例如“0000000001”),那么可以分为:
  • 永久序列化节点
  • 临时序列化加点
  • 永久非序列化节点
  • 临时非序列化节点

 
Watcher机制
分布式数据订阅 / 发布功能,Watcher机制为以下三个过程:客户端向服务端注册Watcher、服务端事件发生触发 Watcher、客户端回调 Watcher 得到触发事件情况
特点:一次性触发,事件封装,异步发送,先注册再触发
其中连接状态事件(type=None, path=null)不需要客户端注册,客户端只要有需要直接处理就行了。
 
选举机制
选举机制默认的算法是 FastLeaderElection,采用投票数大于半数则胜出的逻辑(服务ID,选举状态,数据ID,逻辑时钟)
全新集群选举:给自己投票,有一台超过半数直接成为Leader。
非全新集群选举 :对于运行正常的 zookeeper 集群,中途有机器 down 掉,需要重新选举时,选举过程就需要加入以下
  • 数据 ID:数据新的 version 就大,数据每次更新都会更新 version。
  • 服务器 ID:就是我们配置的 myid 中的值,每个机器一个。
  • 逻辑时钟:值从 0 开始递增,每次选举对应一个值. 同一次选举中,这个值是一致的。
这样选举的标准就变成:
  1. 逻辑时钟小的选举结果被忽略,重新投票;
  2. 统一逻辑时钟后,数据 id 大的胜出;
  3. 数据 id 相同的情况下,服务器 id 大的胜出;
 
独占锁:写操作,所有客户端来获取锁, 只有一个可以获得, 使用临时节点实现,数据对象只对一个事务可见
共享锁:读操作,使用临时节点实现,数据对所有事务都可见
控制时序:所有人都可以得到锁, 只不过有个顺序, 某个节点下的临时顺序子节点实现
Zokeeper适合分布式锁的原因:每个节点都是天然的顺序发号器;节点具有递增性,可以规定最小的获得锁;节点监听机制,可以保障占有锁方式有序且高效。
 
ZK在分布式集群中的作用

Zookeeper基础理论的更多相关文章

  1. 2、初探 ZooKeeper 技术内幕

    分布式一致性 “分布式” 是大型系统实现高性能.高可用所常用的架构手段,本章节将概述 “分布式一致性”的基本内容,以作为 ZAB 算法阐述的基础. 分布式一致性的基本概念 数据库系统的基础理论中,“事 ...

  2. dubbo入门学习(一)-----分布式基础理论、架构发展以及rpc、dubbo核心概念

    一.分布式基础理论 1.什么是分布式系统? <分布式系统原理与范型>定义: “分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统” 分布式系统(distributed ...

  3. Zookeeper入门一篇就够了

    谈点分布式 什么是分布式呢? 起初,我们的应用流量比较小,所有东西全部部署在一个服务器,比如全部丢给一个tomcat来处理,顶多做一个tomcat的多节点部署多分,再挂一台Nginx做一下负载均衡就O ...

  4. Apache ZooKeeper原理剖析及分布式理论名企高频面试v3.7.0

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Apache ZooKeeper官网 https://zookeeper.apache.org/ 最新版本3.7.0 ...

  5. 这样学习ZooKeeper离大厂所需技能要求还远吗

    概述 定义 Apache ZooKeeper是一种用于构建分布式应用的高性能.高度可靠.开源的分布式协调服务,提供如配置信息维护.命名.分布式同步.组服务等功能,可以实现如分布式共识.组管理.领导选举 ...

  6. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  7. [译]ZOOKEEPER RECIPES-Leader Election

    选主 使用ZooKeeper选主的一个简单方法是,在创建znode时使用Sequence和Ephemeral标志.主要思想是,使用一个znode,比如"/election",每个客 ...

  8. zookeeper源码分析之六session机制

    zookeeper中session意味着一个物理连接,客户端连接服务器成功之后,会发送一个连接型请求,此时就会有session 产生. session由sessionTracker产生的,sessio ...

  9. zookeeper源码分析之五服务端(集群leader)处理请求流程

    leader的实现类为LeaderZooKeeperServer,它间接继承自标准ZookeeperServer.它规定了请求到达leader时需要经历的路径: PrepRequestProcesso ...

随机推荐

  1. File类与IO流

    一.File类与IO流 数组.集合等内容都是把数据放在内存里面,一旦关机或者断电,数据就会立刻从内存里面消失.而IO主要讲文件的传输(输入和输出),把内存里面的数据持久化到硬盘上,如.txt .avi ...

  2. VMware安装Centos7 -九五小庞

    VMware安装Centos7超详细过程(图文) https://blog.csdn.net/babyxue/article/details/80970526 安装centos7的时候 启动会提示Pl ...

  3. akka-streams - 从应用角度学习:basic stream parts

    实际上很早就写了一系列关于akka-streams的博客.但那个时候纯粹是为了了解akka而去学习的,主要是从了解akka-streams的原理为出发点.因为akka-streams是akka系列工具 ...

  4. Redis Linux 安装部署

    Redis部署文档   Redis部署文档 准备软件: 开始部署: 解压tar包[root@localhost redis]# tar -zxvf redis-3.2.8.tar.gz 进入Redis ...

  5. JVM中的对象

    虚拟机中的对象 对象的分配 虚拟机遇到一条new指令时:根据new的参数是否能在常量池中定位到一个类的符号引用,如果没有,说明还未定义该类,抛出ClassNotFoundException: 1)检查 ...

  6. shell进行微信报警的简单应用

    一.企业微信注册地址: https://work.weixin.qq.com/?from=openApi二.请求格式 1.获取token的方法 curl -s 'https://qyapi.weixi ...

  7. hadoop和hbase高可用模式部署

    记录apache版本的hadoop和hbase的安装,并启用高可用模式. 1. 主机环境 我这里使用的操作系统是centos 6.5,安装在vmware上,共三台. 主机名 IP 操作系统 用户名 安 ...

  8. es创建普通索引以及各种查询

    创建索引 创建普通索引: PUT /my_index { "settings": { "index": { "number_of_shards&quo ...

  9. 当try、catch中有return时,finally中的代码会执行么?

    今天,看到一个面试题: try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗? 我们用代码来验证下: public static void mai ...

  10. 部署Go语言程序的N种方式

    部署Go语言项目 本文以部署 Go Web 程序为例,介绍了在 CentOS7 服务器上部署 Go 语言程序的若干方法. 独立部署 Go 语言支持跨平台交叉编译,也就是说我们可以在 Windows 或 ...