zookeeper是一个开源的分布式协调服务,其独特的"leader-follower"集群模式,"过半成功"的写策略,很好的解决了分布式单点问题.zookeeper包含leader,follower,znode三个重要实体.
leader:
zookeeper集群中所有机器通过一个选择过程来选定一台被称为"leader"的机器,leader提供读,写,选举操作
follower
zookeeper集群中除leader外的其他机器,follower提供读,选举操作
znode:
zookeeper维护着一个树形层次结构,树中的节点被称为znode,znode可以用于存储数据,并且有一个与之相关联的ACL.zookeeper被设计用来实现协调服务(通常使用小数据文件),而不是用于大容量的数据存储,一般一个znode能存储的数据被限制在1MB以内
znode的数据访问具有原子性.客户端在读取一个znode的数据时,要么读到所有的数据,要么读操作失败,不会只读到部分数据.同样,写操作将替换znode存储的所有数据,zookeeper保证写操作不成功就失败,不会出现部分写之类的情况
znode有两种类型:短暂的和持久的.znode的类型在创建时确定并且之后不能再修改.在创建短暂znode的客户端回话结束时,zookeeper会将该短暂znode删除.相比之下,持久znode不依赖于客户端会话,只有当客户端明确要删除该持久znode时才会被删除.短暂znode不可以有子节点,即便是短暂子节点.虽然每个短暂的znode都绑定到一个客户端会话,但它们对所有的客户端还是可见的
znode以某种方式发生变化时,"观察"机制可以让客户端得到通知.可以针对zookeeper服务的操作来设置观察,该服务的其他操作可以触发观察.观察只被触发一次,为了多次受到通知,客户端需要重新注册观察
当一个写请求到达zookeeper集群时都会被转发给领导者,再由领导者将更新广播给跟随者,当半数以上的跟随者已经将修改持久化后,领导者才会提交这个更新,然后客户端才会收到一个更新成功的响应,这个用来达成共识的协议被设计成具有原子性,类似于数据库的两阶段提交协议.
如果领导者发生故障,其余的机器会选出另外一个领导者,并和新的追随者一起继续提供服务.领导者选择过程是非常快的,一般只需要200毫秒,因此领导者选举过程中不会出现性能的明显降低.
在更新内存中的znode树之前,集体中的所有机器都会将更新写入磁盘,任何一台机器都可以为读提供服务,由于读只涉及内存操作,因此非常快
每个zookeeper客户端启动时都会尝试连接到列表中的一台服务器,如果连接失败,它会尝试连接到另一台服务器,以此类推,直到成功连接到一台服务器或者因为所有zookeeper服务器都不可用而失败
一旦客户端与一台服务器建立连接,这台服务器就会为该客户端创建一个新的会话.每个会话都有一个超时设置,如果在超时时间段内没有收到任何请求,则相应的会话就会过期,该连接也无法重新打开,与会话相关联的短暂znode都会丢失.一般一个会话空闲超过一定时间,都可以通过客户端发送心跳请求保存会话不过期,这个时间的设置应该足够低,一般能检测出服务器故障,并且能够在会话超时时间内连接到另外一台机器.
zookeeper客户端可以自动地进行故障切换,切换至另一台zookeeper服务器.关键一点是在另一台服务器接替故障服务器之后,所有的会话(和相关的短暂znode)仍然是有效的.当客户端断开连接时,观察通知无法发送.但是当客户端恢复连接后,这些通知会被发送.当然当客户端重新连接到另一台服务器的过程中,如果应用程序试图执行一个操作,这个操作将会失败.
分享到:
相关推荐
此外,项目中的"content_code"可能包含了具体的源代码,这些源代码通常会包含以下几个部分: 1. 服务提供者:这部分代码定义了服务接口和其实现,通过Dubbo的注解或配置暴露为远程服务。 2. 服务消费者:调用服务...
这个案例涵盖了现代Java企业级开发中的几个核心组件,旨在帮助开发者理解如何将这些技术有效地结合在一起,创建一个分布式微服务架构。 首先,SpringBoot是Spring框架的一个轻量级衍生品,它简化了初始化和配置过程...
Fonduer 基于以下几个关键组件和概念: 1. **预处理(Preprocessing)**:Fonduer 提供了一套完整的预处理工具,包括文本解析、页面分割、表格识别等,将原始文档转换成结构化的语料库,便于进一步分析。这一步通常...
本资源包含一本名为“JAVA分布式程序设计”的电子书以及相关的源码示例,旨在帮助开发者深入理解和实践Java在分布式环境中的应用。 《JAVA分布式程序设计》这本书可能涵盖了以下几个核心知识点: 1. **分布式系统...
标签 "zookeeper 分布式 云原生 cloud native Python库" 指出 `ngsildclient` 可能与几个关键的技术领域有关。`Zookeeper` 是一个分布式协调服务,常用于管理分布式系统中的配置信息、命名服务和集群成员关系等。`...
项目中的几个模块分别代表: - **ivan-entity**:存放实体类,定义了与数据库表对应的Java对象,用于封装业务数据。 - **ivan-core**:核心模块,通常包含一些通用的服务、工具类以及配置文件,是其他模块依赖的...
整合`ZK`、`Spring`和`Hibernate`通常涉及到以下几个步骤: 1. **配置ZooKeeper**:在Spring应用中引入ZooKeeper的客户端库,配置ZK连接参数,包括地址、端口等,以便应用能够连接到ZooKeeper集群。 2. **集成...
安装过程通常包括以下几个步骤: - 解压下载的源码包。 - 配置开发环境,包括JDK(Java Development Kit)和Maven或Gradle(构建工具)。 - 构建项目,生成可运行的jar包或WAR包。 - 配置应用的`application....
在本示例中,我们可以看到以下几个关键组成部分: 1. **pom.xml**:这是Maven项目对象模型(Project Object Model)文件,包含了项目的依赖管理、构建配置等信息。在Dubbo项目中,通常会引入Dubbo相关的jar包,如...
将SpringBoot、Dubbo和MyBatis-Plus集成的过程主要分为以下几个步骤: 1. **创建SpringBoot项目**:首先,我们需要创建一个基于SpringBoot的新项目,引入Spring Boot的起步依赖,如web、spring-cloud-starter-dubbo...
首先,Storm的结构体系中几个核心概念是必须要了解的: 1. **Topology(拓扑)**:Topology是Storm中数据处理流程的抽象,它是一个有向无环图,其中节点是Spout和Bolt,边表示数据流向。Topology是Storm中最高层级...
5. **数据库相关**:包括MySQL的实体类、DAO层、Service层以及Mapper XML文件,用于与数据库交互,实现数据的增删查改。 6. **Web层**:Controller层的代码,处理HTTP请求,调用Service层的方法,并返回相应的视图...
这种ID具有高度的稳定性和可扩展性,确保在复杂的分布式环境中能够高效、准确地为每个实体分配唯一的身份标识。本项目提供的“企业级ID 完整代码”旨在帮助开发者实现这一目标,兼容各种数据库系统,提高系统的集成...
在"Dubbo-service"实现中,你需要完成以下几个关键步骤: 1. **环境准备**:确保你的开发环境中安装了Java开发工具JDK,并设置好环境变量。同时,还需要一个支持Maven或Gradle的构建工具来管理依赖。 2. **创建...
这篇博客文章未给出具体描述,但通常Dubbo入门会涉及以下几个关键点: 1. **服务提供者(Provider)**:服务提供者是提供服务的实体,它通过在服务注册中心注册自己的服务,使服务消费者能够找到并调用。 2. **...
4. **定义实体类**:为了方便操作,我们可以创建一个实体类,该类的属性对应HBase表中的列。例如,如果我们有一个名为“User”的表,包含id和name两列,可以这样定义: ```java public class User { private byte...
#### 25、说几个zookeeper常用的命令。 - `get`: 获取节点数据。 - `ls`: 列出子节点。 - `create`: 创建节点。 - `delete`: 删除节点。 - `set`: 设置节点数据。 #### 26、ZAB和Paxos算法的联系与区别? - **...
首先,`dubbo的jar包`通常包含以下几个主要部分: 1. **dubbo-api**: 这个模块包含了Dubbo的核心API,如Service、Reference、Provider、Consumer等接口,以及相关的配置注解,是开发者与Dubbo交互的基础。 2. **...
这样的平台通常需要具备以下几个关键特性:全面的数据覆盖、快速的响应时间、智能的检索算法以及个性化的结果排序。 在Java技术框架下,构建这样的平台主要涉及以下几个技术模块: 1. **数据采集与预处理**:数据...