Zookeeper应用场景和底层设计

2023-09-14 22:21:45

一、什么是zookeeper

Zookeeper是一个开源分布式协调服务框架,它是服务于其它集群式框架的框架。

【简言之】
有一个服务A,以集群的方式提供服务。只需要A专注于它提供的服务就可以,至于它如何以多台服务器协同完成任务的事情,交给Zookeeper来协调。

【底层设计逻辑】
1)基于观察者设计模式
2)等价于文件系统+通知机制

【数据存储的方式】
zookeeper是文件系统,当然是像树一样的结构存储
1)每个节点都有唯一路径标识
2)每个节点默认只能存储1M数据

【zookeeper运行规则】
1)支持一个leader,多个follower组成的集群方式运行
2)集群中半数以上节点存活,zookeeper就能提供正常的服务
3)集群中的每个服务器上保存的数据都完全相同,具有数据一致性
4)同一个客户端的请求会按照请求的顺序执行
5) 数据更新具有原子性,要么全部更新成功,要么不更新

【zookeeper中节点类型】
是否持久(-e参数)
1)持久型:客户端与服务器端断开连接后,创建节点不删除create /nodename
2)短暂型:客户端与服务器端断开连接后,创建节点自己删除create -e /nodename
是否有序列号(-s参数)
1)有create -s /nodename: /nodename0000000003 可依据序号进行全局的事务排序
2)无create /nodename: /nodename
容器节点
1)当子节点都不存在后,容器节点就会自动消失
TTL节点
1)当超过时间,自动消失

【zookeeper中节点信息】
1)存储的数据信息
2)路径信息
3)节点的元数据
4)子节点信息

二、zookeeper应用场景

1、统一命名:唯一名称标识

在这里插入图片描述

2、统一配置管理:所有节点配置信息一致、更新后快速更新到各个节点上

在这里插入图片描述

3、统一集群管理:每一个节点可以立即感知到其它节点的变化

在这里插入图片描述

4、 服务器节点动态上下线

在这里插入图片描述

5、软负载均衡

在这里插入图片描述

三、zookeeper中相关的底层原理

1、选举机制

集群的机器数量是奇数还是偶数?
答:当然是奇数好,不然容易平票

怎样一种情况表示选举成功?
答:投票数最先超过半数的机器成为leader,不论先来后到

机器状态有哪些?
1)looking:选举态
2)leading:当官态,正常工作态
3)following:随从态,正常工作态

选票格式是什么样的,如何比较各个信息?
答:每一张选票上包含三个信息
1)epoch:参加过几次选举
2)zxid:最大事务ID
3)sid:服务器编号
按照顺序依次比较,谁大选谁

什么时候开始选举?
答:分两种情况
【情况1——zookeeper集群搭建过程中】
在没有选出leader之前都处于looking状态,并且新加进来一个机器就组织一次选举直到选出leader,后面新加进来的机器都是follower。
【情况2——集群运行过程中,leader“挂掉了”】
如果是某个follower认为leader挂掉了,实际上leader在正常工作。这种情况下,不会进行选举,只是要求该follower不断尝试与leader获取连接直到成功。
如果leader真的挂掉了,会在所有正常工作的follower中安装选票信息进行重新选举。

如何判断leader是否挂掉了?
答:在工作过程中,leader会发送带有ping的信息给follower,当follower一段时间内没有读取到该信息,就可以任务该leader挂掉了。

2、CAP理论

CAP分别是指一致性(Consistency),可用性(Consistency)和分区容忍性(Partition tolerance):

  • 一致性:数据保持强一致性
  • 可用性:服务器可提供完备的服务
  • 分区容忍性:容灾,分区存备份
更多推荐

day31 代码随想录 分发饼干&摆动序列&最大子序和

大纲●理论基础●455.分发饼干●376.摆动序列●53.最大子序和455.分发饼干题目:455.分发饼干//分发饼干//有数组g代表胃口大小,数组s代表饼干大小//求满足最多胃口的值//思路是对gs排序//优先选择最大的饼干满足最大的胃口//[1,2,3][1,1]intfitChildVal(vector<int>

Multitor:一款带有负载均衡功能的多Tor实例创建工具

