微服务实战系列之ZooKeeper(中)

前言

昨日博主的第一篇ZooKeeper,对它自身具备的能力做了初步介绍。书接上文,马不停蹄,我们继续挖掘它内在的美,充分把握它的核心与脉络。

在这里插入图片描述

揭秘ZooKeeper

Q:集群一致性协同是如何进行的

我们讲到分布式,一般是在集群环境下实现的。以ZooKeeper为例,它是如何保障集群环境下的成功运转呢?

在这里插入图片描述

1. 节点角色

通过上图,我们认识一下ZooKeeper的3类节点:

  • Leader节点
    Leader作为ZooKeeper的领袖,有着举足轻重的作用。它是ZooKeeper集群环境如何稳定运行的关键,主要负责读写和调度等核心工作。如果它宕机了,一致性调度从此冷却,整个集群将面临群龙无首的局面,直至系统瘫痪。
  • Follower节点
    作为随从节点,主要负责客户端的读操作,如果遇到写申请, 需要转发Leader节点完成,自身不做任何处理。如Leader宕机,会立即参与Leader的选举,具有投票权。
  • Observer节点
    作为候选角色,Observer为提升整个集群的执行效率提供一定帮助,但仅限于读操作。不参与写,不参与Leader的选举。

了解3类节点后,我们大概知道每个Server(Node)是如何执行客户端申请以及Server集群内部是如何完成最终一致性协同的过程。

比如Client对任一类节点发起读操作,则每个节点均可立即返回本地数据,如此便提高了响应性能;
比如Client对Follower节点发起写操作,则它会写命令转交Leader完成,最后由Leader完成写操作和数据同步;
比如Leader发生宕机,则Follower们立即启动选举,任命新的Leader。而Observer完全可以“袖手旁观,置之不理”,此刻真是“开心开心极了...”
在这里插入图片描述

2. 基础协议

为了实现上述一致性数据同步,ZooKeeper基于ZAB(Zookeeper Atomic Broadcast 原子广播协议)完成的。

ZAB准确来讲提供了一套完整的数据同步消息机制。(无论哪类节点)从接收客户端请求到客户端收到实时数据,并实现集群内部数据写操作的一致性,均是通过ZAB机制完成的。

a1.png#pic_center)

通过上图,我们了解到,Leader负责处理写请求,如其他节点接收到写请求,需转发Leader完成。那么Leader收到请求后,如何继续工作呢?

  1. 发布全局唯一事务申请zxid(zxid是64位的Long类型);
  2. 所有的Follower均对此申请进行反馈;
  3. Leader如收到反馈过半,则执行写提交,最后完成集群同步;
Q:集群选举如何进行的

我们都知道Leader至关重要,是维持ZooKeeper的集群健康运转的大脑。但天有不测风云,即使7*24高可用高可靠,也难免百密一疏。如果Leader真的宕机了? 如何维持集群秩序呢?

接下来,博主带着各位盆友,继续揭秘ZooKeeper中 Leader的选举过程。

既然有选举,就有投票,有投票,就有候选人,有投票人。那么候选人和投票人是怎么产生的,最终谁才能胜任?
在这里插入图片描述
在正式讲解选项过程前,我们先了解一些基础知识。

1. 节点状态

在ZooKeeper集群中,涉及4中状态:

节点状态简介
LOOKING寻 找 Leader 状态,即开始选举的初始状态
FOLLOWING跟随者状态,表明当前节点为Follower
LEADING领袖状态,表明当前节点为Leader
OBSERVING观察者状态,表明当前节点为Observer
2. 节点ID

我们在搭建ZooKeeper集群时,一般需要为每个Server(Node)标识一个唯一的编号(从小到大,比如1.2.3,以此类推)。

这个ID一般记录在每个ZooKeeper Server中的数据文件中,安装时指定。

3. 奇数

ZooKeeper集群信仰奇数,为什么? 因为有“过半才OK”的理念。
所以我们在搭建集群时,务必按要求配置,否则ZooKeeper可能无法正常工作哦。

