Java面试知识点(全)-分布式微服务-zookeeper面试知识点

news2024/10/6 16:20:44

Java面试知识点(全)
导航: https://nanxiang.blog.csdn.net/article/details/130640392
注:随时更新

ZooKeeper是什么?

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户

ZooKeeper提供了什么?

1.文件系统

  • zk与文件系统的区别:zk用来存一些元数据(配置数据,集群信息等),不用来存大量业务数据
  • 与数据库的区别:数据库是一个中心节点,而zk是一个高可用集群;zk提供了心跳和异步通知机制,数据库不提供
  • zk节点分为:机器节点,数据节点(znode);而znode分为两大类:持久节点,临时节点。
  • 每个子目录项如 NameService 都被称作为znode,和文件系统一样,我们能够自由的增加、删除znode,在一个znode下增加、删除子znode,唯一的不同在于znode是可以存储数据的。

有四种类型的znode:
1、PERSISTENT-持久化目录节点
客户端与zookeeper断开连接后,该节点依旧存在
2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点
客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号
3、EPHEMERAL-临时目录节点
客户端与zookeeper断开连接后,该节点被删除
4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点
客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

在这里插入图片描述

2.通知机制
客户端注册监听它关心的目录节点,当目录节点发生变化(数据改变、被删除、子目录节点增加删除)时,zookeeper会通知客户端。

Zookeeper做了什么?

-1.命名服务
在zookeeper的文件系统里创建一个目录,即有唯一的path。在我们使用tborg无法确定上游程序的部署机器时即可与下游程序约定好path,通过path即能互相探索发现。

2.配置管理
程序总是需要配置的,如果程序分散部署在多台机器上,要逐个改变配置就变得困难。现在把这些配置全部放到zookeeper上去,保存在 Zookeeper 的某个目录节点中,然后所有相关应用程序对这个目录节点进行监听,一旦配置信息发生变化,每个应用程序就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中就好
在这里插入图片描述

3.集群管理
所谓集群管理无在乎两点:是否有机器退出和加入、选举master。
对于第一点,所有机器约定在父目录GroupMembers下创建临时目录节点,然后监听父目录节点的子节点变化消息。一旦有机器挂掉,该机器与 zookeeper的连接断开,其所创建的临时目录节点被删除,所有其他机器都收到通知:某个兄弟目录被删除,于是,所有人都知道:它上船了。
新机器加入也是类似,所有机器收到通知:新兄弟目录加入,highcount又有了,对于第二点,我们稍微改变一下,所有机器创建临时顺序编号目录节点,每次选取编号最小的机器作为master就好。

在这里插入图片描述

4.分布式锁
有了zookeeper的一致性文件系统,锁的问题变得容易。锁服务可以分为两类,一个是保持独占,另一个是控制时序。
对于第一类,我们将zookeeper上的一个znode看作是一把锁,通过createznode的方式来实现。所有客户端都去创建 /distribute_lock 节点,最终成功创建的那个客户端也即拥有了这把锁。用完删除掉自己创建的distribute_lock 节点就释放出锁。
对于第二类, /distribute_lock 已经预先存在,所有客户端在它下面创建临时顺序编号目录节点,和选master一样,编号最小的获得锁,用完删除,依次方便。

5.队列管理
两种类型的队列:
1)、同步队列,当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达。
2)、队列按照 FIFO 方式进行入队和出队操作。
第一类,在约定目录下创建临时目录节点,监听节点数目是否是我们要求的数目。
第二类,和分布式锁服务中的控制时序场景基本原理一致,入列有编号,出列按编号。

分布式与数据复制