关于MultitorMultitor是一款带有负载均衡功能的多Tor实例创建工具,Multitor的主要目的是以最快的速度完成大量Tor进程的初始化,并将大量实例应用到我们日常使用的程序中,例如Web浏览器和聊天工具等等。除此之外,在该工具的帮助下,我们还可以在进行渗透测试和对基础设施安全性进行审计时提高隐蔽性和匿名性

【校招VIP】前端操作系统之I/O调度算法

考点介绍I/O调度算法在各个进程竞争磁盘I/O的时候担当了裁判的角色。他要求请求的次序和时机做最优化的处理,以求得尽可能最好的整体I/O性能。前端操作系统之I/O调度算法-相关题目及解析内容可点击文章末尾链接查看!一、考点题目1.某文件占10个磁盘块,现要把该文件磁盘块逐个读入主存缓冲区,并送用户区进行分析,假设一个缓

vue项目通过json-bigint在前端处理java雪花id过长导致失去精度问题

这里我简单模仿了一个接口这里我单纯返回一个long类型的雪花id然后前端用axios去请求大家知道axios会对请求数据做一次处理而我们data才是拿到我们java这边实际返回的东西简单说就是输出一下我们后端返回的内容这里我们网络中显示的是358661018680954880但神奇的一幕发生了我们实际输出的是35866

Kafka 源码分析——Consumer

文章目录前言Consumer消费流程Consumer初始化如何选举ConsumerLeader消费者分区策略Consumer拉取数据提交偏移量前言当生产者将消息发送到Broker时,这些消息将被存储在磁盘上。消费者是如何消费这些消息呢?Consumer消费流程站在源码的核心角度,可以把Consumer分成以下几个核心部

自己封装 vue3+ts 组件库并且发布到 NPM

自己封装vue3+ts组件库并且发布到NPM创建项目pnpmcreatevite配置package.json按照提示创建好项目,然后再package.json中进行如下配置:{"name":"tribiani-vue-tools","private":false,"version":"0.0.12","type":"m

Qt 面试突击

1.在Qt中,多线程环境下,信号槽分别在什么样的线程中执行,如何控制?(1)信号槽的执行线程如果信号和槽都在同一个线程,就它们就在这个线程中执行如果信号和槽不在同一个线程:Qt::DirectConnection:信号槽会在信号发射的线程中直接执行。(可能导致线程安全问题)Qt::QueuedConnection:信号

9月20日星期三,今日早报简报微语报早读

9月20日,星期三,早报简报微语早读分享。1、大理出台民宿管理新规:住宅用于民宿经营须经有利害关系的业主一致同意;​2、十一假期火车票已售出超1亿张;3、WIPO副总干事:知识产权等无形资产约占全球商业价值的90%;4、外媒:泽连斯基赴美参加联合国大会,系冲突爆发以来首次乘乌飞机出访;5、9月20日24时油价将上调,部

【Flink实战】Flink 商品销量统计-实战Bahir Connetor实战存储 数据到Redis6.X

🚀作者:“大数据小禅”🚀文章简介:Flink商品销量统计-实战BahirConnetor实战存储数据到Redis6.X🚀欢迎小伙伴们点赞👍、收藏⭐、留言💬目录导航Flink怎么操作RedisFlink商品销量统计-转换-分组-聚合-存储自定义的RedisSink实战Flink怎么操作RedisFlink怎么操

100G QSFP28 100km光模块最新解决方案

随着信息时代的到来,数据传输的速度和距离要求越来越高。目前,易天光通信发布了具有超低成本、可实现100G超长距离传输新方案——100GQSFP28100km光模块,该方案是在100GZR480km光模块上的全面升级。一、产品概述100GZR4100km是专为100公里光通信应用而设计的产品。易天光通信(ETU-LINK

线程池使用之自定义线程池

目录一:Java内置线程池原理剖析二:ThreadPoolExecutor参数详解三:线程池工作流程总结示意图四:自定义线程池-参数设计分析1:核心线程数(corePoolSize)2:任务队列长度(workQueue)3:最大线程数(maximumPoolSize)4:最大空闲时间(keepAliveTime)五:自

热文推荐