4. 投票选举Leader
选举场景简介
启动时选择此刻集群中的节点ID最大者投票。当然开始时,均可为自己投票,实时更新状态
故障恢复时根据ZXID顺序,优先执行,并选择此刻集群中的节点ID最大者投票

投票结束后,收到票数过半者则当选新一任Leader,其他节点自动更新为Follower,而Observer自必不说,全程不参与。

到此为止,我们具备了以上基础知识后,继续回看上图,是不是可以理解了?


结语

博主通过揭秘ZooKeeper内在的核心逻辑,剖析它是如何完成我们想象中的职责和工作的。通过以上内容,我们可以发现,无论是什么协议或算法,均服务于某个业务和技术场景。所以感谢前辈们的辛勤耕耘,才有ZooKeeper的用武之地。


历史回顾

  • 微服务实战系列之ZooKeeper(上)
  • 微服务实战系列之MQ
  • 微服务实战系列之通信
  • 微服务实战系列之J2Cache
  • 微服务实战系列之Cache(技巧篇)
  • 微服务实战系列之MemCache
  • 微服务实战系列之EhCache
  • 微服务实战系列之Redis
  • 微服务实战系列之Cache
  • 微服务实战系列之Nginx(技巧篇)
  • 微服务实战系列之Nginx
  • 微服务实战系列之Feign
  • 微服务实战系列之Sentinel
  • 微服务实战系列之Token
  • 微服务实战系列之Nacos
  • 微服务实战系列之Gateway
  • 微服务实战系列之加密RSA
  • 微服务实战系列之签名Sign

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux--LAMP 平台部署及应用

5.1 LAMP平台概述 LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整套系统和相关软件,能够提供动态Web站点服务及其应用开发环境。LAMP是一个缩写词,具体包括Linux操作系统,Apache 网站服务器、MySQL数据库服务器&…

modbus 通信协议介绍与我的测试经验分享

1、简介 Modbus 协议是一种通信协议,用于工业自动化系统中的设备间通信。该协议最初由 Modicon 公司开发,并于 1979 年发布。 Modbus 协议通过串行通信格式进行通信,在物理层上支持 RS-232、RS-422 和 RS-485 等多种通信方式。在协议层面&am…

python3GUI--仿win风格天气By:PyQt5

文章目录 一.前言二.展示1.首页-白色1.首页-白色22.首页-黑色3.天气预报视频4.天气资讯-白色5.天气资讯-黑色6.收藏夹-白色7.收藏夹-黑色8.搜索9.mini-白色10.mini-黑色11.光遇天气 三.心得四.总结五.参考 一&#xff…

软件设计师——计算机网络(三)

📑前言 本文主要是【计算机网络】——软件设计师——计算机网络的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 &#x1…

uniapp之屏幕右侧出现滚动条去掉、隐藏、删除【好用!】

目录 问题解决大佬地址最后 问题 解决 在最外层view上加上class“content”;输入以下样式。注意:两个都必须存在在生效。 .content {/* 跟屏幕高度一样高,不管view中有没有内容,都撑开屏幕高的高度 */height: 100vh; overflow: auto; } .content::-webkit-scrollb…

【JavaWeb】往浏览器打印一个hello world

上集:建一个web项目 第一步:建好Servlet类的文件 右键src,建一个class 就行 第二步:编代码 可以直接复制粘贴 用来测试的类 import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; //↓是注解&#xff0…

同义词替换降低论文抄袭率的有效性探讨 papergpt

大家好,今天来聊聊同义词替换降低论文抄袭率的有效性探讨,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 标题:同义词替换降低论文抄袭率的有效性探…

持续集成交付CICD:Jenkins使用GitLab共享库实现基于SaltStack的CD流水线部署前后端应用

目录 一、实验 1.Jenkins使用GitLab共享库实现基于SaltStack的CD流水线部署前后端应用 2.优化共享库代码 二、问题 1.Jenkins手动构建后端项目流水线报错 一、实验 1.Jenkins使用GitLab共享库实现基于SaltStack的CD流水线部署前后端应用 (1)GitLa…