Zookeeper作为一个集群提供一致的数据服务,自然,它要在所有机器间做数据复制。数据复制的好处:
1、容错:一个节点出错,不致于让整个系统停止工作,别的节点可以接管它的工作;
2、提高系统的扩展能力 :把负载分布到多个节点上,或者增加节点来提高系统的负载能力;
3、提高性能:让客户端本地访问就近的节点,提高用户访问速度。
从客户端读写访问的透明度来看,数据复制集群系统分下面两种:
1、写主(WriteMaster) :对数据的修改提交给指定的节点。读无此限制,可以读取任何一个节点。这种情况下客户端需要对读与写进行区别,俗称读写分离;
2、写任意(Write Any):对数据的修改可提交给任意的节点,跟读一样。这种情况下,客户端对集群节点的角色与变化透明。
对zookeeper来说,它采用的方式是写任意。通过增加机器,它的读吞吐能力和响应能力扩展性非常好,而写,随着机器的增多吞吐能力肯定下降(这也是它建立observer的原因),而响应能力则取决于具体实现方式,是延迟复制保持最终一致性,还是立即复制快速响应。

ZooKeeper的集群

ZK集群如下图所示。这是实际应用的一个场景,该ZooKeeper集群当中一共有5台服务器,有两种角色Leader和Follwer,5台服务器连通在一起,客户端有分别连在不同的ZK服务器上。如果当数据通过客户端1,在左边第一台Follower服务器上做了一次数据变更,他会把这个数据的变化同步到其他所有的服务器,同步结束之后,那么其他的客户端都会获得这个数据的变化。

在这里插入图片描述

注意:
通常Zookeeper由2n+1台servers组成,每个server都知道彼此的存在。每个server都维护的内存状态镜像以及持久化存储的事务日志和快照。为了保证Leader选举能过得到多数的支持,所以ZooKeeper集群的数量一般为奇数。对于2n+1台server,只要有n+1台(大多数)server可用,整个系统保持可用。
1.集群中的角色
在ZooKeeper集群当中,集群中的服务器角色有两种Leader和Learner,Learner角色又分为Observer和Follower,具体功能如下:
1).领导者(leader),负责进行投票的发起和决议,更新系统状态
2).学习者(learner),包括跟随者(follower)和观察者(observer),
3).follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票
4).Observer可以接受客户端请求,将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,observer的目的是为了扩展系统,提高读取速度。
5). 客户端(client),请求发起方

在这里插入图片描述

ZooKeeper的组件图中给出了ZooKeeper服务的高层次的组件。除了请求处理器(requestprocessor)外,构成ZooKeeper服务的每个服务器都有一个备份。复制的数据库(replicateddatabase)是一个内存数据库,包含整个数据树。为了可恢复,更新会被log到磁盘,并且在更新这个内存数据库之前,先序列化到磁盘。

每个ZooKeeper都为客户端提供服务。客户端只连接到一个服务器,并提交请求。读请求直接由本地的复制数据库提供数据。对服务状态进行修改的请求、写请求通过一个约定的协议进行通讯。
作为这个协议的一部分,所有的写请求都被传送到一个叫“首领(leader)”的服务器,而其他的服务器,叫做“(随从)followers”,follower从leader接收信息修改的提议,并同意进行。当leader发生故障时,协议的信息层(messaginglayer)关注leader的替换,并同步到所有的follower。
ZooKeeper采用一个自定义的信息原子操作协议,由于信息层的操作是原子性的,ZooKeeper能保证本地的复制数据库不会产生不一致。当leader接收到一个写请求,它计算出写之后系统的状态,把它变成一个事务。

Zookeeper的读写机制和保证及特点

  • (1)ZooKeeper的读写机制
    Zookeeper是一个由多个server组成的集群
    一个leader,多个follower
    每个server保存一份数据副本
    全局数据一致
    分布式读写
    更新请求转发,由leader实施

  • (2)ZooKeeper的保证
    ZooKeeper运行非常快而且简单。虽然它的目标是构建更加复杂服务(例如同步)的基础,但它提供了一些保证,如下:
    1.顺序一致性:来自于客户端的更新,根据发送的先后被顺序实施。
    2.唯一的系统映像:尽管客户端连接到不同的服务器,但它们看到的一个唯一(一致性)的系统服务,client无论连接到哪个server,数据视图都是一致的。
    3.可靠性:一旦实施了一个更新,就会一直保持那种状态,直到客户端再次更新它,同时数据更新原子性,一次数据更新要么成功,要么失败。
    4.及时性:在一个确定的时间内,客户端看到的系统状态是最新的。

  • (3)ZooKeeper特点
    最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。
    可靠性:具有简单、健壮、良好的性能,如果消息m被一台服务器接受,那么它将被所有的服务器接受。
    实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。 但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。
    等待无关(wait-free):慢的或者失效的client,不得干预快速的client的请求,使得每个client都能有效的等待。
    原子性:更新只能成功或者失败,没有中间状态。
    顺序性:包括全局有序和偏序两种:
    全局有序:是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;
    偏序:是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面

