![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
微服务
文章平均质量分 90
coolshyman
这个作者很懒,什么都没留下…
展开
-
ZooKeeper各服务器角色介绍
在事务请求提交阶段,针对Follower服务器,Leader 仅仅只需要发送一个COMMIT消息,Follower 服务器就可以完成事务请求的提交了,因为在这之前的事务请求投票阶段,Follower已经接收过PROPOSAL消息,该消息中包含了事务请求的内容,因此Follower可以从之前的Proposal缓存中再次获取到事务请求。如果是事务请求,那么Follower就会将该事务请求转发给Leader 服务器,Leader服务器在接收到这个事务请求后,就会将其提交到请求处理链,按照正常事务请求进行处理。原创 2023-08-22 09:45:00 · 328 阅读 · 0 评论 -
ZooKeeper的Leader选举实现细节
那么如此重复发送是否会导致其他问题呢?另外还有一个细节需要注意,就是在完成步骤9之后,如果统计投票发现已经有过半的服务器认可了当前的选票,这个时候,ZooKeeper并不会立即进入步骤10来更新服务器状态,而是会等待一段时间(默认是200毫秒)来确定是否有新的更优的投票。如果服务器发现自己的选举轮次已经落后于该外部投票对应服务器的选举轮次,那么就会立即更新自己的选举轮次(logicalclock),并且清空所有已经收到的投票,然后使用初始化的投票来进行PK以确定是否变更内部投票,最终再将内部投票发送出去。原创 2023-08-21 09:15:00 · 59 阅读 · 0 评论 -
ZooKeeper的Leader选举概述及算法分析
下文即仅对此算法进行介绍。由于是初始情况,因此对于Server1和Server2来说,都会将自己作为Leader服务器来进行投票,每次投票包含的最基本的元素包括:所推举的服务器的myid和ZXID,我们以(myid,ZXID)的形式来表示。因为是初始化阶段,因此无论是Server1还是Server2,都会投给自己,即Server1的投票为(1,0),Server2的投票为(2,0),然后各自将这个投票发给集群中其他所有机器。于是SID为3、4和5的机器,投票情况分别为:(3,9)、(4,8)和(5,8)。原创 2023-08-20 10:45:00 · 125 阅读 · 0 评论 -
ZooKeeper集群服务器启动
ZooKeeper的Leader选举过程,简单地讲,就是一个集群中所有的机器相互之间进行一系列投票,选举产生最合适的机器成为Leader,同时其余机器成为Follower或是Observer的集群机器角色初始化过程。当和Leader建立起连接后,Learner就会开始向Leader进行注册一所谓的注册,其实就是将Learner 服务器自己的基本信息发送给Leader 服务器,我们称之为LearnerInfo,包括当前服务器的SID和服务器处理的最新的ZXID。原创 2023-08-19 10:30:00 · 479 阅读 · 0 评论 -
ZooKeeper单机服务器启动
ZooKeeper的请求处理方式是典型的责任链模式的实现,在ZooKeeper服务器上,会有多个请求处理器依次来处理一个客户端请求。ZooKeeper服务器首先会进行服务器实例的创建,接下去的步骤则都是对该服务器实例的初始化工作,包括连接器、内存数据库和请求处理器等组件的初始化。需要注意的一点是,虽然这里ZooKeeper的NIO服务器已经对外开放端口,客户端能够访问到ZooKeeper的客户端服务端口2181,但是此时ZooKeeper服务器是无法正常处理客户端请求的。关于ZooKeeper参数配置。原创 2023-08-18 11:45:00 · 547 阅读 · 0 评论 -
ZooKeeper的应用场景(分布式锁、分布式队列)
客户端无端地接收到过多和自己并不相关的事件通知,如果在集群规模比较大的情况下,不仅会对ZooKeeper服务器造成巨大的性能影响和网络冲击,更为严重的是,如果同一时间有多个节点对应的客户端完成事务或是事务中断引起节点消失,ZooKeeper服务器就会在短时间内向其余客户端发送大量的事件通知一这就是所谓的羊群效应。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,就需要使用分布式锁了。原创 2023-08-17 16:58:56 · 600 阅读 · 1 评论 -
ZooKeeper的应用场景(集群管理、Master选举)
但是,同时还需要注意的一点是:在分布式日志收集这个场景中,收集器节点上还会存放所有已经分配给该收集器机器的日志源机器列表,如果只是简单地依靠ZooKeeper自身的临时节点机制,那么当一个收集器机器挂掉或是当这个收集器机器中断“心跳汇报”的时候,待该收集器节点的会话失效后,ZooKeeper就会立即删除该节点,于是,记录在该节点上的所有日志源机器列表也就随之被清除掉了。接下去,我们将重点来看Master选举的过程,首先来明确下Master选举的需求:在集群的所有机器中选举出一台机器作为Master。原创 2023-08-16 17:15:00 · 1408 阅读 · 0 评论 -
ZooKeeper的应用场景(命名服务、分布式协调通知)
基于ZooKeeper实现分布式协调与通知功能,通常的做法是不同的客户端都对ZooKeeper上同一个数据节点进行Watcher注册,监听数据节点的变化(包括数据节点本身及其子节点),如果数据节点发生变化,那么所有订阅的客户端都能够接收到相应的Watcher通知,并做出相应的处理。在传统的开发中,我们通常是通过主机之间是否可以相互PING通来判断,更复杂一点的话,则会通过在机器之间建立长连接,通过TCP连接固有的心跳检测机制来实现上层机器的心跳检测,这些确实都是一些非常常见的心跳检测方法。原创 2023-08-16 11:22:05 · 1391 阅读 · 0 评论 -
ZooKeeper的应用场景(数据发布订阅、负载均衡)
ZooKeeper是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅。另一方面,通过对ZooKeeper中丰富的数据节点类型进行交叉使用,配合Watcher事件通知机制,可以非常方便地构建一系列分布式应用中都会涉及的核心功能,如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等。ZooKeeper是一个高可用的分布式数据管理与协调框架。原创 2023-08-15 12:04:01 · 750 阅读 · 0 评论 -
ZooKeeper的基本概念
一旦节点被标记上这个属性,那么在这个节点被创建的时候,ZooKeeper会自动在其节点名后面追加上一个整型数字,这个整型数字是一个由父节点维护的自增数字。在前面我们已经提到,ZooKeeper 的每个ZNode上都会存储数据,对应于每个ZNode,ZooKeeper都会为其维护一个叫作Stat的数据结构,Stat中记录了这个ZNode的三个数据版本,分别是version(当前ZNode的版本)、cversion (当前ZNode子节点的版本)和aversion(当前ZNode的ACL版本)。原创 2023-08-14 22:30:00 · 1517 阅读 · 0 评论 -
ZooKeeper介绍
这里所说的树型结构的名字空间,是指ZooKeeper服务器内存中的一个数据模型,其由一系列被称为ZNode的数据节点组成,总的来说,其数据模型类似于一个文件系统,而ZNode之间的层级关系,就像文件系统的目录结构一样。所有事务请求的处理结果在整个集群中所有机器.上的应用情况是一致的,也就是说,要么整个集群所有机器都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模型都是一致的。原创 2023-08-14 17:15:08 · 823 阅读 · 0 评论