云原生之深入解析Kubernetes Operator的最佳实践和最常见的问题分析

一、Kubernetes Operator 简介 Kubernetes Operator 是通过连接主 API 并 watch 时间的一组进程,一般会 watch 有限的资源类型。当相关 watch 的 event 触发的时候,operator 做出响应并执行具体的动作。这可能仅限于与主 API 交互,但通常会涉…

python快速实现简单的图片透明化

整张图片透明化的完整代码如下: import os import glob from PIL import Imagedef convert_to_transparent(image_path, output_folder):image Image.open(image_path)image image.convert("RGBA")data image.getdata()new_data []for item in data:…

verilog语法进阶-分布式ram原语

概述 官方提供的原语 RAM16X1S_1 #(.INIT(16h0000) // Initial contents of RAM) RAM16X1S_1_inst (.O(O), // RAM output.A0(A0), // RAM address[0] input.A1(A1), // RAM address[1] input.A2(A2), // RAM address[2] input.A3(A3), // RAM address[3…

SpringMVC上传下载文件解读

知识点 文件上传(File Upload): 创建一个控制器方法,使用 MultipartFile 参数来接收上传的文件。在 Spring 配置文件中配置一个 MultipartResolver,常用的实现类是 CommonsMultipartResolver。在 MultipartResolver …

PyTorch官网demo解读——第一个神经网络(1)

神经网络如此神奇,feel the magic 今天分享一下学习PyTorch官网demo的心得,原来实现一个神经网络可以如此简单/简洁/高效,同时也感慨PyTorch如此强大。 这个demo的目的是训练一个识别手写数字的模型! 先上源码: fr…

crmeb v5新增一个功能的完整示例记录

首先,需求 工作中的二开需求是这样的,修改首页的装修,并新增回收报价的功能 开始动手 第一步,我们要到后面的管理界面,去装修中修改首面的展示 首页的页面配置好之后,就要在 前端的展示程序中 配置相…

105基于matlab的阶次分析算法

基于matlab的阶次分析算法,用于变转速机械故障特征提取,可运行,包含寻找脉冲时刻,等角度时刻。数据可更换自己的,程序已调通,可直接运行。 105阶次分析变转速信号处理 (xiaohongshu.com)

二十七、读写文件

二十七、读写文件 27.1 文件类QFile #include <QCoreApplication>#include<QFile> #include<QDebug>int main(int argc, char *argv[]) {QCoreApplication a(argc, argv);QFile file("D:/main.txt");if(!file.open(QIODevice::WriteOnly | QIODe…

Arrays.asList()方法:陷阱与解决之道

在Java编程中&#xff0c;Arrays类提供了一系列用于操作数组的实用方法。其中&#xff0c;​Arrays.asList()​方法是一个常用的方法&#xff0c;用于快速将数组转换为List集合。然而&#xff0c;这个方法存在一些潜在的陷阱&#xff0c;可能导致出现意外的行为。本文将介绍​A…

数据可视化---柱状图

import matplotlib.pyplot as plt import numpy as npdef plot_bar_chart(data, labels, colorsNone, title"Bar Chart", xlabel"X-Axis", ylabel"Y-Axis"):"""绘制柱状图&#xff0c;并在柱子上显示数量和比例。:param data: 包…

【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)

前言 大家好吖&#xff0c;欢迎来到 YY 滴C11系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; 目录 一.探究std::initializer_list是什么…

OceanBase 4.2.1社区版 最小资源需求安装方式

OceanBase 4.2.1社区版 最小资源需求安装方式 资源需求 资源需求分析 observer Memory 控制参数&#xff1a; memory_limit_percentage 默认80% memory_limit 直接设定observer Memory 大小 System memory 可设为1G 租户内存:sys租户内存设为1G&#xff0c;OCP需要的租户oc…