设计网站实现PDF在线阅读需要怎么做,dedecms网站地图怎么做,怎样做农产品交易平台网站,网页培训1. 面试官#xff1a;工作中使用过Zookeeper嘛#xff1f;你知道它是什么#xff0c;有什么用途呢#xff1f;
小菜鸡的我#xff1a;
有使用过的#xff0c;使用ZooKeeper作为dubbo的注册中心#xff0c;使用ZooKeeper实现分布式锁。ZooKeeper#xff0c;它是一个开…1. 面试官工作中使用过Zookeeper嘛你知道它是什么有什么用途呢
小菜鸡的我
有使用过的使用ZooKeeper作为dubbo的注册中心使用ZooKeeper实现分布式锁。ZooKeeper它是一个开放源码的分布式协调服务它是一个集群的管理者它将简单易用的接口提供给用户。可以基于Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。Zookeeper的用途命名服务、配置管理、集群管理、分布式锁、队列管理
用途跟功能不是一个意思咩
2. 面试官说下什么是命名服务什么是配置管理又什么是集群管理吧
小菜鸡的我(幸好我刷过面试题)无所畏惧 命名服务就是 命名服务是指通过指定的名字来获取资源或者服务地址。Zookeeper可以创建一个全局唯一的路径这个路径就可以作为一个名字。被命名的实体可以是集群中的机器服务的地址或者是远程的对象等。一些分布式服务框架RPC、RMI中的服务地址列表通过使用命名服务客户端应用能够根据特定的名字来获取资源的实体、服务地址和提供者信息等。 配置管理 实际项目开发中我们经常使用.properties或者xml需要配置很多信息如数据库连接信息、fps地址端口等等。因为你的程序一般是分布式部署在不同的机器上如果你是单机应用当我没说如果把程序的这些配置信息保存在zk的znode节点下当你要修改配置即znode会发生变化时可以通过改变zk中某个目录节点的内容利用watcher通知给各个客户端从而更改配置。 集群管理 集群管理包括集群监控和集群控制其实就是监控集群机器状态剔除机器和加入机器。zookeeper可以方便集群机器的管理它可以实时监控znode节点的变化一旦发现有机器挂了该机器就会与zk断开连接对用的临时目录节点会被删除其他所有机器都收到通知。新机器加入也是类似酱紫所有机器收到通知有新兄弟目录加入啦。
3. 面试官你提到了znode节点那你知道znode有几种类型呢zookeeper的数据模型是怎样的呢
小菜鸡的我我先想想
zookeeper的数据模型
ZooKeeper的视图数据结构很像Unix文件系统也是树状的这样可以确定每个路径都是唯一的。zookeeper的节点统一叫做znode它是可以通过路径来标识结构图如下 znode的4种类型
根据节点的生命周期znode可以分为4种类型分别是持久节点PERSISTENT、持久顺序节点PERSISTENT_SEQUENTIAL、临时节点EPHEMERAL、临时顺序节点EPHEMERAL_SEQUENTIAL 持久节点PERSISTENT 这类节点被创建后就会一直存在于Zk服务器上。直到手动删除。 持久顺序节点PERSISTENT_SEQUENTIAL 它的基本特性同持久节点不同在于增加了顺序性。父节点会维护一个自增整性数字用于子节点的创建的先后顺序。 临时节点EPHEMERAL 临时节点的生命周期与客户端的会话绑定一旦客户端会话失效非TCP连接断开那么这个节点就会被自动清理掉。zk规定临时节点只能作为叶子节点。 临时顺序节点EPHEMERAL_SEQUENTIAL 基本特性同临时节点添加了顺序的特性。
4、面试官你知道znode节点里面存储的是什么吗每个节点的数据最大不能超过多少呢
小菜鸡的我 znode节点里面存储的是什么
Znode数据节点的代码如下
public class DataNode implements Record {byte data[]; Long acl; public StatPersisted stat; private SetString children null;
}
哈哈Znode包含了存储数据、访问权限、子节点引用、节点状态信息如图 data: znode存储的业务数据信息ACL: 记录客户端对znode节点的访问权限如IP等。child: 当前节点的子节点引用stat: 包含Znode节点的状态信息比如事务id、版本号、时间戳等等。
每个节点的数据最大不能超过多少呢
为了保证高吞吐和低延迟以及数据的一致性znode只适合存储非常小的数据不能超过1M最好都小于1K。
5、面试官你知道znode节点上的监听机制嘛讲下Zookeeper watch机制吧。
小菜鸡的我 Watcher机制监听机制的工作原理Watcher特性总结
Watcher监听机制
Zookeeper 允许客户端向服务端的某个Znode注册一个Watcher监听当服务端的一些指定事件触发了这个Watcher服务端会向指定客户端发送一个事件通知来实现分布式的通知功能然后客户端根据 Watcher通知状态和事件类型做出业务上的改变。 可以把Watcher理解成客户端注册在某个Znode上的触发器当这个Znode节点发生变化时增删改查就会触发Znode对应的注册事件注册的客户端就会收到异步通知然后做出业务的改变。 Watcher监听机制的工作原理 ZooKeeper的Watcher机制主要包括客户端线程、客户端 WatcherManager、Zookeeper服务器三部分。客户端向ZooKeeper服务器注册Watcher的同时会将Watcher对象存储在客户端的WatchManager中。当zookeeper服务器触发watcher事件后会向客户端发送通知 客户端线程从 WatcherManager 中取出对应的 Watcher 对象来执行回调逻辑。
Watcher特性总结
**一次性**一个Watch事件是一个一次性的触发器。一次性触发客户端只会收到一次这样的信息。异步的: Zookeeper服务器发送watcher的通知事件到客户端是异步的不能期望能够监控到节点每次的变化Zookeeper只能保证最终的一致性而无法保证强一致性。轻量级 Watcher 通知非常简单它只是通知发生了事件而不会传递事件对象内容。客户端串行 执行客户端 Watcher 回调的过程是一个串行同步的过程。注册 watcher用getData、exists、getChildren方法触发 watcher用create、delete、setData方法
6、面试官你对Zookeeper的数据结构都有一定了解那你讲下Zookeeper的特性吧
小菜鸡的我我背过书啊哈哈
Zookeeper 保证了如下分布式一致性特性
顺序一致性从同一客户端发起的事务请求最终将会严格地按照顺序被应用到 ZooKeeper 中去。原子性所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的也就是说要么整个集群中所有的机器都成功应用了某一个事务要么都没有应用。单一视图无论客户端连到哪一个 ZooKeeper 服务器上其看到的服务端数据模型都是一致的。可靠性 一旦服务端成功地应用了一个事务并完成对客户端的响应那么该事务所引起的服务端状态变更将会被一直保留下来。实时性最终一致性 Zookeeper 仅仅能保证在一定的时间段内客户端最终一定能够从服务端上读取到最新的数据状态。
7、面试官你刚提到顺序一致性那zookeeper是如何保证事务的顺序一致性的呢
小菜鸡的我完蛋了这题不会 需要了解事务ID即zxid。ZooKeeper的在选举时通过比较各结点的zxid和机器ID选出新的主结点的。zxid由Leader节点生成有新写入事件时Leader生成新zxid并随提案一起广播每个结点本地都保存了当前最近一次事务的zxidzxid是递增的所以谁的zxid越大就表示谁的数据是最新的。 ZXID的生成规则如下 ZXID有两部分组成
任期完成本次选举后直到下次选举前由同一Leader负责协调写入事务计数器单调递增每生效一次写入计数器加一。 ZXID的低32位是计数器所以同一任期内ZXID是连续的每个结点又都保存着自身最新生效的ZXID通过对比新提案的ZXID与自身最新ZXID是否相差“1”来保证事务严格按照顺序生效的。 8、面试官你提到了Leader你知道Zookeeper的服务器有几种角色嘛Zookeeper下Server工作状态又有几种呢
小菜鸡的我 Zookeeper 服务器角色
Zookeeper集群中有Leader、Follower和Observer三种角色
Leader Leader服务器是整个ZooKeeper集群工作机制中的核心其主要工作 事务请求的唯一调度和处理者保证集群事务处理的顺序性集群内部各服务的调度者 Follower Follower服务器是ZooKeeper集群状态的跟随者其主要工作 处理客户端非事务请求转发事务请求给Leader服务器参与事务请求Proposal的投票参与Leader选举投票 Observer Observer是3.3.0 版本开始引入的一个服务器角色它充当一个观察者角色——观察ZooKeeper集群的最新状态变化并将这些状态变更同步过来。其工作 处理客户端的非事务请求转发事务请求给 Leader 服务器不参与任何形式的投票 Zookeeper下Server工作状态 服务器具有四种状态分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。 1.LOOKING寻找Leader状态。当服务器处于该状态时它会认为当前集群中没有 Leader因此需要进入 Leader 选举状态。2.FOLLOWING跟随者状态。表明当前服务器角色是Follower。3.LEADING领导者状态。表明当前服务器角色是Leader。4.OBSERVING观察者状态。表明当前服务器角色是Observer。 9、面试官你说到服务器角色是基于ZooKeeper集群的那你画一下ZooKeeper集群部署图吧ZooKeeper是如何保证主从节点数据一致性的呢
小菜鸡的我 ZooKeeper集群部署图 ZooKeeper集群是一主多从的结构
如果是写入数据先写入主服务器主节点再通知从服务器。如果是读取数据既读主服务器的也可以读从服务器的。
ZooKeeper如何保证主从节点数据一致性
我们知道集群是主从部署结构要保证主从节点一致性问题无非就是两个主要问题
主服务器挂了或者重启了主从服务器之间同步数据~
Zookeeper是采用ZAB协议Zookeeper Atomic BroadcastZookeeper原子广播协议来保证主从节点数据一致性的ZAB协议支持崩溃恢复和消息广播两种模式很好解决了这两个问题
崩溃恢复Leader挂了进入该模式选一个新的leader出来消息广播 把更新的数据从Leader同步到所有Follower Leader服务器挂了所有集群中的服务器进入LOOKING状态首先它们会选举产生新的Leader服务器接着新的Leader服务器与集群中Follower服务进行数据同步当集群中超过半数机器与该 Leader服务器完成数据同步之后退出恢复模式进入消息广播模式。Leader 服务器开始接收客户端的事务请求生成事务Proposal进行事务请求处理。 最后分享一波我的面试宝典——一线互联网大厂Java核心面试题库
以下是我个人的一些做法希望可以给各位提供一些帮助 点击《一线互联网大厂Java核心面试题库》即可免费领取整理了很长一段时间拿来复习面试刷题非常合适其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等且还会持续的更新…可star一下 283页的Java进阶核心pdf文档 Java部分Java基础集合并发多线程JVM设计模式 数据结构算法Java算法数据结构 开源框架部分SpringMyBatisMVCnettytomcat 分布式部分架构设计Redis缓存ZookeeperkafkaRabbitMQ负载均衡等 微服务部分SpringBootSpringCloudDubboDocker 还有源码相关的阅读学习 结构 开源框架部分SpringMyBatisMVCnettytomcat 分布式部分架构设计Redis缓存ZookeeperkafkaRabbitMQ负载均衡等 微服务部分SpringBootSpringCloudDubboDocker [外链图片转存中…(img-C1ySorYT-1626761678535)]
还有源码相关的阅读学习
[外链图片转存中…(img-akaQOTRq-1626761678535)]