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. PyCharm切换解释器版本

    Mac PyCharm > Preferences... > Project Interpreter > Python Interpreters Windows File->D ...

  2. SpringSecurity中的Authentication信息与登录流程

    目录 Authentication 登录流程 一.与认证相关的UsernamePasswordAuthenticationFilter 获取用户名和密码 构造UsernamePasswordAuthe ...

  3. Oracle12C配置对外访问

    Oracle12C配置对外访问 第一步: 开放端口或者关闭防火墙 第二步: 配置Oracle net manager打开Net manager 修改为共享服务器 第三步: 配置连接数打开Databas ...

  4. 使用Json-lib将对象和Json互转

    工程下载地址: https://files.cnblogs.com/files/xiandedanteng/jsonSample20200308.rar Depenency: <!-- 使用js ...

  5. 1. Linux系统优化

    1. 系统安装 本着纯净系统的原则,我们在安装系统时,应选择minimal install选项,来执行最小化安装,以便有需要时,安装我们需要的安装软件包. 操作系统为CentOS7.3 1611 下载 ...

  6. Python3使用钉钉机器人推送消息(签名方式)

    import time import hmac import hashlib import base64 import urllib import json import requests impor ...

  7. Spring注解不生效原因总结

    在Spring的注解学习中发现使用(@Resource.@PostConstruct. @PreDestroy)这三个注解时不生效.使用@Resource发生空指针异常,说 明被注解对象没有被成功注入 ...

  8. k8s通过service访问pod(五)

    service 每个 Pod 都有自己的 IP 地址.当 controller 用新 Pod 替代发生故障的 Pod 时,新 Pod 会分配到新的 IP 地址.这样就产生了一个问题: 如果一组 Pod ...

  9. Anaconda使用及管理

    接下来均是以命令行模式进行介绍,Windows用户请打开"Anaconda Prompt":macOS和Linux用户请打开"Terminal"("终 ...

  10. Python+Appium实现APP自动化测试

    一.环境准备 1.脚本语言:Python3.x IDE:安装Pycharm 2.安装Java JDK .Android SDK 3.adb环境,path添加E:\Software\Android_SD ...