Zookeeper简述

数新网络-让每个人享受数据的价值

官网现已全新升级—欢迎访问!

前 言

ZooKeeper是一个开源的、高可用的、分布式的协调服务,由Apache软件基金会维护。它旨在帮助管理和协调分布式系统和应用程序,提供了一个可靠的平台,用于处理分布式同步、配置管理和群组服务等任务。ZooKeeper广泛应用于构建分布式系统,它提供了一个稳定的基础来管理配置、协调节点、实现分布式锁、实现分布式队列等。通过ZooKeeper,开发人员可以轻松解决分布式系统中的同步和协调问题,使得分布式应用的开发更加简单和可靠。

01 zookeeper的特点

1-1 高可用性

ZooKeeper的设计目标之一是高可用性。它通过复制数据到多个服务器,使用Quorum算法来确保数据的一致性。如果部分节点发生故障,仍然能够提供可用的服务,保持系统的可用性。

1-2 一致性

ZooKeeper提供强一致性保证。在ZooKeeper集群中,大多数节点(法定人数)必须就数据的状态达成一致意见。这样可以确保每个客户端对数据的读取都能获得相同的最新数据。

1-3 简单数据模型

ZooKeeper采用类似文件系统的数据模型,使用树状结构来存储数据。每个节点(Znode)都有一个路径和一个数据负载。这种简单的数据模型使得ZooKeeper易于理解和使用。

1-4 事件通知

ZooKeeper支持Watch机制,客户端可以设置在Znode上的观察,以便在Znode发生更改时接收通知。这样可以实现分布式的事件通知和协作机制,支持事件驱动的应用程序设计。

1-5 顺序节点

 ZooKeeper支持顺序节点的创建,即创建的节点会自动带有唯一递增的序列号。这个特性可用于实现分布式锁、分布式队列等常见的协调原语。

1-6 原子操作

ZooKeeper提供原子操作,可以保证复杂的多步骤操作在ZooKeeper上是原子的。这些原子操作为构建高级别的分布式协调原语提供了支持。

1-7 集群模式

一致性。ZooKeeper集群中的节点可以动态地加入或离开,使得系统更加灵活和可扩展。

1-8 临时节点

ZooKeeper支持临时节点,这些节点的生命周期与客户端会话相关联。当客户端会话结束时,临时节点会被自动删除,这样可以实现临时性的数据和状态管理。

02  zookeeper架构

下图为zookeeper架构的角色分布图:

图片

2-1 Leader:

集群中的一个服务器被选举为Leader。Leader负责处理客户端的写请求(例如创建、更新和删除Znodes)和协调分布式事务。Leader通过ZooKeeper协议来确保写操作在集群中的大多数节点上同步执行,以保持数据的一致性。如果Leader服务器发生故障或断开连接,集群会通过选举算法自动选择新的Leader。

2-2 Follower

Follower是集群中的其他服务器,它们遵从Leader的指令,复制Leader上的写操作,以保持数据一致性。Follower可以处理客户端的读请求,但不能处理写请求。Follower与Leader保持心跳连接,以便及时了解Leader的状态。

观察者是一种特殊类型的ZooKeeper服务器,它不参与Leader选举,也不参与写操作的复制。

03  选举机制

集群中在 Zookeeper运行期间 Leader 和 非 Leader 各司其职,当有非 Leader 服务器宕机或加入不会影响 Leader,但是一旦 Leader 服务器挂了,那么整个 Zookeeper 集群将暂停对外服务,会触发新一轮的选举。

图片

第一次投票每台机器都会将票投给自己。接着每台机器都会将自己的投票发给其他机器,如果发现其他机器的zxid比自己大,那么就需要改投票重新投一次。比如server1 收到了三张票,发现server2的xzid为102,pk一下发现自己输了,后面果断改投票选server2为老大。

3-1 Server id(或sid):服务器ID

比如有三台服务器,编号分别是1,2,3。编号越大在选择算法中的权重越大,比如初始化启动时就是根据服务器ID进行比较。

3-2 Zxid:事务ID

服务器中存放的数据的事务ID,值越大说明数据越新,在选举算法中数据越新权重越大。

3-3 Epoch:逻辑时钟

也叫投票的次数,同一轮投票过程中的逻辑时钟值是相同的,每投完一次票这个数据就会增加。

3-4 Server状态:选举状态

LOOKING,竞选状态。

FOLLOWING,随从状态,同步leader状态,参与投票。

OBSERVING,观察状态,同步leader状态,不参与投票。

LEADING,领导者状态。

04 ZAB协议

ZAB(Zookeeper Atomic Broadcast)协议是Zookeeper内部用于实现分布式一致性的核心协议。它是一个基于原子广播的协议,用于保证Zookeeper集群中数据的一致性和可靠性。ZAB协议是Zookeeper的关键特性之一,确保在集群中的各个节点之间维持数据的一致性。