Zookeeper工作原理

Zookeeper 的核心是原子广播,这个机制保证了各个Server之间的同步。实现这个机制的协议叫做Zab协议。Zab协议有两种模式,它们分别是恢复模式(选主)和广播模式(同步)。当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数Server完成了和 leader的状态同步以后,恢复模式就结束了。状态同步保证了leader和Server具有相同的系统状态。
为了保证事务的顺序一致性,zookeeper采用了递增的事务id号(zxid)来标识事务。所有的提议(proposal)都在被提出的时候加上了zxid。实现中zxid是一个64位的数字,它高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。低32位用于递增计数。

Zookeeper对节点的watch监听通知是永久的吗

不是。官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。
为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。
一般是客户端执行getData(“/节点A”,true),如果节点A发生了变更或删除,客户端会得到它的watch事件,但是在之后节点A又发生了变更,而客户端又没有设置watch事件,就不再给客户端发送。
在实际应用中,很多情况下,我们的客户端不需要知道服务端的每一次变动,我只要最新的数据即可。
部署方式?集群中的机器角色都有哪些?集群最少要几台机器
单机,集群。Leader、Follower。集群最低3(2N+1)台,保证奇数,主要是为了选举算法。
集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢?
记住一个原则:过半存活即可用

ZooKeeper集群中服务器之间是怎样通信的?

Leader服务器会和每一个Follower/Observer服务器都建立TCP连接,同时为每个F/O都创建一个叫做LearnerHandler的实体。LearnerHandler主要负责Leader和F/O之间的网络通讯,包括数据同步,请求转发和Proposal提议的投票等。Leader服务器保存了所有F/O的LearnerHandler。
master/slave之间通信
Storm:定期扫描
PtBalancer:节点监听

ZooKeeper是CP还是AP

CAP是什么?

同步: 指的是多个量在变化过程中保持一定的相对关系

Consistency 一致性, 在分布式系统中的所有数据备份,在同一时刻有同样的值(或是同步的值)

Availability 可用性, 能提供服务, 且对每个请求都尽快做出响应

Partition tolerance 分区容错性, 分布式系统在遇到任何网络分区故障时, 仍能够保证对外提供满足一

致性或 可用性 的服务; 分区是指在使用分布式系统架构中, 由于机房间网络不通, 导致被划分成了多个区

CAP的A与C的矛盾:

满足AP: 订单服务 调用库存服务 扣库存时, 扣库存会拖慢时间, 所以干脆直接生成订单, 后续系统再扣库存

这样, 用户立刻得到了响应, 即满足了高可用, 但是库存没有及时进行扣减, 牺牲了一致性, 订单服务和库存服务短期内数据不同步不一致了

满足CP: 订单服务 调用库存服务 扣库存时, 扣库存会拖慢了时间 等待其扣减完成, 满足了一致性, 牺牲了快速做出响应的高可用

满足CA: 不拆分数据库了, 就没有网络故障的分区问题了;

但这样就不叫分布式了变成了单机应用, 也就没CAP分布式理论一说了

所以P是一定要满足的, A和C之间是矛盾的

Base理论

Base理论: 对弱一致性AP的补救, 即符合最终一致性, 一段时间后, 最终一致即可

实现方式: 借助消息队列, 过后再取消息进行处理, 若 失败可以人工处理解决

根据业务进行选择:

对于银行金融这些需要安全性高的业务, 优先满足一致性CP;
对于互联网公司用户为王, 优先满足可用性AP+Base, 提升用户体验感

