Session是Zookeeper的一个重要的抽象。有序的保证,ephemeral znode,watch都与session紧紧关联。
session的跟踪机制也是很重要的一块。
ZooKeeper server的一个重要任务就是跟踪并维护这些session。运行于standalone模式下的单独的server会维护所有的session,而在quorum模式下由leader来维护。leader和standalone模式的server实际上跑着相同的session tracker(可以参考SessionTracker类和SessionTrackerImpl类)。follower仅仅是简单的把client提交的session信息转发到leader(参考LearnerSessionTracker类)。
为了保活(keep alive)session,server需要接收到session的心跳。心跳的形式可以是一个新的请求或者显式的ping消息(参考LearnerHandler.run())。两种情况下,server通过更新session的超时时间来touch session(参考SessionTrackerImpl.touchSession())。在quorum模式下,leader发送一个ping消息给它的learner,learner返回自从last PING之后的一个session列表。leader每隔半个tick就会发送一个ping给learner。所以,如果一个tick被设置成2秒,那么leader每隔一秒就会发送一个ping。
对于session的过期有2个重要的要点。一个称为expiry queue的数据结构(参考ExpiryQueue类)用来维护session的过期。这个数据结构使用bucket来维护session,每一个bucket对应一个时间范围,这个范围内的session会过期,leader每次会让一个bucket的session过期。为了决定哪一个bucket的session过期,如果有的话。当下一个deadline到来时,一个线程会检查这个expiry queue来找出要过期的bucket。这个线程在deadline到来之前处于sleep状态,当它被唤醒时,它会取出expiry queue的一批session,让它们过期。当然取出的这批数据可能是空的。
为了维护这些bucket,leader把时间分成一些片段,以expirationInterval为单位进行分割,并把每个session分配到它的过期时间对应的bucket里。更具体的说,是对下面的表达式进行计算,当session的过期时间更新时,根据结果来决定它属于哪一个bucket。
(expirationTime / expirationInterval + 1) * expirationInterval
举个例子来说明,比如expirationInterval为2,session的超时时间为10。那么这个session分配到bucket 12中((10/2+1)*2)。注意当我们touch这个session时这个超时时间会增加,所以我们要把这个session移动到其他的bucket中来推迟过期。
使用bucket的模式来管理的一个主要原因是为了减少让session过期这项工作的系统开销。一个生产环境中的ZooKeeper机器可能会有数千个client,对应着数千个session。在这种场景下要细粒度的检查session过期是不合适的。如果expirationInterval短的话,那么检查session过期的粒度会不错。目前是一个tick,相当于1秒钟。
相关推荐
Zookeeper 搭建和原理学习 Zookeeper 是一个分布式的,开放源码的分布式应用程序协调服务,是 Google 的 Chubby 一个开源的实现。它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理...
【Zookeeper学习笔记】 Zookeeper是一个分布式协调服务,它的核心目标是简化分布式环境下的数据管理与系统协调。作为Apache Hadoop和HBase的重要组件,Zookeeper提供了简单的原语集,支持分布式应用程序之间的通信...
"搜索引擎等一条龙学习资料"可能涵盖了Zookeeper在搜索引擎中的具体应用,如在Elasticsearch中的角色,以及如何使用Zookeeper进行集群管理和数据同步。 视频讲解是学习过程中不可或缺的一部分,它可以通过直观的...
《ZooKeeper学习之运维工具zkweb》 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终将简单易用的接口和...
Curator客户端是Apache Curator框架的一部分,该框架为开发人员提供了一系列高级API和工具,用于处理常见的ZooKeeper用例,降低了使用ZooKeeper的复杂性。以下是对Curator客户端及其主要特性的详细阐述: 1. **连接...
总的来说,这些学习资料提供了从基础到实践的全面理解Zookeeper的途径,对于学习者来说,可以先从文档中了解Zookeeper的基本概念和原理,然后通过阅读网页文章深入理解其在实际项目中的应用,最后结合附件中的示例...
3天精通zookeeper视频详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程内容: zookeeper简介 zookeeper数据模型 zookeeper单机安装 zookeeper常用shell命令 zookeeper的Acl权限控制 zookeeper...
总的来说,Zookeeper通过其独特的数据模型、原子操作、节点类型、顺序节点和Watch机制,为分布式环境提供了高效、可靠的协调服务,广泛应用于分布式应用的各个层面,确保了系统的稳定性和一致性。
Zookeeper是Apache Hadoop项目下的一个子项目,它是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。...通过深入学习和实践,可以更好地应对分布式环境中的各种挑战。
《Zookeeper学习资料 中篇》 Zookeeper,作为Apache Hadoop的一个子项目,是一个分布式的,开放源码的分布式应用程序...通过深入学习和实践,开发者可以更好地掌握Zookeeper,从而提升分布式应用的开发效率和质量。
在单机上模拟集群环境,即伪集群模式,主要是为了测试和学习目的。以下是配置步骤: 1. **复制**:将 Zookeeper 目录复制多份,例如复制成 `zookeeper0`, `zookeeper1`, `zookeeper2`。 2. **配置**:分别对每个...
通过这些知识点的学习,我们不仅了解了如何在 Linux 环境下安装配置 zookeeper,并且还掌握了基本的操作命令和数据模型的基础知识。这对于深入理解 zookeeper 的工作原理及应用场景非常有帮助。
在"Zookeeper 学习资料 上篇"中,我们可以预见到将要涉及的ZooKeeper核心概念和基础知识点。首先,我们需要理解ZooKeeper的数据模型,这个模型基于一个层次化的命名空间,类似于文件系统。每个节点称为znode,znode...
zookeeper学习知识点, 脑图
ZooKeeper 的开发使用技巧和常用命令 ZooKeeper 是一个开源的分布式协调服务,广泛应用于大型分布式系统中。下面是 ZooKeeper 的开发使用技巧和常用命令,适合初学者和服务器开发人员。 一、ZooKeeper 的安装和...
《Zookeeper学习视频》压缩包包含了深入理解与掌握Apache ZooKeeper这一分布式协调服务的重要资源。Zookeeper是一个开源的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈...
《Dubbo与Zookeeper在分布式环境中的应用解析》 Dubbo和Zookeeper是两个在分布式系统中广泛应用的技术,它们在...通过实践案例和详细文档,我们可以更深入地学习这两项技术,为构建复杂的分布式系统打下坚实的基础。
在标题“zookeeper-3.4.6_zookeeper_”中,我们可以看到这是关于Zookeeper的一个特定版本——3.4.6的讨论。这个版本的发布对于理解和使用Zookeeper至关重要,因为它包含了该框架的稳定性和功能增强。 在描述“注册...
这个"zookeeper.rar"压缩包包含的学习资料可以帮助我们深入了解和掌握ZooKeeper的核心概念、功能以及实际操作技巧。 首先,ZooKeeper的基本概念是学习的起点。它是一个基于发布/订阅模型的分布式协调服务,可以理解...