中间件 -zookeeper

news2024/11/27 19:42:50

三连支持 一起鼓励 一起进步

zookeeper

文章目录

  • 一、概述
    • 1.Leader 角色
    • 2.Follower 角色
    • 3.数据同步
    • 4. 2PC提交
    • 5. Observer 角色
    • 6. leader 选举
    • 7. 集群组成
    • 6. 惊群效应
  • 二、Curator
  • 三、应用场景
  • 总结



一、概述

首先,在分布式架构中,任何的节点都不能以单点的方式存在,因此我们需要解决单点的问
题。常见的解决单点问题的方式就是集群
大家来思考一下,这个集群需要满足那些功能?

  1. 集群中要有主节点和从节点(也就是集群要有角色)
  2. 集群要能做到数据同步,当主节点出现故障时,从节点能够顶替主节点继续工作,但是继
    续工作的前提是数据必须要主节点保持一直
  3. 主节点挂了以后,从节点如何接替成为主节点? 是人工干预?还是自动选举
    所以基于这几个点,我们先来把 zookeeper 的集群节点画出来。

1.Leader 角色

Leader 服务器是整个 zookeeper 集群的核心,主要的工作任务有两项

  1. 事物请求的唯一调度和处理者,保证集群事物处理的顺序性
  2. 集群内部各服务器的调度者

2.Follower 角色

Follower 角色的主要职责

  1. 处理客户端非事物请求、转发事物请求给 leader 服务器
  2. 参与事物请求 Proposal 的投票(需要半数以上服务器通过才能通知 leader commit 数据;
    Leader 发起的提案,要求 Follower 投票)
  3. 参与 Leader 选举的投票

3.数据同步

leader 节点如何和其他节点保证数据一致性,并且要求是强一致的。在分布式系统中,每一
个机器节点虽然都能够明确知道自己进行的事务操作过程是成功和失败,但是却无法直接获
取其他分布式节点的操作结果。所以当一个事务操作涉及到跨节点的时候,就需要用到分布
式事务,分布式事务的数据一致性协议有 2PC 协议和 3PC 协议

在这里插入图片描述

4. 2PC提交

(Two Phase Commitment Protocol)当一个事务操作需要跨越多个分布式节点的时候,为
了保持事务处理的 ACID 特性,就需要引入一个“协调者”(TM)来统一调度所有分布式节点
的执行逻辑,这些被调度的分布式节点被称为 AP。TM 负责调度 AP 的行为,并最终决定这
些 AP 是否要把事务真正进行提交;因为整个事务是分为两个阶段提交,所以叫 2pc

在这里插入图片描述
阶段一:提交事务请求(投票)

  1. 事务询问
    协调者向所有的参与者发送事务内容,询问是否可以执行事务提交操作,并开始等待各参与者的
    响应
  2. 执行事务
    各个参与者节点执行事务操作,并将 Undo 和 Redo 信息记录到事务日志中,尽量把提交过程中
    所有消耗时间的操作和准备都提前完成确保后面 100%成功提交事务
  3. 各个参与者向协调者反馈事务询问的响应
    如果各个参与者成功执行了事务操作,那么就反馈给参与者 yes 的响应,表示事务可以执行;
    如果参与者没有成功执行事务,就反馈给协调者 no 的响应,表示事务不可以执行,上面这个阶
    段有点类似协调者组织各个参与者对一次事务操作的投票表态过程,因此 2pc 协议的第一个阶
    段称为“投票阶段”,即各参与者投票表名是否需要继续执行接下去的事务提交操作。

阶段二:执行事务提交
在这个阶段,协调者会根据各参与者的反馈情况来决定最终是否可以进行事务提交操作,正常情况
下包含两种可能:执行事务、中断事务

5. Observer 角色

Observer 是 zookeeper3.3 开始引入的一个全新的服务器角色,从字面来理解,该角色充当
了观察者的角色。

1.观察 zookeeper 集群中的最新状态变化并将这些状态变化同步到 observer 服务器上。
2.Observer 的工作原理与 follower 角色基本一致,而它和 follower 角色唯一的不同在于observer 不参与任何形式的投票,包括事物请求 Proposal 的投票和 leader 选举的投票。简单来说,observer 服务器只提供非事物请求服务,通常在于不影响集群事物处理能力的前提
下提升集群非事物处理的能力

