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. T4m

    Unity T4M 中文讲解 http://blog.csdn.net/tianmao111/article/details/46482963

  2. Python技术调查

    1. IDE 2. Local Debugging & Remote Debugging 3. Profiling

  3. 如何使用Grep命令查找多个字符串

    如何使用Grep 命令查找多个字符串 大家好,我是良许! 今天向大家介绍一个非常有用的技巧,那就是使用 grep 命令查找多个字符串. 简单介绍一下,grep 命令可以理解为是一个功能强大的命令行工具 ...

  4. vue 在使用数组的时候,数组内部数据发生变化,视图却没有改变

    data(){ return{ todos: [ {name: 'aa', age: 22}, {name: 'bb', age: 23} ] } } methods:{ changeTodos(){ ...

  5. Ajxax技术-1

    1.什么是Ajax Ajax: Asynchronous javascript and xml (异步javascript和xml). ==Ajax并不是一种新技术,而是已有技术的集合.JavaScr ...

  6. oracle之insert语句总结

    insert语句总结 16.1 第一类,insert语句:单行插入 1)SQL> create table a (id int,name char(10) default 'aaa');   / ...

  7. WebSphere MQ常用命令及配置

    WebSphere MQ常用命令及配置 (2012-06-23 23:09:16) 标签: mq命令 杂谈 分类: MQ [导读]WebSphere MQ常用命令及配置 一,队列管理命令 1,创建队列 ...

  8. JVM_02 类加载子系统

    JVM细节版架构图 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文 ...

  9. .NET Core开源导入导出库 Magicodes.IE 2.3发布

    在2.3这一版本的更新中,我们迎来了众多的使用者.贡献者,在这个里程碑中我们也添加并修复了一些功能.对于新特点的功能我将在下面进行详细的描述,当然也欢迎更多的人可以加入进来,再或者也很期待大家来提is ...

  10. 【转】Postgres SQL sort 操作性能调优

    这篇文章将以实战的方式结合笔者在项目中真实遇到的情况来讲解.说到SQL,大家可能会遇到一些写法稍微复杂的写法.比如SQL中遇到的有聚合函数sum等,也有遇到使用group by / order by的 ...