ZooKeeper是什么:

ZooKeeper是 类Unix文件系统+通知机制, 核心是原子消息广播, 用作分布式集群协调, 是润滑剂

ZooKeeper和Vue的双向绑定 都是观察者模式, 它存储和管理着大家都关心的数据, 接受观察者的注册监听

集群必须有半数以上节点才能正常工作, 应安装奇数台最好

Client和Server建立的是TCP长连接

ZooKeeper是CP还是AP?

ZooKeeper的AP和CP是从不同的角度分析的:

  • 处理写操作请求时, 不用等待全部follwer同步完成(而是超过半数即可), 保证了可用性, 但丢失了数据一致性, 所以是此时是AP

  • ZooKeeper在leader选举期间, 会暂停对外提供服务, 所以丢失了可用性, 保证了一致性, 所以此时是CP
    所以, ZooKeeper广义上来说是CP, 狭义上是AP+Base 最终一致性

  • 特性:
    顺序一致性: ZK接收到的 多个写操作请求, 会按照其接收顺序被应用到ZK中

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

    数据更新原子性: 一次数据的更新, 要么所有节点都成功, 要么都失败

    用到了分布式事务, 生成一个全局唯一的ZXID

    最终一致性: 处理写操作请求, 不用阻塞等待全部follwer同步完成, 保证了可用性, 但丢失了数据一致性, 所以是此时是AP; 但符合Base理论, 最终是一致的

外传

😜 原创不易,如若本文能够帮助到您的同学
🎉 支持我:关注我+点赞👍+收藏⭐️
📝 留言:探讨问题,看到立马回复
💬 格言:己所不欲勿施于人 扬帆起航、游历人生、永不言弃!🔥

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/555329.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现在转行想学云计算?这些知识你需要提前掌握!

现在转行想学云计算?这些知识你需要提前掌握! 近年来,云计算技术和应用正铺天盖地向我们袭来,工作、生活、娱乐、教育、金融、科技、工业、农业等各个领域都有他的身影。什么是“云”?“云”是一个庞大的可容纳海量资源…

医疗科普系统和微信小程序开箱即用

一.下载地址 http://www.gxcode.top/code 二.项目说明 运行环境:jdk8tomcat8mysql5.7IntelliJ IDEAmaven微信开发工具 这是一个ssmvue微信小程序的医疗科普小程序,分为pc端和微信小程序端, pc端包括:管理员角色和学生角色。 管…

【LeetCode】168. Excel表列名称

168. Excel表列名称(简单) 思路 显然,这是一道从 1 开始的的 26 进制转换题。 对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对 columnNumber 进行 / 算,将已经取得…

【项目源码】基层医院信息化管理系统HIS源码

医院信息系统(HIS)经历了从手工到单机再到局域网的两个阶段,随着云计算、大数据新技术迅猛发展,基于云计算的医院信息系统将逐步取代传统局域网HIS,以适应人们对医疗卫生服务越来越高的要求。 利用云计算、大数据等现代信息技术研…

Windows下安装docker

Windows下安装docker 1.安装WSL2 我的Windows版本如下: 版本 Windows 11 专业版 版本 22H2 1.1 检查能否安装 必要条件: Windows 10 对于 x64 系统:版本 1903 或更高版本,内部版本为 18362 或更高版本。对于 ARM64 系统&…

5个值得一试的开源大语言模型

5个值得一试的开源大语言模型 人工智能已经成为我们生活中不可或缺的一部分,而LLM(大型语言模型)处于这一变化的最前沿。 在对话式人工智能方面,大语言模型的性能最为关键。 虽然像 OpenAI 的 GPT-4 这样的商业大语言模型已经引起…

jdk13至15——文本块特性

文本块在jdk13中第一次预览,jdk14第二次预览,jdk15正式版; 终于不用在多行字符串中加一堆\n和一堆\"和一堆了; 之前需要这么麻烦: Testvoid test() {String s "testabcd\n" "aaa\n" "…

【机器学习】贝叶斯分类与概率图模型

