首页 > 其他分享 >【Zookeeper】(一)概述与内部原理

【Zookeeper】(一)概述与内部原理

时间:2023-01-31 23:23:54浏览次数:47  
标签:线程 Zookeeper Leader 概述 原理 数据 节点 客户端

Zookeeper概述

1 概述

  • Zookeeper是一个开源的、分布式的,为分布式应用提供协调服务的Apache项目。

  • Zookeeper从设计模式的角度来看,是一个基于观察者模式设计的分布式服务管理框架

  • 它负责管理大家都关心的数据,然后接收观察者的注册

  • 一旦数据发生变化,Zookeeper就负责通知那些注册在Zookeeper的观察者做出响应的反应

image-20230129161018394

2 特点

image-20230129161454362
  • 一个领导者(Leader)多个跟随者(Follower)组成的集群

  • 集群中只要有半数以上的节点存活,Zookeeper集群就能正常服务

  • 全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到那个Server,数据都是一致的

  • 更新请求顺序,来自同一个Client的更新请求按照其发送顺序依次执行

  • 数据更新原子性:一次数据更新要么成功要么失败

  • 实时性:在一定时间范围内,Client能读到最新的数据

3 Zookeeper数据结构

image-20230129162056293

Zookeeper数据模型结构与Unix文件系统类似,整体可以看做是一棵树,每个节点称作一个Znode每一个Znode默认能够存储1Mb的数据,每个Znode都能通过路径进行唯一标识

4 应用场景

Zookeeper内部原理

1 选举机制

  • 半数机制:半数以上的机器存活,集群可用,所以Zookeeper适合安装奇数台服务器
  • 优先选择自己,不能选出则选节点id最大的那个

2 节点类型

  • 持久:客户端和服务器端断开连接后,创建的节点不删除,持久化节点又分为两类:

    • 持久化目录节点:客户端和服务器端断开连接后,创建的节点不删除

    • 持久化顺序编号目录节点:客户端和服务器端断开连接后,创建的节点不删除,只是Zookeeper对节点名称进行顺序编号

      创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护。

      在分布式系统中,顺序号可以用于为所有的事件进行全局排序,这样客户端可以根据顺序号来推断事件的顺序

  • 短暂:客户端和服务器端断开连接够,创建的节点自己删除,短暂节点也分为两类:

    • 临时目录几点
    • 临时顺序编号目录节点

image-20230131162822464

3 Stat结构体

每次修改Zookeeper节点状态都会收到一个zxid形式的时间戳,也就是Zookeeper事务ID。事务ID是Zookeeper中所有修改总的次序。每个修改都有唯一的zxid,如果zxid1小于zxid2则说明1在2前面发生。

image-20230131182206941

  • dataLength-znode的数据长度
  • numChild-znode子节点数量

4 ⭐监听器原理

  • 首先一个main线程用于创建Zookeeper客户端

  • 然后在main线程中创建客户端,客户端会创建两个线程,一个负责网络连接通信(connect),一个负责监听(listener)

  • 通过connet线程将监听事件发送给Zookeeper,然后在Zookeeper的注册监听列表中会将注册的监听事件添加到列表中

    监听事件包含客户端的ip、端口号以及监听路径等信息

  • Zookeeper监听到有数据或者路径发生变化,就会把这个消息发送给客户端listener线程,listener线程内部调用process()方法

image-20230131183228532

5 ⭐服务器写数据流程

主要是客户端向服务端写数据,怎么保证数据在集群上的同步:

  1. Client向Zookeeper的Server1上发送写请求
  2. 如果Server1不是Leader,则会把请求进一步转发给Leader,然后Leader会将请求广播给各个Server,每个Server写成功之后就会通知Leader
  3. Leader收到半数以上的Follower写成功的通知后,就会告诉最开始接收到写请求的Server1数据写入成功
  4. Server1会进一步通知Client数据写入成功,这时就认为整个写入操作成功了

标签:线程,Zookeeper,Leader,概述,原理,数据,节点,客户端
From: https://www.cnblogs.com/tod4/p/17081148.html

相关文章

  • 【Zookeeper】(二)安装与配置
    1安装安装JDK(参考项目部署)将Zookeeper拷贝到Linux下解压tar-zxvfapache-zookeeper-3.5.10-bin.tar.gz-C/opt/module/修改配置文件将/opt/module/ap......
  • 【Zookeeper】(三)部署与使用、服务器节点动态上下线案例分析
    目录......
  • 《RPC实战与核心原理》学习笔记Day14
    19|分布式环境下如何快速定位问题?分布式环境下定位问题有什么难点?分布式环境下定位问题的难点在于,各子应用、子服务之间有复杂的依赖关系,我们有时很难确定是哪个服务......
  • Java概述
    Java编程语言最初由SunMicrosystems开发,由JamesGosling发起并于1995年发布,作为SunMicrosystemsJava平台(Java1.0[J2SE])的核心组件。Java标准版的最新版本是JavaS......
  • 70、缓存---分布式锁---分布式锁的原理及使用
    阶段一代码如下:privateMap<String,List<CatelogTwoLevelVo>>getCatalogJsonFromDb(){//得到锁之后,去缓存中再确定一次是否有数据Stringcatalog......
  • RabbitMQ基本原理及模式介绍
    一、RabbitMQ概念RabbitMQ:是一个由erlang开发的AMQP(AdvancedMessageQueue高级消息队列协议)的开源实现,由于erlang语言的高并发特性,性能较好,本质是个队列,FIFO先入先......
  • Ranger概述及安装配置
    0.前序希望拥有一个框架,可以管理大多数框架的授权,包括:hdfs的目录读写权限各种大数据框架中的标的权限,列级(字段)权限,甚至行级权限,函数权限(UDF)等相关资源的权限是否能帮......
  • Dubbo 中 Zookeeper 注册中心原理分析
    Dubbo中Zookeeper注册中心原理分析https://mp.weixin.qq.com/s/XbLxxmqoxVkYS_eDM4cauA本文通过分析Dubbo中ZooKeeper注册中心的实现ZooKeeperResitry的继承体系结构,......
  • HTTP笔记2--HTTP工作协议及原理
     TCP/IPTCP/IP我们一般称之为协议簇,就是TCP/IP协议簇中不仅仅只有TCP协议和IP协议,它是一系列网络通信协议的统称。而其中最核心的两个协议就是TCP/IP协议,其他......
  • vue3原理
    constp=newProxy({name:'路飞',age:18},{//创建代理//查get(target,propName){console.log(`有人读取......