ZAB协议的特点:

原子广播:ZAB协议确保事务是原子性广播的,要么所有Follower节点都接收到该事务,要么都没有接收到。这样可以保证数据的一致性。

崩溃恢复:ZAB协议允许集群在部分节点宕机或崩溃后,重新选举新的Leader,从而保持服务的可用性和容错性。

顺序性:ZAB协议保证所有节点按照相同的顺序处理事务,从而保持数据的一致性。

轻量级:ZAB协议只需要在集群中的少数节点上进行广播和确认,因此具有较低的通信开销。

交叉验证可以帮助准确地估计模型的性能,从而支持更好的模型选择和超参数调整,以获得更好的泛化性能。

05 CAP理论

Zookeeper是一个分布式协调服务,它主要用于构建分布式系统中的协调和同步机制。而CAP理论则是分布式系统理论中的重要概念,它描述了在分布式系统中三个关键属性的权衡:一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)。CAP理论指出在分布式系统中,无法同时满足这三个属性,只能选择其中两个,因为其中任意两个属性之间是存在冲突的。

具体来说,CAP理论的三个属性解释如下:

5-1 一致性(Consistency)

在分布式系统中,一致性意味着所有节点在同一时刻看到的数据副本是相同的。即使是在有多个副本的情况下,所有节点也能够看到相同的数据。

5-2 可用性(Availability)

可用性指的是系统能够在有限时间内对请求作出响应,并能够保证服务的可用性,即使在部分节点故障的情况下。

5-3 分区容忍性(Partition Tolerance)

网络中断或节点之间无法相互通信,系统仍然能够保持可用性和一致性。

在CAP理论中,在分布式系统中只能选择其中两个属性,并且一般情况下选择分区容忍性是必须的,因为网络分区是不可避免的,特别在大规模的分布式系统中。Zookeeper在设计时倾向于CP(一致性和分区容忍性)模型。

它优先保证数据的一致性和分区容忍性,而可用性可能会在某些情况下受到影响。在Zookeeper中,当网络分区发生时,集群会尝试维持数据的一致性,但可能会导致一些节点在分区期间暂时不可用。这是因为Zookeeper为了保持数据的一致性,需要在多数节点上进行写操作确认,如果无法满足多数节点的写操作,写操作将被阻塞,从而影响可用性。

06 总结

Zookeeper 作为 Hadoop 项目中的一个子项目,是 Hadoop 集群管理的一个必不可少的模块,它主要用 来控制集群中的数据,如它管理 Hadoop 集群中的 NameNode,还有 Hbase 中 Master Election、 Server 之间状态同步等。

Zoopkeeper 提供了一套很好的分布式集群管理的机制,就是它这种基于层次型的目录树的数据结构,并对树中的节点进行有效管理,从而可以设计出多种多样的分布式的数据管理模型。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT第二天

1.优化登陆界面,当点击登录按钮后,在该按钮对应的槽函数中,判断账户和密码框内的数据是否为admin和123456,如果账户密码匹配成功,则提示登陆成功并关闭登录界面,如果账户密码匹配失败,则提示登录…

嵌入式开发-11 Linux下GDB调试工具

目录 1 GDB简介 2 GDB基本命令 3 GDB调试程序 1 GDB简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说,GDB主要帮助你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序&#…

介绍PHP

PHP是一种流行的服务器端编程语言,用于开发Web应用程序。它是一种开源的编程语言,具有易学易用的语法和强大的功能。PHP支持在服务器上运行的动态网页和Web应用程序的快速开发。 PHP可以与HTML标记语言结合使用,从而能够生成动态的Web页面&a…

Python Opencv实践 - Harris角点检测

参考资料:https://blog.csdn.net/wsp_1138886114/article/details/90415190 import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/chinease_tower.jpg", cv.IMREAD_COLOR) plt.imshow(img[:,:,::-1])#…

CSS笔记(黑马程序员pink老师前端)浮动,清除浮动

浮动可以改变标签的默认排列方式。浮动元素常与标准流的父元素搭配使用. 网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。 float属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框…

xss前十二关靶场练习

目录 一、xss原理和分类 1.原理 2.分类:xss分为存储型和反射型以及dom型 (1)反射性 (2)存储型 (3)dom型 二、靶场关卡练习​编辑 1.第一关 2.第二关 3.第三关 4.第四关 5.第五关 6…

Redis——认识Redis

简单介绍 Redis诞生于2009年,全称是Remote Dictionary Server,远程词典服务器,是一个基于内存的键值型NoSQL数据库。 特征 键值(Key-value)型,value支持多种不同数据结构,功能丰富单线程&…

对象模型和this指针(个人学习笔记黑马学习)