在这里插入图片描述

6. leader 选举

当 leader 挂了,需要从其他 follower 节点中选择一个新的节点进行处理,这个时候就需要涉及到 leader 选举从这个过程中,我们推导处了 zookeeper 的一些设计思想

7. 集群组成

1.通常 zookeeper 是由 2n+1 台 server 组成,每个 server 都知道彼此的存在。每个 server 都
维护的内存状态镜像以及持久化存储的事务日志和快照。对于 2n+1 台 server,只要有 n+1
台(大多数)server 可用,整个系统保持可用。我们已经了解到,一个 zookeeper 集群如果
要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通
信,基于这个特性,如果向搭建一个能够允许 F 台机器 down 掉的集群,那么就要部署 2*F+1
台服务器构成的 zookeeper 集群。因此 3 台机器构成的 zookeeper 集群,能够在挂掉一台
机器后依然正常工作。一个 5 台机器集群的服务,能够对 2 台机器怪调的情况下进行容灾。
如果一台由 6 台服务构成的集群,同样只能挂掉 2 台机器。因此,5 台和 6 台在容灾能力上
并没有明显优势,反而增加了网络通信负担。系统启动时,集群中的 server 会选举出一台
server 为 Leader,其它的就作为 follower(这里先不考虑 observer 角色)。
2.之所以要满足这样一个等式,是因为一个节点要成为集群中的 leader,需要有超过及群众过
半数的节点支持,这个涉及到 leader 选举算法。同时也涉及到事务请求的提交投票

6. 惊群效应

在这里插入图片描述
惊群效应推荐博文:https://blog.csdn.net/aazhzhu/article/details/89967346

二、Curator

Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括接连重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶级项目出现,是最流行的Zookeeper客户端之一。

三、应用场景

https://blog.csdn.net/qq_36679460/article/details/127234985

总结

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

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

相关文章

支持记录和审计上传/下载的文件内容,支持控制用户连接资产的方式,JumpServer堡垒机v3.4.0发布

2023年6月19日,JumpServer开源堡垒机正式发布v3.4.0版本。在这一版本中,JumpServer新增支持多种资源选择策略,包括用户登录、命令过滤、资产登录和连接方式;支持记录和审计上传/下载的文件内容,进一步提升系统的安全性…

linux(线程同步和互斥)

目录: 1.为什么需要同步和互斥 2.明确一些概念 3.实现一个抢票程序 4.理解加锁和解锁是原子的呢?? ------------------------------------------------------------------------------------------------------------------------- 1.为什么…

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议

哈工大计算机网络传输层详解之:流水线机制与滑动窗口协议 在上一节中我们逐步分析了可靠传输协议的设计过程,最后讲到rdt3.0的设计和实现机制。但是rdt3.0为了实现可靠性,牺牲了很大一部分性能,其中最主要的原因就在于停止等待协…

23.ELman神经网络预测数据

1.简述 学习目标:ELman神经网络预测数据 Elman网络介绍 神经网络是一个庞大的体系和概念,根据处理信息的不同方式来区分不同的network。比如根据处理信息结果的传递方向,分前馈型与反馈型。前馈型网络会根据输出数值来调整网络的参数&#xf…

LangChain 中文入门教程

为了便于阅读,已生成gitbook:LangChain 中文入门教程 - LangChain 的中文入门教程 github地址:https://github.com/liaokongVFX/LangChain-Chinese-Getting-Started-Guide 加了个 CHANGELOG,更新了新的内容我会写在这里,方便之前看…

2023-06-19 Untiy进阶 C#知识补充2——C#版本与Unity的关系

文章目录 一、Unity 与 C# 版本二、Unity 的 .Net API 兼容级别 一、Unity 与 C# 版本 Unity 版本C# 版本Unity 2021.2C# 9Unity 2020.3C# 8Unity 2019.4C# 7.3Unity 2017C# 6Unity 5.5C# 4 ​ 更多信息可以在 Unity 官网说明查看:Unity - Manual: C# compiler (u…

Git的使用方法

