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. zabbix如何监控Nvidia显卡的各项指标?

    如何实现zabbix监控windows机器的N卡GPU指标呢? Nvidia卡在安装驱动程序的时候,已经自带安装了一个命令行工具来获取显卡的各个性能指标值 在windows机器上,我们可以把该路径加入 ...

  2. beautifulsoup教程

    beautifulsoup教程 BeautifulSoup4是爬虫必学的技能.BeautifulSoup最主要的功能是从网页抓取数据,Beautiful Soup自动将输入文档转换为Unicode编码 ...

  3. HOOK SSDK

    HOOK SSDT主要代码 #pragma once #include <ntifs.h> /* * * * * * * * * * * * * * * * * * * * * * * * ...

  4. 安装和配置SQL

    安装和配置SQL 在终端输入 npm i mysql命令安装SQL(加上-g全局安装) 配置SQL // 1.导入mysql模块 const mysql = require("mysql&q ...

  5. 1dialog 表单最基本的封装

    <!-- --> <template> <el-dialog :visible.sync="defaultConfigDialogAdd.dialogVisib ...

  6. DVWA_sql injection(low)

    这里主要记录下做题时的思路以及步骤,不查看源码也不对源码进行分析.(我这个dvwa是一个在线靶场,所以我也不确定是否与本地靶场有些许出入) 1.Low 将难度调为Low级别后,来到如下界面 首先输入一 ...

  7. vue实现侧边导航栏

    <div class="sidebar"> <el-menu class="sidebar-el-menu" :default-active= ...

  8. JSON<前后端的沟通>

    1.什么是JSON ==>1什么是json json:是一种轻量级数据交互格式 数据交互:每一种语言的编码都不一样,他们之间互不认识.但是现在的情况是不同的语言开发出的系统也需要进行数据交互,这 ...

  9. Count(*) 与 count(field) 一样吗?

    有这么个表: 执行 select count(*) from hy_test select count(deptno) from hy_test 都得到 5 但执行 select count(name ...

  10. IDEA里如何引入JQuery

    HTML页面的JavaScript里一般可以直接使用类似:<script src="js/jquery.js"></script>语句可以直接引入,但是会遇 ...