ZooKeeper 的架构是怎样的?

news2024/11/20 20:41:39

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


正文

在这里插入图片描述

ZooKeeper 的架构图主要包含以下几个部分:

  1. ZooKeeper Client:是 ZooKeeper 的客户端,可以连接到任意一个 ZooKeeper Server 上(除非 leaderServes 参数被显式设置,leader 不允许接受客户端连接)。客户端使用并维护一个 TCP 连接,通过这个连接发送请求、接收响应、获取观察的事件以及发送心跳。如果这个 TCP 连接中断,客户端将自动尝试连接到另外的 ZooKeeper Server。
  2. ZooKeeper Server:是 ZooKeeper 的服务端,可以组成一个集群来提供高可用的分布式协调服务。

ZooKeeper Server 有三种角色:Leader、Follower 和 Observer

  • Leader:是整个 ZooKeeper 集群工作机制中的核心。Leader 作为整个 ZooKeeper 集群的主节点,负责响应所有对 ZooKeeper 状态变更的请求。主要工作有:事务请求的唯一调度和处理,保障集群处理事务的顺序性。集群内各服务器的调度者。Leader 选举是 ZooKeeper 最重要的技术之一,也是保障分布式数据一致性的关键所在。

  • Follower:是 ZooKeeper 集群状态的跟随者。他的逻辑就比较简单。除了响应本服务器上的读请求外,follower 还要处理 leader 的提议,并在 leader 提交该提议时在本地也进行提交。另外需要注意的是,leader 和 follower 构成 ZooKeeper 集群的法定人数,也就是说,只有他们才参与新 leader 的选举、响应 leader 的提议。

  • Observer:服务器充当一个观察者的角色。如果 ZooKeeper 集群的读取负载很高,或者客户端多到跨机房,可以设置一些 observer 服务器,以提高读取的吞吐量。

    Observer 和 Follower 比较相似,只有一些小区别:首先 observer 不属于法定人数,即不参加选举也不响应提议,也不参与写操作的“过半写成功”策略;其次是 observer 不需要将事务持久化到磁盘,一旦 observer 被重启,需要从 leader 重新同步整个名字空间。

ZooKeeper 集群中节点(Leader+Follower)个数通常是奇数,方便投票选举。ZooKeeper 中的选举机制请参考我的这篇博客——《一篇文章搞懂 ZooKeeper 的选举机制》


通信

Leader 和 Follower 之间的通信

在这里插入图片描述

  1. Leader 发送提议(proposal)给 Follower,提议包含了要执行的事务请求和事务编号。
  2. Follower 收到提议后,如果同意,就发送回复(acknowledgement)给 Leader。
  3. Leader 收到过半 Follower 的回复后,就发送提交(commit)给所有 Follower,表示该提议可以执行了。
  4. Follower 收到提交后,就在本地执行该提议,并向客户端返回结果。
  5. Leader 和 Follower 还会定期发送心跳(ping)给对方,以维持连接和检测故障。

Leader 和 Observer 之间的通信

在这里插入图片描述

  1. Leader 发送提议和提交给 Observer,Observer 只需要等待提交就可以执行事务,不需要发送回复给 Leader。
  2. Observer 收到提交后,就在本地执行该提议,并向客户端返回结果。
  3. Leader 和 Observer 还会定期发送心跳给对方,以维持连接和检测故障。

Follower 和 Observer 之间的通信

在这里插入图片描述

  1. Follower 可以将自己收到的提议转发给 Observer,以减轻 Leader 的负担。
  2. Observer 收到提议后,仍然需要等待 Leader 的提交才能执行事务。

Follower 和 Follower 之间有通信吗?

  • Follower 和 Follower 之间没有通信,他们只和 Leader 通信。
  • 这是为了简化 ZooKeeper 的协议和实现,避免复杂的多对多通信。
  • Follower 和 Follower 之间的数据一致性是通过 Leader 的提议和提交来保证的。

Observer 和 Observer 之间有通信吗?

  • Observer 和 Observer 之间没有通信,他们只和 Leader 或 Follower 通信。
  • 这是为了简化 ZooKeeper 的协议和实现,避免复杂的多对多通信。
  • Observer 和 Observer 之间的数据一致性是通过 Leader 或 Follower 的提议和提交来保证的。

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

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

相关文章

chatgpt赋能python:Python中如何取出字符串中的字符

Python中如何取出字符串中的字符 在Python编程中,经常会涉及到需要对字符串中的字符进行操作,比如提取某些特定的字符等。那么,Python中如何取出字符串中的字符呢?本文将为您进行详细介绍。 1. 使用索引 在Python中&#xff0c…

Rust每日一练(Leetday0027) 单词搜索、删除重复项II、搜索旋转排序数组II

目录 79. 单词搜索 Word Search 🌟🌟 80. 删除有序数组中的重复项 II Remove-duplicates-from-sorted-array-II 🌟🌟 81. 搜索旋转排序数组 II Search-in-rotated-sorted-array-II 🌟🌟 &#x1f31…

Shell编程循环语句(for、while、until)

目录 一、for 循环 1.用法和特点 2.执行指定次数 3.遍历和迭代 (1)遍历 (2)迭代 4.操作实例 二、 while 循环 1.用法和特点 2.操作实例 三、until 循环 1.用法和特点 2.操作实例 一、for 循环 1.用法和特点 读取不…

chatgpt赋能python:Python如何去除列表中重复的元素?