1、成员变量和成员函数 #include <iostream> using namespace std; #include <string>//成员变量和成员函数分开存储class Person {int m_A;//非静态成员变量 属于类的对象上的static int m_B;//静态成员变量 不属于类的对象上void func() {} //非静态成员函数 不…

博客程序系统其它功能扩充

一、注册功能 1、约定前后端接口 2、后端代码编写 WebServlet("/register") public class RegisterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置…

《向量数据库指南》——提高向量数据库Milvus Cloud 2.3的运行效率

简介:向量数据库彻底改变了我们处理复杂数据结构的方式: 向量数据库彻底改变了我们处理复杂数据结构的方式,为高维矢量提供了高效的存储和检索。作为向量数据库专家和《向量数据库指南》的作者,我很高兴能与大家分享向量数据库运行效率方面的最新进展。在本文中,我们将探讨…

ARM编程模型-常用指令集

一、ARM指令集 ARM是RISC架构&#xff0c;所有的指令长度都是32位&#xff0c;并且大多数指令都在一个单周期内执行。主要特点&#xff1a;指令是条件执行的&#xff0c;内存访问使用Load/store架构。 二、Thumb 指令集 Thumb是一个16位的指令集&#xff0c;是ARM指令集的功能…

PandaGPT部署演示

PandaGPT 是一种通用的指令跟踪模型&#xff0c;可以看到和听到。实验表明&#xff0c;PandaGPT 可以执行复杂的任务&#xff0c;例如生成详细的图像描述、编写受视频启发的故事以及回答有关音频的问题。更有趣的是&#xff0c;PandaGPT 可以同时接受多模态输入并自然地组合它们…

嵌入式linux(imx6ull)下RS485接口配置

接口原理图如下&#xff1a; 由原理图可知收发需要收UART_CTS引脚控制,高电平时接收&#xff0c;低电平时发送。通过查看Documentation/devicetree/bindings/serial/fsl-imx-uart.yaml和Documentation/devicetree/bindings/serial/rs485.yaml两个说明文档&#xff0c;修改设备树…

Nginx__高级进阶篇之LNMP动态网站环境部署

动态网站和LNMP&#xff08;LinuxNginxMySQLPHP&#xff09;都是用于建立和运行 web 应用程序的技术。 动态网站是通过服务器端脚本语言&#xff08;如 PHP、Python、Ruby等&#xff09;动态生成网页内容的网站。通过这种方式&#xff0c;动态网站可以根据用户的不同请求生成不…

分类算法系列⑤:决策树

目录 1、认识决策树 2、决策树的概念 3、决策树分类原理 基本原理 数学公式 4、信息熵的作用 5、决策树的划分依据之一&#xff1a;信息增益 5.1、定义与公式 5.2、⭐手动计算案例 5.3、log值逼近 6、决策树的三种算法实现 7、API 8、⭐两个代码案例 8.1、决策树…

SpringCloud(34):Nacos服务发现

1 从单体架构到微服务 1.1单体架构 Web应用程序发展的早期,大部分web工程师将所有的功能模块打包到一起并放在一个web容器中运行,所有功能模块使用同一个数据库,同时,它还提供API或者UI访问的web模块等。 尽管也是模块化逻辑,但是最终它还是会打包并部署为单体式应用,这…

C++:类和对象(二)

本文主要介绍&#xff1a;构造函数、析构函数、拷贝构造函数、赋值运算符重载、const成员函数、取地址及const取地址操作符重载。 目录 一、类的六个默认成员函数 二、构造函数 1.概念 2.特性 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 五、赋值…

deepstream6.2部署yolov5详细教程与代码解读

文章目录 引言一.环境安装1、yolov5环境安装2、deepstream环境安装 二、源码文件说明三.wts与cfg生成1、获得wts与cfg2、修改wts 四.libnvdsinfer_custom_impl_Yolo.so库生成五.修改配置文件六.运行demo 引言 DeepStream 是使用开源 GStreamer 框架构建的优化图形架构&#xf…

温控仪的工作原理

温控仪是调控一体化智能温度控制仪表&#xff0c;它采用了全数字化集成设计&#xff0c;具有温度曲线可编程或定点恒温控制、多重PID调节、输出功率限幅曲线编程、手动/自动切换、软启动、报警开关量输出、实时数据查询、与计算机通讯等功能&#xff0c;将数显温度仪表和ZK晶闸…

Element Plus table formatter函数返回html内容

查看 Element Plus table formatter 支持返回 类型为string 和 VNode对象&#xff1b; 若依全局直接用h函数&#xff0c;无需引用 下面普通基本用法&#xff1a;在Element Plus中&#xff0c;你可以使用自定义的formatter函数来返回VNode对象&#xff0c;从而实现更灵活的自定…