文章目录 第五章 贝叶斯分类与概率图模型5.1、贝叶斯决策与贝叶斯分类5.1.1、贝叶斯基本原理5.1.2、朴素贝叶斯分类器(naive bayes)5.1.3、半朴素贝叶斯 5.2、有向图与无向图一般概念5.2.1、有向图5.2.2、无向图5.2.3、条件独立性5.2.4、图模型推理的概念…

海睿思分享 | 浅谈企业数据资产管理

1、什么是数据资产 与实物资产、无形资产一样,数据资产首先表现为是一种资源。也就是说,并非所有的数据资源都可以升级为数据资产。作为“资产”的数据资源,大体表现为以下两种形式:一是可以通过合理应用创造出新的价值。二是通过…

【k8s】Jenkins实现Java springboot应用CI、CD实践 【二】

一、运行Jenkins流水线流程思路: 场景1:常规java应用,使用jenkins pipeline 交付到Kubernetes集群中1、准备好java代码、Dockerfile、 deploy. yaml资源清单文件CI阶段: 1、获取代码 2、漏洞扫描 3、检测漏洞扫描结果,如果正常则…

OpenAI ChatGPT3.5-turbo实际解决问题能力评测

OpenAI ChatGPT3.5-turbo实际解决问题能力评测 ​ 程序员在coding的时候会经常遇到需要查阅资料的情况,最好的结果是直接能拿到一份好用的demo版本code,本次我们来评测:bing搜索和chatGPT3.5,解决实际问题:“html 图片…

【Proteus仿真】51单片机矩阵按键+中断+数码管显示+串口输出

【Proteus仿真】51单片机矩阵按键中断数码管显示串口输出 📌相关篇《【Proteus仿真】51单片机矩阵按键扫描外部中断使用》📍《【Proteus仿真】51单片机串口输出实验》🎈 《【Proteus仿真】51单片机定时器计数共阴数码管驱动显示》 &#x1f5…

PMP-敏捷管理知识总结

敏捷管理 敏捷管理 01敏捷开发是一种以人为核心、迭代、循序渐进的开发方法,在敏捷开发中,项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征 。 敏捷项目管理简化了繁琐的流程和文档管理&…

考研考公太卷了,出国留学能弯道超车吗?

这届年轻人太难了! 国内高考人数越来越多,考上好大学的难度很大。2022年,高考报名人数是1193万,但考上本科的只有466万,考上双一流大学的不足50万,上双一流大学考生的比例不到5%。 高考只是卷的开始&…

软件代码设计-小优化(五)

产品需求: 按照天统计策略信收信人数和收信次数。以前策略信只有发送是没有收集的,现在要数据咋办,得收集啊。 设计方案: 因为策略信的发送是在一个单独的工程里,没有连接数据库。于是收集策略信放到了redis的list里&a…

第03章 流程控制语句

流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。 程序设计中规定的三种流程结构,即: 顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转。 分支结构 根据条件&#xff0…

软件测试理论----测试设计方法论

1、测试用例格式 (1)用例编号:用例的唯一标识,要求具有易识别性和易维护性,能能够根据用例编号识别用例的目的和作用,一般格式为:A-B-C-D 其中 A:一般表示产品或者项目名称B&#…

Linux的启动流程

文章目录 Linux的启动流程BIOS、boot loader与kernel加载BIOSboot loader加载内核检测硬件与 initramfs 的功能 Linux的启动流程 本文章参考: [Uncertainty!!]的Linux的启动流程 Linux的启动流程是一个非常复杂的过程,下面是对Linux启动流程的详细分析&a…

JDBC-Java与数据库之间的桥梁

1、JDBC 1.1、数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用, 数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数…

IO流详解

IO流 1. 文件 1.1 什么是文件 文件对大家来说都不陌生: 文件是保存数据的地方,它可以保存文字、图片、视频等等例如大家平时使用的word文档、Excel文档、PPT文档等都是文件 1.2 文件流 文件在程序中是以流的形式来操作的流是指数据在数据源&#x…