Python如何去除列表中重复的元素? 在Python编程中,经常会遇到需要操作列表的情况。而有时候列表中会出现重复的元素,这会给后续的数据处理带来麻烦。那么如何去除列表中重复的元素呢?下面将为大家介绍几种方法。 1. 使用set()函…

Golang每日一练(leetDay0093) 丢失的数字、整数转换英文表示

目录 268. 丢失的数字 Missing Number 🌟 273. 整数转换英文表示 Integer To English Words 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日一练 专栏 C/C每日…

北邮国院物联网Software Engineering软件工程笔记

主要依照课上ppt的面向考试学习。 pdf文件获取:添加文章末尾微信公众号:灰海宽松,后台回复“软件工程”获取文件。 文章目录 Introductionsoftware typesgood software featureswhat is software engineering?4 layersWhy important?Genera…

Django、数据库----------ORM框架

目录 1.安装第三方模块 2.ORM 1.自己创建数据库 2.django连接数据库 3.django操作表 创建表:在models.py文件中 删除表以及修改表 在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据 Django开发操作数…

vector 迭代器失效问题

vector 迭代器失效 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所指向…

总结896

学习目标: 月目标:6月(线性代数强化9讲,背诵15篇短文,考研核心词过三遍) 周目标:线性代数强化3讲,英语背3篇文章并回诵,检测 每日必复习(5分钟)…

读改变未来的九大算法笔记09_指尖的精灵

1. 人类很有可能“在未来像过去所做过的一样行事” 2. 计算机科学领域并不仅仅是编程 2.1. 编程知识是计算机科学家所必需的,但它却只是前提 2.2. 要应用并试验算法,计算机科学研究者就需要将算法转换成计算机程序,而每个程序都由Java、C或…

AMC12和高考数学哪个更难?知识点有哪些不同?

AMC12和高考数学哪个更难?知识点有哪些不同?今天小编给大家来详细介绍一下! 难度对比 从难度上看,高考数学的计算量更大,并且知识点比AMC10/12超前,需要用到极限和微积分的知识。 反观AMC10/12不需要用到…

LinkedHashMap源码

介绍 LinkedHashMap是HashMap的子类 Key和Value都允许空有序key可重复可覆盖&#xff0c;value可重复非线程安全可用于实现LRU public class LinkedHashMap<K,V>extends HashMap<K,V>implements Map<K,V>LinkedHashMap的原理图&#xff1a; LinkedHashMa…

【Jetpack】Room 中的销毁重建策略 ( 创建临时数据库表 | 拷贝数据库表数据 | 删除旧表 | 临时数据库表重命名 )

文章目录 一、销毁 和 重建策略二、销毁 和 重建策略 核心要点1、创建 Migration 迁移类 - 重点2、配置 Migration 迁移类3、修改数据库版本号4、修改实体类数据类型 三、完整代码示例1、数据库版本 3 代码示例RoomDatabase 数据库类完整代码Student 实体类完整代码执行结果 2、…

chatgpt赋能python:Python编程爱好者必备:如何参加线上比赛

Python编程爱好者必备&#xff1a;如何参加线上比赛 作为一名拥有10年Python编程经验的工程师&#xff0c;我非常喜欢参加线上编程比赛。在这些比赛中&#xff0c;我可以与全球的编程爱好者一起竞技&#xff0c;展现自己编程的优势和挑战自己的能力。在这篇SEO文章中&#xff…

数论与组合数学 期末总结(完结)

数论与组合数学 自然数的基本性质整除最大公约数&#xff08;GCD&#xff09;辗转相除法欧几里得算法 互质 Coprime素数算数基本定理 同余欧拉定理欧拉函数费马小定理威尔逊定理 逆元求逆&#xff1a;欧几里得扩展算法 线性同余方程组 ( a x b m o d m ) (axb\ mod\ m) (axb m…

2023数维杯A题水体污染对流弥散吸附完整论文及所有数值计算模拟代码

大家好呀&#xff0c;从昨天发布赛题一直到现在&#xff0c;总算完成了数维杯A题完整的成品论文。 A题论文37页&#xff0c;一些修改说明提醒7页&#xff0c;正文22页&#xff0c;附录8页 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴…

chatgpt赋能python:Python如何快速取出所有元素?

Python如何快速取出所有元素&#xff1f; 随着Python编程的流行&#xff0c;我们常常需要处理列表、元组和字典等数据结构。在这些数据结构中&#xff0c;最常见的操作是获取所有元素。本文将介绍如何使用Python来快速取出所有元素。 获取列表中所有元素 在Python中&#xf…

简易操作系统:使用Python 做的图形界面 C 做的内核

目录 实验要求 一、文件管理和用户接口 ⑴文件的逻辑结构 ⑵磁盘模拟 ⑶目录结构 ⑷磁盘分配 ⑸磁盘空闲存储空间管理 ⑹用户接口 ⑺屏幕显示 代码部分 python调用c的方法&#xff1a; ​编辑 c语言部分&#xff0c;文件名 Operating_System_C.c python语言部分 运…

2023认证杯数学建模第二阶段C题完整原创论文讲解

大家好呀&#xff0c;从昨天发布赛题一直到现在&#xff0c;总算完成了认证杯二阶段C题完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C第二阶段完整论文共64页&#xff0c;一…

越跌越买!192亿大举抄底

虽然本周主流大盘指数表现乏力&#xff0c;但股票ETF市场再现资金逢低“扫货”。 截至6月9日收盘&#xff0c;全市场736只股票ETF&#xff08;统计股票ETF和跨境ETF&#xff09;总份额增长196亿份&#xff0c;净流入资金约192亿元&#xff0c;再现“越跌越买”的趋势。 其中&…