文章目录 Git简介Git用法上传到gitee上 Git简介 简单来说,Git就像一个日志一样,可以帮你记录你对文本文件的修改,但他的功能又强于日志,不仅可以记录,还可以帮你存储那些你对文本文件的修改,当你想要找回之…

C++基础入门教程(1)

1 C初识 1.1 第一个C程序 编写一个C程序总共分为4个步骤 创建项目 创建文件 编写代码 运行程序 1.1.1 创建项目 ​ Visual Studio是我们用来编写C程序的主要工具,我们先将它打开 1.1.2 创建文件 右键源文件,选择添加->新建项 给C文件起个名称&am…

亲测有效:自定义下拉头部刷新控件,任何子View都可以下拉

对于一个主Activity,里面进行多个fragment切换,不知其fragment包裹的是什么控件,但是都要进行下拉刷新,比如下拉切换语言、切换主题等场景。常见的方法,每个fragment里面都单独加下拉刷新;现在是自定义下拉…

Databend 开源周报 第 97 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend 。 列位置 Databe…

MongoDB 数据库管理系统

MongoDB是一个非关系型数据库管理系统,它使用文档模型存储数据。MongoDB中的文档类似于JSON对象,可以包含键值对和嵌套文档。MongoDB提供了强大的查询语言、聚合框架、索引和直接在数据存储中运行的计算。 MongoDB被广泛应用于许多领域,特别…

React 组件生命周期

组件的生命周期可分成三个状态: Mounting(挂载):已插入真实 DOMUpdating(更新):正在被重新渲染Unmounting(卸载):已移出真实 DOM Mounting 挂载阶段 Mounting阶段叫挂载阶段,伴随整个虚拟DOM的声明。它里面有四个小的…

Altium Designer软件点击没有反应?如何解决?

对电子工程师来说,Altium Designer(AD)是一款功能强大的PCB设计软件,被广泛应用在电子工程领域。然而在使用过程中可能会遇见AD软件点击没有反应的情况,面对这个问题该如何解决?下面来看看吧! 1…

公网访问Linux CentOS本地搭建的Web站点

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道,指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章:Linux CentOS本地搭建…

videojs-player视频播放技术学习

介绍: videojs是一个开源的HTML5视频播放器,它可以在各种设备和浏览器上播放视频。videojs提供了丰富的API和插件,可以实现自定义的视频播放功能。 使用videojs实现视频播放的步骤: 1. 引入videojs库 在HTML文件中引入videojs库…

chatgpt赋能python:Python打开文件路径:一种更轻松的办法

Python打开文件路径: 一种更轻松的办法 在Python编程中,打开文件路径是非常常见的任务。然而,对于许多初学者,Python打开文件路径时可能会面临一些问题和困难。本篇文章将介绍Python打开文件路径的方法,并给出一种更加轻松的解决…

5-垃圾回收

目录 1.死亡对象的判断算法 1.1.引用计数算法 1.2.可达性分析算法(主流) PS:强引用、软引用、弱引用、虚引用 2.垃圾回收算法 2.1.标记-清除算法 2.2.复制算法 2.3.标记-整理算法 2.4.分代算法(主流) PS&…

达梦体系结构

物理结构、逻辑结构、实例(内存结构、进程结构) 一、物理结构 配置文件、控制文件、数据文件、重做日志文件、归档日志文件、备份文件、跟踪日志文件、事件日志文件 (一)配置文件 以.ini结尾的文件,例如dm.ini (相…

chatgpt赋能python:Python打包成so文件的方法:详解

Python打包成so文件的方法:详解 Python是一种灵活且易于使用的高级编程语言,由于其强大的效率和易于上手的特性,在最近几年已经迅速地流行起来。Python支持多种开发范式,例如函数式编程、面向对象编程和脚本编程。 Python的这些…

【UCOS-III】自我学习笔记→第20讲→时间片调度

文章目录 前言实验步骤1.复制任务创建和删除工程文件并删除task3任务,修改任务1和任务2的优先级为22.修改任务1和任务2的内容3.查看示波器现象 测试代码工程文件总结 前言 无,仅作记录,不具有参考价值,所用开发板为STM32F411RET6…